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

如何仅为在指定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:10:41