📢

【Discord.js】VCに参加/退出したユーザーを通知しよう

2023/08/10に公開

はろーわーるど

完成品


↑こんな感じのやつが作れます。

作った意味

Discord.jsでVoice関係難しいらしい。
Voice関係じゃないけど

テスト環境

  • Discord.js v14
  • Node.js v18

特定のユーザーがVCに参加/退出したら通知するコード

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildVoiceStates,
  ],
});

const CHANNEL_ID = '通知するチャンネルID';

client.on('voiceStateUpdate', async (oldState, newState) => {
  // 特定のユーザIDを設定
  const targetUserId = '特定のユーザID';

  if (newState.member.user.id === targetUserId) {
    const channel = client.channels.cache.get(CHANNEL_ID);

    // VCに参加すると表示するembed
    if (newState.channel) {
      const embed = new EmbedBuilder()
        .setTitle('VC参加ログ')
        .setDescription(`@${newState.member.user.username} (${targetUserId}) が、<#${newState.channel.id}>に参加しました。`)
        .setColor('#00ff00');

      await channel.send({ embeds: [embed] });

    // VCに退出すると表示するembed
    } else if (oldState.channel) {
      const embed = new EmbedBuilder()
        .setTitle('VC退出ログ')
        .setDescription(`@${newState.member.user.username} (${targetUserId}) が、<#${oldState.channel.id}>から退出しました。`)
        .setColor('#ff0000');

      await channel.send({ embeds: [embed] });
    }
  }
});


この写真と同じものが作れます。

サーバーユーザーがVCに参加/退出したら通知するコード

const CHANNEL_ID = '通知するチャンネルID';

client.on('voiceStateUpdate', async (oldState, newState) => {
  const channel = client.channels.cache.get(CHANNEL_ID);

  // VCに参加すると表示するembed
  if (newState.channel) {
    const embed = new EmbedBuilder()
      .setTitle('VC参加ログ')
      .setDescription(`@${newState.member.user.username} (${newState.member.user.id}) が、<#${newState.channel.id}>に参加しました。`)
      .setColor('#00ff00');

    await channel.send({ embeds: [embed] });

  // VCに退出すると表示するembed
  } else if (oldState.channel) {
    const embed = new EmbedBuilder()
      .setTitle('VC退出ログ')
      .setDescription(`@${newState.member.user.username} (${newState.member.user.id}) が、<#${oldState.channel.id}>から退出しました。`)
      .setColor('#ff0000');

    await channel.send({ embeds: [embed] });
  }
});


この写真と同じものが作れます。

はーとください。
作:@kinoko1216

Discussion