如何仅为在指定Discord频道发言的用户添加XP
仅特定Discord频道发言添加XP的实现方案
要实现只有成员在指定频道发言才加XP,核心是在消息事件中添加频道ID校验,只有符合条件的频道才执行后续的XP计算和角色操作逻辑。以下是修改后的完整代码及说明:
修改后的代码
client.on('messageCreate', async message => { // 基础过滤:非服务器消息、机器人消息直接返回 if (!message.guild || message.author.bot) return; // 定义允许获得XP的频道ID,替换成你的目标频道ID const allowedChannelId = "你的频道ID"; // 校验频道:非指定频道直接返回,不执行XP逻辑 if (message.channel.id !== allowedChannelId) return; const prefix = '?' const args = message.content.slice(prefix.length).trim().split(/ +/g); const command = args.shift().toLowerCase(); const user = await Levels.fetch(message.author.id, message.guild.id); // 随机生成1-30的XP并添加 const randomAmountOfXp = Math.floor(Math.random() * 29) + 1; const hasLeveledUp = await Levels.appendXp(message.author.id, message.guild.id, randomAmountOfXp); // 升级提示 if (hasLeveledUp) { const updatedUser = await Levels.fetch(message.author.id, message.guild.id); message.channel.send({ content: `${message.author}, 恭喜!你升级到了**${updatedUser.level}**级🎉` }); } // 等级对应的角色操作(优化原重复逻辑) if (user.level === 5) { message.member.roles.add("1022876270754791445"); } else if (user.level === 10) { message.member.roles.add("1022876505132499054"); message.member.roles.remove("1022876270754791445"); } });
关键修改说明
- 添加频道校验:新增
allowedChannelId变量存储目标频道ID,通过message.channel.id !== allowedChannelId判断,非指定频道直接终止后续逻辑,确保只有该频道的发言才会触发XP添加。 - 优化重复判断:原代码中重复的服务器、机器人消息过滤逻辑合并为一行,精简代码结构。
- 修复角色逻辑重复:原代码中两次
else if (user.level === 10)的逻辑合并,避免重复判断,同时确保升级到10级时自动移除5级的角色。
内容的提问来源于stack exchange,提问作者Yahmo
相关产品推荐
相关产品推荐

