You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js机器人无法发送成员加入/离开日志问题求助

Discord.js 成员加入/离开消息功能修复

你的代码存在几个关键错误,导致功能失效甚至崩溃,以下是问题分析和修复后的完整代码:

核心错误点

  • 回调参数命名错误:guildMemberAdd/guildMemberRemove事件触发时,传入的是GuildMember对象,不是message,你需要用正确的变量名(比如member)来访问成员信息。
  • 错误引用类而非实例:你直接使用Discord.GuildMember类来获取属性(比如Discord.GuildMember.username),这是完全错误的,必须通过回调传入的member实例来访问,比如member.user.username。
  • 语法错误:guildMemberRemove事件的setAuthor方法缺少闭合括号,还有多余的大括号导致代码结构混乱。
  • 头像获取方式错误:GuildMember对象没有avatarURL()方法,需要调用member.user.displayAvatarURL()来获取用户头像链接。

修复后的代码

const { EmbedBuilder } = require('discord.js');

// 成员加入事件
client.on("guildMemberAdd", (member) => {
  const currentDate = new Date();
  const unixTimestamp = Math.floor(currentDate.getTime() / 1000);

  const userJoined = new EmbedBuilder()
    .setColor(0x0099FF)
    .setTitle(`${member.user.username} 加入了服务器`)
    .setDescription(`成员:<@${member.user.id}> \n**账号创建时间**:${member.user.createdAt}`)
    .setAuthor({ 
      name: '用户日志系统', 
      iconURL: member.user.displayAvatarURL() 
    })
    .addFields(
      { name: '用户ID', value: member.user.id, inline: true },
      { name: '时间戳', value: `<t:${unixTimestamp}>`, inline: true }
    )
    .setFooter({ text: currentDate.toString() });

  const joinChannel = client.channels.cache.get("1010193667975282698");
  if (joinChannel) joinChannel.send({ embeds: [userJoined] });
});

// 成员离开事件
client.on("guildMemberRemove", (member) => {
  const currentDate = new Date();
  const unixTimestamp = Math.floor(currentDate.getTime() / 1000);

  const userLeft = new EmbedBuilder()
    .setColor(0x0099FF)
    .setTitle(`${member.user.username} 离开了服务器`)
    .setDescription(`成员:<@${member.user.id}> \n**账号创建时间**:${member.user.createdAt}`)
    .setAuthor({ 
      name: '用户日志系统', 
      iconURL: member.user.displayAvatarURL() 
    })
    .addFields(
      { name: '用户ID', value: member.user.id, inline: true },
      { name: '时间戳', value: `<t:${unixTimestamp}>`, inline: true }
    )
    .setFooter({ text: currentDate.toString() });

  const leaveChannel = client.channels.cache.get("1010666655615029259");
  if (leaveChannel) leaveChannel.send({ embeds: [userLeft] });
});

额外优化点:

  • 添加了频道存在性判断,避免因频道不存在导致报错
  • 给字段添加inline: true让显示更紧凑

内容的提问来源于stack exchange,提问作者CarterNLong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:36:24