generated at
メンバーが参加するのに使用した招待コードを検知するサンプル
Discord.jsでメンバーが参加するのに使用した招待コードを検知するサンプル
注意:このサンプルはあくまで実装方法の例示レベルのもので、そのままで実用に耐えるコードではない
そもそもDiscordに、使用された招待コードを取得できるAPIがないので、参加のタイミングで使用回数に変化があった招待コードから推測する実装になる(考え方はメッセージを削除したユーザーを取得するサンプルと近い)
つまりメンバーが参加した前後でボットが必要があって、自身で保存しなければ事後的に取得することはできない
メンバーが参加するたびに招待コードを取得する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では動かないので注意