Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9299

discord.jsでメンションするとmp3ファイルを再生するbot

$
0
0

はじめに

実装/実行環境: glitch.com : https://glitch.com/
定期bot監視: UptimeRobot : https://uptimerobot.com/
開発言語: Node.js
discord API: v12

botの作成等はこちらの記事を参考にしてください(コーディング部分以外)
https://note.com/bami55/n/ncc3a68652697#KRily

この記事の現バージョンより古いコードや、今回作成するbotのための追加作業を敵船説明していきます。
※ botの招待でURLの作成時にパーミッションをAdminにするのは嫌!!という方は、
  下記画像のようにBOT PERMISSIONSを設定してください
disco.png

コード

まず、ボイスチャットをbotが利用するには@discordjs/opusというパッケージが必要なので、
package.jsonを開き、上部のAdd Package@discordjs/opusと打ち込んでインポートしてください。
※数分かかるので気長にお待ちください


次に、assetsを開き、Upload an Asset↑を押して音声をアップロードしてください。
ここでアップロードしたファイルをクリックすることで、そのURLが取得できます。


次に、コードについてです。下記に僕の書いたコード全体を乗せます。

main.js
// Response for Uptime Robotconsthttp=require("http");http.createServer(function(request,response){response.writeHead(200,{"Content-Type":"text/plain"});response.end("Discord bot is active now \n");}).listen(3000);// Discord bot implementsconstdiscord=require("discord.js");constclient=newdiscord.Client();client.on("ready",message=>{client.user.setActivity("メンションで歓声");console.log("bot is ready!");});// メッセージ取得時client.on("message",message=>{// botのメンション かつ メンションしたユーザがvcチャネルに入っているかどうかif(message.mentions.has(client.user)&&message.member.voice.channel){// ボイチャに参加message.member.voice.channel.join().then(conn=>{// メンションメッセージを削除message.delete();// assetsに追加したmp3ファイルの再生インスタンスconstdispatcher=conn.play("assetsから再生したいmp3ファイルの URLをコピーして貼る");// 再生終了時にボイチャを抜けるdispatcher.on("finish",reason=>{conn.disconnect();});}).catch(console.log);return;}});if(process.env.DISCORD_BOT_TOKEN==undefined){console.log("please set ENV: DISCORD_BOT_TOKEN");process.exit(0);}client.login(process.env.DISCORD_BOT_TOKEN);

ready部分

まず、botのアクティビティ表示のためにuser.setActivity()を利用しています。
v11ではuser.setPresence()だったようです。

message部分

最初のif文で、メンションされた人物が当該botであるかの判定にmentions.has()を利用しています。
v11ではisMemberMentioned()だったようです。

また、メンションしたユーザーの所在voiceチャンネルの取得にmember.voice.channelを利用しています。
v11ではmember.voiceChannelだったようです。

assetsのファイル(.mp3)の再生にplay()を利用しています。
v11ではplayFile()だったようです。

また、再生ファイルの終了判定で"finish"としていますが、v11ではendだったようです。

最後に

メンションをbotが自動で消すようにしましたが、このままではタイミングが悪いと異なるメッセージが消される
可能性がありますので、bot自信を指すメッセージであるか確認した方がいいです。

また、UptimeRobotでURLにhttps://invited-fixed-wok.glitch.meを入力とあるが、これはログインしている
ユーザーのプロジェクトのプレビューページを指すものだと思うので、EditページのURLを入力すると良い...はず...


Viewing all articles
Browse latest Browse all 9299

Trending Articles