You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让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

火山引擎 最新活动