メンバーが参加するのに使用した招待コードを検知するサンプル
Discord.jsでメンバーが参加するのに使用した招待コードを検知する
サンプル注意:このサンプルはあくまで実装方法の例示レベルのもので、そのままで実用に耐えるコードではない
つまりメンバーが参加した前後でボットが必要があって、自身で保存しなければ事後的に取得することはできない
メンバーが参加するたびに招待コードを取得するAPIを叩くので規模によってはRate Limitに影響する可能性あり
実際に問題が発生する可能性の高さは不明だが、処理中にメンバーが参加してしまうと誤作動を引き起こす可能性あり
実用上特に必要なのが、招待コードが新たに作成されたときに、記録する処理
招待コードを取得するために、実行にはサーバー管理(MANAGE_GUILD)権限が必要
js// 招待コードを記憶しておくためのオブジェクトを定義
const allInvites = {}
client.on('ready', () => {
// ボット起動時に全サーバーの招待コードを読み込んで記録する
client.guilds.cache.forEach(guild => {
guild.fetchInvites().then(invites => {
allInvites[guild.id] = invites
}).catch(console.error);
})
})
client.on('guildMemberAdd', member => {
// メンバーが参加したサーバーの招待コードを全て取得する
member.guild.fetchInvites().then(invites => {
// 以前に取得したサーバーの招待コードを変数に入れて保持する
const oldInvites = allInvites[member.guild.id]
// 新たに取得した招待コードに置き換え
allInvites[member.guild.id] = invites
// 以前に取得した招待コードと新たに取得したので、使用回数が増えたものを探す
const invite = invites.find(i => oldInvites.get(i.code).uses < i.uses)
// ログに出す
console.log(`${member.user.tag} は ${invite.code} を使ってサーバーに参加しました`)
}).catch(console.error);
})
参考
v11のコードなのでv12では動かないので注意