You need to enable JavaScript to run this app. discord.js自定义机器人如何实现检测到指定词汇后为用户临时分配角色
优惠活动
大模型
产品
解决方案
定价
更多

discord.js自定义机器人如何实现检测到指定词汇后为用户临时分配角色

Discord.js 临时角色分配功能实现方案

前置准备

  • 先在你的Discord服务器中创建好需要临时分配的角色(比如禁言角色、警告标记角色等),复制该角色的ID
  • 确保机器人账号拥有管理角色权限,且机器人自身的角色排序在你要分配的目标角色之上,否则无法正常赋值/移除角色

完整实现代码

// 如果你使用discord.js v14及以上版本,事件名请用 messageCreate 替代 message
bot.on('messageCreate', async message => {
  // 忽略机器人自身发送的消息,避免循环触发
  if (message.author.bot) return;

  const swearWords = ["xyz"];
  // 替换为你要分配的目标角色ID
  const TEMP_ROLE_ID = "替换为你的角色ID";
  // 临时角色持续时长,单位为毫秒,以下示例为10分钟(10 * 60 * 1000)
  const TEMP_ROLE_DURATION = 10 * 60 * 1000;

  if( swearWords.some(word => message.content.toLowerCase().includes(word)) ) {
    message.reply("Oh no you said a bad word!!!");
    
    try {
      // 给发送消息的用户添加临时角色
      await message.member.roles.add(TEMP_ROLE_ID);
      
      // 到达设定时长后自动移除角色
      setTimeout(async () => {
        // 移除前先判断用户是否还在服务器、还有该角色,避免报错
        if (message.member?.roles.cache.has(TEMP_ROLE_ID)) {
          await message.member.roles.remove(TEMP_ROLE_ID);
        }
      }, TEMP_ROLE_DURATION);
    } catch (err) {
      console.error("角色操作失败:", err);
      message.reply("权限不足,无法分配临时角色,请检查机器人权限配置");
    }
  }
})

注意事项

  • 如果你仍在使用discord.js v12/v13版本,将事件名改回message即可正常运行
  • 角色ID需要开启Discord开发者模式后右键角色复制,不要直接填角色名称
  • 可以根据需求调整TEMP_ROLE_DURATION的数值来修改临时角色的生效时长
  • 如果要实现重启后仍能正常移除未到期的临时角色,需要额外将角色分配记录写入本地文件/数据库,机器人启动时读取剩余时长重新创建定时任务,以上代码为单实例运行的简易版本,重启后未执行的移除任务会丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:15:04