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

