discord.js v13运行v12版discord-pagination提示Cannot send an empty message如何解决
discord.js v12 分页插件适配 v13 修改方案
你遇到的Cannot send an empty message报错是discord.js v13的消息接口重大变更导致的,需要同步修改多处API调用,具体调整如下:
核心变更点
- v13不再支持直接将Embed实例作为
channel.send()的入参,必须显式封装到embeds数组中,消息编辑逻辑同理 MessageEmbed.setFooter()方法参数调整:不再直接接收字符串,需传入{ text: 页脚内容 }格式的对象- 反应用户移除方法更名:
reaction.users.remove()改为reaction.users.delete() - 反应收集器参数结构调整:
createReactionCollector()第一个参数改为配置对象,过滤逻辑需放在配置的filter字段中 - 前置依赖:需确保你的bot已开启
GUILD_MESSAGE_REACTIONS、GUILD_MESSAGES网关意图,否则无法正常监听反应事件
修改后完整代码
const paginationEmbed = async (msg, pages, emojiList = ["⏪", "⏩"], timeout = 120000) => { if (!msg && !msg.channel) throw new Error("Channel is inaccessible."); if (!pages) throw new Error("Pages are not given."); if (emojiList.length !== 2) throw new Error("Need two emojis."); let page = 0; // 调整send参数结构,修改setFooter入参格式 const curPage = await msg.channel.send({ embeds: [pages[page].setFooter({ text: `Page ${page + 1} / ${pages.length}` })] }); for (const emoji of emojiList) await curPage.react(emoji); // 调整收集器参数结构,将filter放入配置对象 const reactionCollector = curPage.createReactionCollector({ filter: (reaction, user) => emojiList.includes(reaction.emoji.name) && !user.bot, time: timeout }); reactionCollector.on("collect", (reaction) => { // 替换remove为delete方法 reaction.users.delete(msg.author); switch (reaction.emoji.name) { case emojiList[0]: page = page > 0 ? --page : pages.length - 1; break; case emojiList[1]: page = page + 1 < pages.length ? ++page : 0; break; default: break; } // 调整edit参数结构 curPage.edit({ embeds: [pages[page].setFooter({ text: `Page ${page + 1} / ${pages.length}` })] }); }); reactionCollector.on("end", () => { if (!curPage.deleted) { curPage.reactions.removeAll(); } }); return curPage; }; module.exports = paginationEmbed;
内容的提问来源于stack exchange,提问作者D4RKEZ
相关产品推荐
相关产品推荐

