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

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

詳細はこちら
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1294閲覧

エラー文がわからない

kamesan_8710

総合スコア1

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/17 15:13

編集2021/03/17 15:20

前提・実現したいこと

Discord.jsで検索したYouTubeの動画を再生する機能を作っています。
上記の機能を作成中に以下のエラーメッセージが発生しました。

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

}); 12:08 AM 12:08 AM 12:08 AM SyntaxError: Unexpected end of input 12:08 AM at Module._compile (internal/modules/cjs/loader.js:703:23) 12:08 AM at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10) 12:08 AM at Module.load (internal/modules/cjs/loader.js:628:32) 12:08 AM at Function.Module._load (internal/modules/cjs/loader.js:555:12) 12:08 AM at Function.Module.runMain (internal/modules/cjs/loader.js:826:10) 12:08 AM at internal/main/run_main_module.js:17:11 12:08 AM a few seconds ago Jump To/app/server.js:313 12:09 AM }); 12:09 AM 12:09 AM 12:09 AM SyntaxError: Unexpected end of input 12:09 AM at Module._compile (internal/modules/cjs/loader.js:703:23) 12:09 AM at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10) 12:09 AM at Module.load (internal/modules/cjs/loader.js:628:32) 12:09 AM at Function.Module._load (internal/modules/cjs/loader.js:555:12) 12:09 AM at Function.Module.runMain (internal/modules/cjs/loader.js:826:10) 12:09 AM at internal/main/run_main_module.js:17:11 12:09 AM a few seconds ago Jump To/app/server.js:313 12:09 AM }); 12:09 AM 12:09 AM 12:09 AM SyntaxError: Unexpected end of input 12:09 AM at Module._compile (internal/modules/cjs/loader.js:703:23) 12:09 AM at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10) 12:09 AM at Module.load (internal/modules/cjs/loader.js:628:32) 12:09 AM at Function.Module._load (internal/modules/cjs/loader.js:555:12) 12:09 AM at Function.Module.runMain (internal/modules/cjs/loader.js:826:10) 12:09 AM

Javascript

1 2const ytdl = require('ytdl-core') 3const yts = require('yt-search') 4client.on('message',async message => { 5 if(message.content.startsWith('b!yt')&&message.content.match("https://")){ 6 // メッセージから動画URLだけを取り出す 7 var url = message.content.replace('b!yt','') 8 // まず動画が見つからなければ処理を止める 9 if (!ytdl.validateURL(url)) return message.channel.send('動画が存在しません。URLをお確かめください。') 10 // コマンドを実行したメンバーがいるボイスチャンネルを取得 11 const channel = message.member.voice.channel 12 // コマンドを実行したメンバーがボイスチャンネルに入ってなければ処理を止める 13 if (!channel) return message.reply('ボイスチャンネルに参加してください。\n') 14 // チャンネルに参加 15 const connection = await channel.join() 16 // 動画の音源を取得 17 const stream = ytdl(ytdl.getURLVideoID(url), { filter: 'audioonly',quality:'highestaudio' }) 18 // 再生 19 dispatcher = connection.play(stream) 20 // 再生が終了したら抜ける 21 dispatcher.once('finish', () => {channel.leave()}) 22 }else{ 23 var douga = message.content.replace('b!yt','') 24 //Youtubeから検索する 25 yts( douga, async function ( err, r ) {//検索 26 //videosに検索結果が配列で返される 27 var videos = r.videos 28 //videoの最初のurlを取得する(動画ごとにデータが入った連想配列がある) 29 const url =videos[0].url 30 //この行は多分要らないが念の為 31 if (!ytdl.validateURL(url)) return message.reply('検索結果に合う動画が見つかりませんでした。スペルミスが無いか 確認するか、検索ワードを変更してみてください。') 32 // コマンドを実行したメンバーがいるボイスチャンネルを取得 33 const channel = message.member.voice.channel 34 // コマンドを実行したメンバーがボイスチャンネルに入ってなければ処理を止める 35 if (!channel) return message.reply('ボイスチャンネルに参加してください。') 36 // チャンネルに参加 37 const connection = await channel.join() 38 // 動画の音源を取得 39 const stream = ytdl(ytdl.getURLVideoID(url), { filter: 'audioonly',quality:'highestaudio' }) 40 // 再生 41 dispatcher = connection.play(stream) 42 message.channel.send({embed:{ 43 title:"再生が開始されました。", 44 description:'曲の情報:\n'+videos[0].title+'\nURL:'+videos[0].url+'\nチャンネル'+videos[0].author.name+'\n視聴回数'+videos[0].views+'回', 45 color:0x36393f, 46 timestamp:new Date() 47 48 }}) 49 // 再生が終了したら抜ける 50 dispatcher.once('finish', () => { 51 channel.leave() 52 }); 53 54

試したこと

かっこの位置を増やしたりした

初心者なので修正したコード載せてもらえると嬉しいです

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

3/18現在の最新のバージョン

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

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

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

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

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

guest

回答1

0

ベストアンサー

解決案

コードの最後の部分にカッコをいくつか追加すればとりあえず解決します。

Javascript

1 // 再生が終了したら抜ける 2 dispatcher.once('finish', () => { 3 channel.leave() 4 }) 5 })}})

解説

kamesan_8710さんに発生したエラー文のうちSyntaxError: Unexpected end of inputは、ざっくりお伝えすると「終わるはずがないのにプログラムが終わってしまった!」という意味です。
今回の場合は閉じカッコが無い(カッコをまだ閉じてないのにプログラムが終わっている)ことが原因です。if ~ else ~の閉じカッコがなかったり、yts( douga, async function ( err, r ) {//検索 で始まっているところの閉じカッコがなかったり。
解決案に記載したとおり合計5つの閉じカッコが足りていませんでした。
ちゃんとインデントを使ってプログラムを書くことを意識すれば、この手のミスは減っていくんじゃないかなと思うので、是非お試しください。

何か不明な点があればお伝え下さい。
ご確認をよろしくおねがいします!

投稿2021/03/17 16:00

marasonPD

総合スコア170

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問