世の中にはErisを使った方法が多くWeb上で見つかりますが、GlitchでErisを動かす方法が分からなかったので、discord.jsだけで動かすbotを書いてみました。
Discord.js / Glitch / Uptime RobotでのBotの作り方について
このサイトを参考にしました。
note.com
説明が重複するので、ここでは詳しい説明の多くを省きますが、基本的に私が独自にやったことは、Glitch上でのソースコードの編集だけです。
Glitchに書き込むソースコード
以下のソースコードになります
glitch.com
// Response for Uptime Robot const http = 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 implements const discord = require('discord.js'); const client = new discord.Client(); client.on('ready', message => { console.log('bot is ready!'); }); client.on('voiceStateUpdate', (oldMember, newMember) => { let newUserChannel = newMember.voiceChannel let oldUserChannel = oldMember.voiceChannel if(oldUserChannel === undefined && newUserChannel !== undefined) { let channelID; let channels = newMember.guild.channels; channelLoop: for (let c of channels) { let channelType = c[1].type; if (channelType === "text") { channelID = c[0]; break channelLoop; } } client.channels.get(channelID).send(newMember.user.username + " がチャンネル 「" + newUserChannel.name + "」 に入室したよ。"); } else if(newUserChannel === undefined){ let channelID; let channels = oldMember.guild.channels; channelLoop: for (let c of channels) { let channelType = c[1].type; if (channelType === "text") { channelID = c[0]; break channelLoop; } } client.channels.get(channelID).send(newMember.user.username + " がチャンネル 「" + oldUserChannel.name + "」 から退室したよ。"); } }) 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 );
簡単な解説
どこのテキストチャンネルに書き込むか
channelLoop のあたりでは、テキストチャンネルを探しています。
最初に見つかったテキストチャンネルに今回はメッセージを送るようにしています。
oldMemberやnewMemberが持つチャンネル情報から探します。
もし管理者が特定のチャンネルに書き込むようにしたい場合は、ここを修正する必要があります。
メッセージの内容
oldMemberやnewMemberから情報をとってきています。
簡単に言うと、newMemberのチャンネルが登録されていたら入室。チャンネルが登録されてなかったら退室としています。
この辺りは、コミュニティによって工夫が必要でしょう。
動作
このように動作します。
お疲れ様でした。
追記
この方法だと、1つのサーバーに1つのbotを用意する必要がありますね。何か工夫しないと。
また何か考えます。