🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

2306閲覧

Discordbotで、占いとプレイ中の表記をしたい(Ruby)

chanonigiri

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2019/10/06 03:54

編集2019/10/06 14:16

前提・実現したいこと

ruby言語でdiscordbotを作っている
・ランダム結果(占い)を作りたい
・○○をプレイ中を表示したい!

発生している問題・エラーメッセージ

占いとプレイ中のコードの部分が構文エラーになってしまいます。

Microsoft Windows [Version 10.0.18362.388] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\ユーザー名> C:\Users\ユーザー名>cd C:\Users\ユーザー名\Desktop C:\Users\ユーザー名\Desktop>rubybot.rb C:/Users/ユーザー名/Desktop/rubybot.rb:12: syntax error, unexpected end, expecting end-of-input C:\Users\ユーザー名\Desktop>

該当のソースコード

(前提として最低限動くトークンとIDの入力は済んでいます。簡単な受け答えは動作確認済です)

Ruby

1require 'discordrb' 2bot = Discordrb::Bot.new token: 'トークン', client_id: ID 3 4 5bot.message(content: "占い!") do |event| 6 p a.sample(3) #=> [1, 9, 3] 7 event.respond "貴方の結果は#sampleです!" 8end 9 10 11bot.game = これをプレイ中 12end 13 14 15bot.run 16

試したこと

::占い部分::
bot.message(content: "占い!") do |event|
p a.sample(3) #=> [1, 9, 3]
event.respond "貴方の結果は#sampleです!"
end

::プレイ中部分::
bot.game = これをプレイ中
end

Ruby

1require 'discordrb' 2bot = Discordrb::Bot.new token: 'トークン, client_id: ID 3 4 5bot.message(content: "占い!") do |event| 6p a.sample(3) #=> [1, 9, 3] 7event.respond "貴方の結果は#sampleです!" 8end 9 10 11bot.game = これをプレイ中 12 13 14 15bot.run 16
Microsoft Windows [Version 10.0.18362.388] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\ユーザー名>cd C:\Users\ユーザー名\Desktop C:\Users\ユーザー名\Desktop>rubybot.rb libsodium not available! You can continue to use discordrb as normal but voice support won't work. Read https://github.com/meew0/discordrb/wiki/Installing-libsodium for more details. Traceback (most recent call last): C:/Users/ユーザー名/Desktop/rubybot.rb:563:in `<main>': undefined local variable or method `これをプレイ中' for main:Object (NameError)

補足情報(FW/ツールのバージョンなど)

仕様ツール:ruby言語 discordrb

占いのみ実行しようとするとこうなります

Ruby

1require 'discordrb' 2bot = Discordrb::Bot.new token: 'トークン', client_id: ID 3 4 5 6bot.message(content: "占い!") do |event| 7p a.sample(3) #=> [1, 9, 3] 8event.respond "貴方の結果は#sampleです!" 9 10 11 12bot.run
Microsoft Windows [Version 10.0.18362.388] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\ユーザー名>cd C:\Users\ユーザー名\Desktop C:\Users\ユーザー名\Desktop>rubybot.rb libsodium not available! You can continue to use discordrb as normal but voice support won't work. Read https://github.com/meew0/discordrb/wiki/Installing-libsodium for more details. [INFO : websocket @ 2019-10-06 23:08:10.609] Discord using gateway protocol version: 6, requested: 6 [ERROR : et-1 @ 2019-10-06 23:08:18.098] Exception: #<NameError: undefined local variable or method `a' for main:Object> [ERROR : et-1 @ 2019-10-06 23:08:18.098] C:/Users/owner/Desktop/rubybot.rb:7:in `block in <main>' [ERROR : et-1 @ 2019-10-06 23:08:18.098] D:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/discordrb-3.3.0/lib/discordrb/events/generic.rb:98:in `call' [ERROR : et-1 @ 2019-10-06 23:08:18.098] D:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/discordrb-3.3.0/lib/discordrb/bot.rb:1316:in `block in call_event'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2019/10/06 08:12

エラーメッセージと該当部分のソースがないと何もわかりません
chanonigiri

2019/10/06 08:40

エラーコードとソースコードを入力しました。よろしくおねがいします。
guest

回答2

0

ベストアンサー

まず、Rubyの基礎があやふやなのでそこからやるべきですね

aとは何ですか?
なぜ、p a.sample(3)をしているのですか?

event.respond "貴方の結果は#sampleです!"
bot.game = これをプレイ中

の2行については、文字列リテラルおよび式展開について学ぶとよいでしょう。

投稿2019/10/06 17:07

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2019/10/07 00:22 編集

Discordrb::Bot#game=については、String(文字列)を渡せとなっていますので 回答に書いたように、文字列リテラルを用いて文字列を生成し渡す必要があります。 sampleについては、aが配列ならばよいのですが 提示されたコード内で配列を変数aに設定している箇所がありません。 (リファレンス内では a = (1..10).to_a に相当する部分) また、pメソッドで表示したところでコンソールに表示されるだけでそれ以上の意味はありません。
chanonigiri

2019/10/07 08:17

貼っていただいたサイトとリテラルについて教えていただきありがとうございました。 熟読し正しいコードを理解することが出来ました。 Sampleについて難しく考えすぎていたようですね。もっと簡単な表記の仕方がありました。 game表示については私の環境では解決することが出来ない問題がでてしまった為、解決途中ではありますがリテラルやメゾッドを理解することでなんとか動くことができるレベルにはなりました。 ベストアンサーとさせていただきます。
guest

0

unexpected end, expecting end-of-input
と有るように、
余分な end があるからです。

bot.game = これをプレイ中
end

のendが余分です

投稿2019/10/06 09:44

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chanonigiri

2019/10/06 12:48

``` require 'discordrb' bot = Discordrb::Bot.new token: 'トークン, client_id: ID bot.message(content: "占い!") do |event| p a.sample(3) #=> [1, 9, 3] event.respond "貴方の結果は#sampleです!" end bot.game = これをプレイ中 bot.run ``` の場合の実行結果ですが ``` Microsoft Windows [Version 10.0.18362.388] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\ユーザー名>cd C:\Users\owner\Desktop C:\Users\ユーザー名\Desktop>rubybot.rb libsodium not available! You can continue to use discordrb as normal but voice support won't work. Read https://github.com/meew0/discordrb/wiki/Installing-libsodium for more details. Traceback (most recent call last): C:/Users/owner/Desktop/rubybot.rb:563:in `<main>': undefined local variable or method `これをプレイ中' for main:Object (NameError) ``` となってしまいました。 これはdiscordrbがそもそもこのコードに対応していないということなんでしょうか?
winterboum

2019/10/06 16:44

discordrb は知らないので、その使い方はわかりませんが、 このエラーは p a.sample(3) で 突然 a が出てきて居るからです。
chanonigiri

2019/10/06 22:51

ありがとうございます
winterboum

2019/10/06 23:18

実を言えば、それらが通ってもやりたいことには程遠いです。 discordrbの勉強も必要ですが、その前に asm さんの言われるように、rubyの勉強をしないと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問