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