質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Ruby

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1465閲覧

Discordrb BOTが動かない URIError?

Konayukin

総合スコア3

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Ruby

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/06/11 05:08

編集2021/06/11 10:15

前提・実現したいこと

こちらのページで紹介されている読み上げBotを使わせていただこうと思いたち制作に取り掛かったのですが、RubyもDockerも触ったことすらない門外漢の為行き詰ってしまいました。
現状!connectでBotをボイスチャンネルに召喚は出来るのですが、どうにもその段階でエラーを起こし固まってしまうようです。

かなり色々調べたのですが限界を迎えたためどうかお力添えいただければありがたいです。

下にはエラーログと参照サイトのファイルの中からこちら側で編集するファイルのみピックアップしました。
各アプリのバージョン等も下にまとめておきます。

Dockerのログに表示されるエラーメッセージ

[INFO : websocket @ 2021-06-11 02:42:42.661] Discord using gateway protocol version: 6, requested: 6 #<Thread:0x000055a3f37ba1c8@/app/vendor/bundle/ruby/2.5.0/gems/discordrb-3.3.0/lib/discordrb/voice/network.rb:252 run> terminated with exception (report_on_exception is true): Traceback (most recent call last): 8: from /app/vendor/bundle/ruby/2.5.0/gems/discordrb-3.3.0/lib/discordrb/voice/network.rb:254:in `block in connect' 7: from /app/vendor/bundle/ruby/2.5.0/gems/discordrb-3.3.0/lib/discordrb/voice/network.rb:302:in `init_ws' 6: from /app/vendor/bundle/ruby/2.5.0/gems/discordrb-3.3.0/lib/discordrb/voice/network.rb:302:in `new' 5: from /app/vendor/bundle/ruby/2.5.0/gems/discordrb-3.3.0/lib/discordrb/websocket.rb:41:in `initialize' 4: from /app/vendor/bundle/ruby/2.5.0/gems/websocket-client-simple-0.3.0/lib/websocket-client-simple/client.rb:8:in `connect' 3: from /app/vendor/bundle/ruby/2.5.0/gems/websocket-client-simple-0.3.0/lib/websocket-client-simple/client.rb:19:in `connect' 2: from /usr/local/lib/ruby/2.5.0/uri/common.rb:237:in `parse' 1: from /usr/local/lib/ruby/2.5.0/uri/rfc3986_parser.rb:73:in `parse' /usr/local/lib/ruby/2.5.0/uri/rfc3986_parser.rb:67:in `split': bad URI(is not URI?): wss://japan286.discord.media:443:443 (URI::InvalidURIError) [WARN : heartbeat @ 2021-06-11 02:44:04.876] Last heartbeat was not acked, so this is a zombie connection! Reconnecting [ERROR : heartbeat @ 2021-06-11 02:44:04.876] The websocket connection has closed: nil

※追記 変更後のエラーメッセージ

[INFO : websocket @ 2021-06-11 10:02:02.356] Discord using gateway protocol version: 6, requested: 6 [WARN : heartbeat @ 2021-06-11 10:03:24.500] Last heartbeat was not acked, so this is a zombie connection! Reconnecting [ERROR : heartbeat @ 2021-06-11 10:03:24.500] The websocket connection has closed: nil [WARN : vws-i @ 2021-06-11 10:03:25.786] VWS close: no address for japan9411.discord.media:443 [ERROR : vws-i @ 2021-06-11 10:04:43.416] VWS error: Disconnected.

docker-compose.yml

AWSのシークレットキーとBotのトークンは伏せてあります。””で囲わなきゃいけない等初歩の知識不足の可能性もあるため先頭と後ろの文字だけ残しています。

version: '3' services: discord-ttsbot: build: . tty: true volumes: - "./data:/data" environment: - AWS_REGION=ap-northeast-1 - AWS_ACCESS_KEY_ID=AKIA3DEJUM6CADMPZB7G - AWS_SECRET_ACCESS_KEY=l??????????????????????????????F - DISCORD_BOT_TOKEN=Q??????????????????????????????????????????????P - POLLY_VOICE_ID=Mizuki - TTS_CHANNELS=#webhooktest

各ツールのバージョン

ruby 2.7.3p183 [x64-mingw32]
discordrb 3.3.0
Docker 20.10.7
git 2.32.0.windows.1

aws-sdk サイトのGemfileをそのままbundle install したので多分 3.0.1

試したこと

githubのdiscordrbファイルも丸ごとダウンロードして取り合えずbundle install
libsodium-1.0.18-msvc.zipをダウンロードしてx64/Release/v120/dynamic/libsodium.dllをsodium.dllに改名してC:\Windows\System32に設置

何が必要なことで何が要らないことなのか分からない為思い出せる限り入れたものやったことを書き込んでみました。
そも参考にしたサイトの方に詳しい前提アプリややり方等は載ってなかったので調べ調べであれやこれやと必要そうなものを突っ込んでいきました。
最終的に素人なりに目を凝らしてURIエラー?が出てるっぽい?からよくわからんけど「wss://japan286.discord.media:443:443」のWebSocketが繋がらないんか?と思って接続をテストしてみたんですが(多分)問題なく...
Dockerからエラーを出してるファイルを片っ端から引っ張り出して中身を覗いては調べてをしてみたんですが特に収穫はなく...

調べてる最中に想像以上にいろんな言語でBOT作れることを知りましたがここまで来た以上なんとかしてこれだけは完成させたいという気持ちもありまして...どうぞよろしくお願いいたします。

※追記
回答してくださった方の助言を元にGemfileを更新してコンベア内のRubyを2.7.0にアップデートしましたが当初と同じエラーが発生
WebSocketのURLの後ろの443が二つ付いてるのがダメなんじゃないかと素人なりに目星を付けて該当ファイル(/usr/local/lib/ruby/2.5.0/uri/rfc3986_parser.rb)内を下記のように書き換えてみましたが違ったエラーが発生
host = "wss://#{@endpoint}:443"

host = "wss://#{@endpoint}"
長いので全文は割愛しちょこっとだけ周辺を記載↓

def init_ws host = "wss://#{@endpoint}" @bot.debug("Connecting VWS to host: #{host}") # Connect the WS @client = Discordrb::WebSocket.new( host, method(:websocket_open), method(:websocket_message), proc { |e| Discordrb::LOGGER.error "VWS error: #{e}" }, proc { |e| Discordrb::LOGGER.warn "VWS close: #{e}" } ) @bot.debug('VWS connected') # Block any further execution heartbeat_loop end

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

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

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

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

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

yu_1985

2021/06/11 06:37

回答になるかわからないのでこっちに書きますが、古いdiscordrbのバグの可能性があります。 https://github.com/discordrb/discordrb/issues/447 メッセージを読むとURIの指定形式がおかしいような気がしていますが、ライブラリ以外の部分でどこがおかしいかはちょっとわかりません。 そもそもですが、参考にしているソースが3年ほど前のものとかなり古いのでもっと新しいものを参考にすべきかなとは思います。 軽く調べた感じPollyを使うものでもそうでないものでも結構いっぱい出てくるのでそちらを見てみてください。 Dockerを使っているのでローカルのRubyのバージョンはあまり意味がなくて、Dockerfileで指定しているバージョンになっています。(ログを見ると2.5.0って書いてあるところが出てきていると思います) もしかしたらそこをもっと新しくすれば変わるかもしれませんが…。
Konayukin

2021/06/11 10:18

変身ありがとうございます。 >そもそもですが、参考にしているソースが3年ほど前のものとかなり古いのでもっと新しいものを参考にすべきかなとは思います。 もう全くその通りだと思います。調べてる最中に自分の得意な言語でも開発出来ることを知ったので以降そっちでチャレンジしなおそうと思います。 ですがここに来るまでそこそこ労力を費やしたので勉強がてらもう少し粘ってみようかなと思います。 因みに指摘のあったRubyのバージョンは直してみたのですが当初のエラーと同じ(フォルダ名から見てRubyのバージョンは2.7.0になってました。最後のアドレスだけwss://japan9411.discord.media:443:443に変わってました)ものをはかれてしまいました...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問