当時のversion
"discord.js": "11.5.1"
起こったこと
会社で使用しているDiscordボットが動かなくなった。最後に動いていたのを確認したのは2022年6月ごろである。
正しくは特定の文字に反応するはずのDiscordボットが何も返信しなくなった。
権限回りに変更があった
どうもDiscordのボットについて権限回りの変更があったようだ。2022/8/31からmessage contentを取得するには権限を追加しないといけない。
また、この変更に対応するにはdiscord.jsをver13以降にしないといけない。そしてそのためにはNodeのVersionを16以上にしないといけない。typescriptのversionにも注意する必要がありそうだ。
権限の変更
ここで変更する。 discord.com
該当するアプリケーションを選びbot
をクリックする。Privileged Gateway Intents
の項目にあるラジオボタンのうち、MESSAGE CONTENT INTENT
をONにした。
コードの修正
ver13になる過程でClient
クラスを作るときのコンストラクタにoptionが必要になったっぽい。また、イベントリスナとしてmessage
だったものがmessageCreate
になったのも変更点になる。
const client = new Discord.Client({ // この辺りが追加された要素。必要そうな権限だけを選んだ(と思う)ので、適宜変更してほしい intents: [ GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMessages, GatewayIntentBits.Guilds, ], }); client.on("ready", (cli) => { console.log("ready"); }); // ここのmessageイベントからmessageClientイベントに変更。型もついているのでVersionを上げたらわかると思う。 // client.on("message", (msg) => { client.on("messageCreate", (msg) => { if (msg.content === "ping") { msg.reply("pong"); } }); await client.login("login");
こっちも要確認
可能ならスラッシュコマンドに変更することも検討したほうがよさそうだ。