趣味でDiscordのチャットボットを作ってみました。
ボット宛のメンションでのみ動くようにしたかったのですが、@everyoneでも反応してしまっていたので、調べてみました。
準備編
Discord Botの作成には、こちらのnoteを参考にさせていただきました。ですので、discord.js v11での作成になります。
以下三点を読み替えて作成しました。
・「2. Glitchでサーバーを作成」にて作成するプロジェクトを「hello-express」→「glitch-hello-node」に置き換える
・「package.js」と「server.js」のみ残す。
・「.env」ファイルが見つからなかったため、Filesから自分で作成しました。
isMentionedとisMemberMentionedについて調査
元コードの以下の部分がメンションで反応する部分になります。
if(message.isMemberMentioned(client.user)){
isMentionedとisMemberMentionedのマニュアルは
それぞれ翻訳かけると
isMentioned
このメッセージにユーザー、チャネル、または役割が記載されているかどうか。
isMemberMentioned
このメッセージにギルドメンバーが記載されているかどうか。ユーザーの言及、役割の言及、および@ everyone /@hereの言及を考慮に入れます。
「@ everyone /@hereの言及を考慮に入れます。」というのがうまく翻訳が正しいのかわかりませんが、とりあえず以下のように解釈しました。
isMentioned:@everyoneに反応しない
isMemberMentioned:@everyoneに反応する
とりあえず動いているコード
isMemberMentionedからisMentionedに置き換えて使っています。これで@everyoneに反応しないボットになっています。
/*if(message.isMemberMentioned(client.user)){*/
if(message.isMentioned(client.user)){