discord.jsでbot、もしくはbotの役職にメンションされた場合の判定を取得する
discord.jsでbot、もしくはbotの役職にメンションされた場合の判定を取得するコード。
使い道的にはbotにメンションされた時だけじゃなくて役職でメンションされた場合でも反応させたい、
けど@everyoneなんかには反応させたくないって時用のコードですね。
なぜそんなことが必要かと言うと大概botには名前と同じ役職が付与されているので
メンションかけようかと思った時ついつい間違えて役職でメンションかけてしまうことがあるとかないとか
まぁあんまないと思いますが「そこまで対応しておきたい!」
って思ったとき用ですね。
つまりはこんな感じ
@botname #000 ⇀ true
@botname ⇀ true
@everyone ⇀ false
まずは、discordのbotにメンションがあった場合に取得するコードはこんな感じになります
1 2 3 4 5 6 7 8 9 |
const discord = require('discord.js'); const client = new discord.Client(); const token = 'botのトークン'; client.on('message', message => { var my_key = message.mentions.users.has(client.user.id) ? true : false; }); client.login(token); |
次に役職にメンションあった場合はこんな感じ
1 2 3 4 5 6 7 8 9 |
const discord = require('discord.js'); const client = new discord.Client(); const token = 'botのトークン'; client.on('message', message => { var my_key = message.mentions.roles.some(r => [client.user.username].includes(r.name)) ? true : false; }); client.login(token); |
まとめるとこうなります
1 2 3 4 5 6 7 8 9 |
const discord = require('discord.js'); const client = new discord.Client(); const token = 'botのトークン'; client.on('message', message => { var my_key = message.mentions.users.has(client.user.id) || message.mentions.roles.some(r => [client.user.username].includes(r.name)) ? true : false; }); client.login(token); |
あとは適当にif文なんかで処理を組ませれば完成です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const discord = require('discord.js'); const client = new discord.Client(); const token = 'botのトークン'; client.on('message', message => { var my_key = message.mentions.roles.some(r => [client.user.username].includes(r.name)) ? true : false; if (my_key) { var replyText = ''; message.content.match(/部屋ID/) ? replyText += `\n部屋IDは${message.channel.id}です` : ''; replyText = replyText ? replyText : 'zZZ'; message.reply(replyText); } }); |
ちなみにこの上のコードは文章に「部屋ID」と含まれていたら部屋IDを教えてくれるコードの例です。
最後に余談ですが@everyoneなども含め反応させたい場合は
1 |
message.mentions.has(data) |
で取得できるので
1 2 3 4 5 6 7 8 9 |
const discord = require('discord.js'); const client = new discord.Client(); const token = 'botのトークン'; client.on('message', message => { var my_key = message.mentions.has(data) || message.mentions.roles.some(r => [client.user.username].includes(r.name)) ? true : false; }); client.login(token); |
としたら取得できます。
※コードは全てdiscord.js v12のものになります。
discord.js