Discord.js v13 点击embed消息表情反应无法创建工单问题求助
Discord.js v13 工单反应事件无响应排查修复
- 检查网关意图配置
discord.js v13强制要求显式声明网关意图,否则无法触发messageReactionAdd事件。初始化Client时必须添加以下三个意图:
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS ], partials: ['MESSAGE', 'REACTION', 'USER'] // 显式声明partial类型,匹配你代码中的partial处理逻辑更稳妥 });
- 修正移除反应的语法
v13中reaction.users.remove需要传入用户ID而非用户对象,将代码中reaction.users.remove(user)修改为:
reaction.users.remove(user.id);
- 修复频道创建的类型参数错误
v13不再支持用字符串text指定频道类型,需要导入ChannelType枚举传入对应值:
- 顶部导入依赖:
const { ChannelType, MessageEmbed } = require('discord.js');
- 修改频道创建代码的type字段:
reaction.message.guild.channels.create(`ticket-${user.username}`, { permissionOverwrites: [ { id: user.id, allow: ["SEND_MESSAGES", "VIEW_CHANNEL"] }, { id: reaction.message.guild.roles.everyone, deny: ["VIEW_CHANNEL"] } ], type: ChannelType.GuildText })
- 权限与存储校验
- 确认机器人在服务器内拥有「管理频道」「管理消息」「发送消息」权限,否则无法完成创建频道、移除用户反应的操作
- 调试
settings.get(${reaction.message.guild.id}-ticket)的返回值,确认存储的工单消息ID与你添加了🎫反应的消息ID完全匹配,避免逻辑提前返回
- 测试场景注意
仅机器人上线后新添加的反应会被监听,测试时请在机器人启动后重新对目标消息添加🎫反应验证逻辑。
内容的提问来源于stack exchange,提问作者DiamondLion
相关产品推荐
相关产品推荐

