Discord.js v13按钮交互处理器实现:如何将命令交互逻辑适配按钮场景
按钮交互适配改造实现
完全可以直接改造,核心逻辑和原有命令处理逻辑一致,仅需要调整交互判断条件、匹配标识的取值逻辑即可,改造方案如下:
前提准备
你需要先将所有按钮的处理逻辑提前注册到client.buttons集合中,和原有client.commands的注册逻辑保持一致,每个按钮对应唯一的customId作为匹配标识。
改造后代码
if (interaction.isButton()) { // 用按钮的customId匹配对应的处理逻辑 const buttonHandler = client.buttons.get(interaction.customId); if (!buttonHandler) return interaction.reply({ content: "该按钮已失效", ephemeral: true }) && client.buttons.delete(interaction.customId); // 按钮参数处理:如果你的customId带参数(格式例:confirm_order_123456),可以按分隔符拆分出参数 const arguments = interaction.customId.split('_'); // 执行对应按钮的处理逻辑 buttonHandler.execute(client, interaction, arguments); }
核心改动说明
- 触发判断:将原有的
interaction.isCommand()替换为interaction.isButton(),仅匹配按钮类交互事件 - 匹配标识:原逻辑用命令名称
interaction.commandName匹配,改为用按钮自定义IDinteraction.customId匹配 - 参数获取:按钮没有命令自带的
options参数,业务参数可直接写在customId中用固定分隔符拆分,也可以根据业务场景从交互绑定的消息、服务端缓存中提取上下文参数
注意:按钮交互默认要求3秒内给出响应,若处理逻辑耗时较长建议先调用
interaction.deferReply()或interaction.deferUpdate()挂起交互避免超时报错。
内容的提问来源于stack exchange,提问作者FireNDark
相关产品推荐
相关产品推荐

