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
相关产品推荐
相关产品推荐

