如何让Discord Bot删除「用户将消息固定至频道」系统消息
解决Discord Bot固定消息后自动删除系统提示的问题
嘿,作为Discord Bot开发新手,这个需求其实很好实现,我来一步步教你怎么做:
首先得明确两个关键前提:
- 你的Bot必须在目标频道拥有管理消息权限,不然没法删除系统提示消息
- 我们要精准识别Bot自己固定消息触发的系统提示,别误删其他人的
接下来是具体代码实现,根据你用的discord.js版本略有不同:
针对discord.js v14版本
把这段代码加到你的index.js里,和你的命令处理代码放在一起就行:
client.on('messageCreate', async (message) => { // 判断是否是固定消息的系统提示 if (message.system && message.type === 6) { // 6对应CHANNEL_PINNED_MESSAGE类型,也可以导入MessageType后用MessageType.ChannelPinnedMessage try { // 获取被固定的那条原始消息 const pinnedMsg = await message.channel.messages.fetch(message.reference?.messageId); // 确认这条消息是你的Bot发送的 if (pinnedMsg?.author.id === client.user.id) { // 删除系统提示消息 await message.delete(); } } catch (error) { console.error("删除系统提示时出错了:", error); } } });
针对discord.js v13及更早版本
如果你的框架版本是v13或v12,代码可以改成这样:
client.on('messageCreate', async (message) => { // 直接匹配固定消息的系统提示类型 if (message.system && message.type === 'CHANNEL_PINNED_MESSAGE') { try { const pinnedMsg = await message.channel.messages.fetch(message.reference.messageId); if (pinnedMsg.author.id === client.user.id) { await message.delete(); } } catch (err) { console.log("删除系统提示失败:", err); } } });
额外小提醒
- 改完代码后记得重启Bot(重新运行
node index.js),让新逻辑生效 - 如果还是删不了系统提示,去Discord服务器的角色设置里检查Bot是否开启了「管理消息」权限
- 代码里的
try/catch是为了避免权限不足或意外情况导致Bot崩溃,新手必备哦!
内容的提问来源于stack exchange,提问作者Nana Chan




