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

如何实现Discord机器人现有日志功能忽略指定服务器频道分类?

实现Discord机器人忽略特定频道分类的日志记录

当然有非常简便的实现方式!你已经在配置文件里预留了Bypass_Category字段,刚好可以直接利用这个配置完成需求,只需要在日志处理逻辑里添加一行判断即可。

具体步骤:

  1. 引入配置中的忽略分类ID
    修改日志代码的配置引入部分,把Bypass_Category也导入进来:

    const { Server_Updates, Bypass_Category } = require("../settings/configuration").LOGGING;
    
  2. 添加分类判断逻辑
    在日志函数开头,加入对消息所属频道分类的检查——如果该频道属于你要忽略的分类,直接终止日志流程:

    if (oldMessEDIT.author && oldMessEDIT.author.bot) return undefined
    // 新增:忽略指定分类下的频道消息编辑日志
    if (oldMessEDIT.channel.parentId === Bypass_Category) return undefined
    

修改后的完整日志代码:

const { Server_Updates, Bypass_Category } = require("../settings/configuration").LOGGING;
const { MessageEmbed } = require(`discord.js`)
module.exports = {
 execute: async(Client, oldMessEDIT, newMessEDIT) => {
 const logChannel = Client.channels.cache.get(Server_Updates)
 if (oldMessEDIT.author && oldMessEDIT.author.bot) return undefined
 // 忽略指定分类下的频道消息编辑日志
 if (oldMessEDIT.channel.parentId === Bypass_Category) return undefined
 if (oldMessEDIT.content.length > 1020) return
 if (newMessEDIT.content.length > 1020) return
 // if (!oldMessEDIT.guild) return
 let logEmbed = new MessageEmbed()
 .setAuthor("A message was edited!")
 .setColor(Client.color)
 .setTimestamp()
 .setFooter(`${newMessEDIT.guild.name} | `, newMessEDIT.guild.iconURL({ dynamic: true, format: 'png' }))
 .addField("Message Before Edit:", oldMessEDIT.content)
 .addField("Message After Edit:", newMessEDIT.content)
 .addField("User:", `${newMessEDIT.author}`)
 .addField("Channel Message Was Edited In:", oldMessEDIT.channel.toString())
 if (logChannel) logChannel.send(logEmbed)
 },
 name: "messageUpdate",
};

原理说明:

  • oldMessEDIT.channel.parentId会返回当前消息所在频道的分类ID,如果频道没有所属分类,这个值会是null,不会影响正常频道的日志记录。
  • 当匹配到你配置的Bypass_Category时,函数直接return,后续的日志嵌入和发送逻辑都不会执行,完美实现忽略指定分类的需求。

内容的提问来源于stack exchange,提问作者Delta_Bravo92

火山引擎 最新活动