Discord.js音乐机器人使用reconlx分页时出现Unknown Interaction错误
问题根源
你遇到的Unknown interaction报错核心是分页按钮触发的交互事件没有被bot在Discord要求的3秒窗口期内正确响应,常见诱因有三个:
reconlx包版本和你使用的discord.js版本不兼容,旧版分页逻辑没有正确处理交互响应逻辑- 固定生成5个embed,当队列歌曲不足100首时,后续embed的description为空,触发Discord embed格式校验失败,导致交互无法正常响应
- 缺少必要的配置参数,分页组件未正确监听交互事件
修复方案
下面是优化后的代码,既解决了交互报错问题,也简化了重复编写embed的逻辑:
const queue = distube.getQueue(message) const nothingPlaying = new MessageEmbed() .setDescription('Nothing playing right now!') if (!queue) return message.channel.send({ embeds: [nothingPlaying] }) // 动态生成所有分页embed const embeds = [] const songsPerPage = 20 const totalPages = Math.ceil(queue.songs.length / songsPerPage) for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) { const startOffset = pageIndex * songsPerPage const endOffset = startOffset + songsPerPage const currentPageSongs = queue.songs.slice(startOffset, endOffset) .map((song, indexInPage) => { const listNumber = startOffset + indexInPage return `**${listNumber ? listNumber : 'Playing'}**. ${song.name} - \`${song.formattedDuration}\`` }) .join('\n') const pageEmbed = new MessageEmbed() .setTitle('Current Queue:') .setDescription(currentPageSongs) .setFooter({ text: `Page ${pageIndex + 1}/${totalPages}` }) embeds.push(pageEmbed) } // 调用分页组件,补充参数避免交互超时 pagination({ embeds: embeds, channel: message.channel, author: message.author, fastSkip: true, time: 60000, // 按钮有效期1分钟,可根据需求调整 button: [ { name: 'first', emoji: '⏮️', style: 'SECONDARY' }, { name: 'previous', emoji: '◀️', style: 'SECONDARY' }, { name: 'next', emoji: '▶️', style: 'SECONDARY' }, { name: 'last', emoji: '⏭️', style: 'SECONDARY' } ] })
额外校验项
修改完代码后如果仍有报错,逐一检查以下配置:
- 执行
npm i reconlx@latest更新reconlx到最新版本,确保和你的discord.js v13+版本兼容 - 前往Discord开发者后台的Bot设置页,确认已开启
Message Content Intent权限 - 确认Bot在当前频道拥有
发送消息、嵌入链接、使用外部表情符号三个基础权限
内容的提问来源于stack exchange,提问作者Jamie Dias
相关产品推荐
相关产品推荐

