はじめに
実装/実行環境: 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を設定してください
コード
まず、ボイスチャットをbotが利用するには@discordjs/opusというパッケージが必要なので、package.jsonを開き、上部のAdd Packageで@discordjs/opusと打ち込んでインポートしてください。
※数分かかるので気長にお待ちください
次に、assetsを開き、Upload an Asset↑を押して音声をアップロードしてください。
ここでアップロードしたファイルをクリックすることで、そのURLが取得できます。
次に、コードについてです。下記に僕の書いたコード全体を乗せます。
// 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を入力すると良い...はず...