You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人无法检测删除频道用户的问题求助

解决Discord机器人频道删除检测的API错误问题

错误原因

你遇到的DiscordAPIError[50035]是因为传递给fetchAuditLogs的type参数用了字符串"CHANNEL_DELETE",但Discord API要求该参数必须是整数类型的操作码。不同版本的Discord.js对审核日志类型的处理逻辑不同:

  • Discord.js v14及以上版本需要用AuditLogEvent枚举来指定操作类型
  • v13及以下旧版本则直接传入对应的整数值即可

修复方案

方案1:Discord.js v14+(推荐)

先导入AuditLogEvent枚举,再用枚举值替代字符串参数:

const { Client, AuditLogEvent } = require('discord.js');
const client = new Client({ intents: [/* 需包含Guilds、GuildChannels等必要权限 */] });

client.on('channelDelete', async (channel) => {
    const channelDeleteId = channel.id;
    // 使用AuditLogEvent.ChannelDelete作为type参数
    const auditLogs = await channel.guild.fetchAuditLogs({ type: AuditLogEvent.ChannelDelete });
    const channelDeleteEntry = auditLogs.entries.find(entry => entry.target.id === channelDeleteId);

    if (channelDeleteEntry) {
        const deleter = channelDeleteEntry.executor;
        console.log(`User ${deleter.username} deleted channel ${channel.name} at ${channelDeleteEntry.createdAt}`);
        
        // 执行踢人操作(确保机器人拥有踢人权限)
        if (deleter && !deleter.bot) { // 跳过机器人账号,避免误踢
            try {
                await channel.guild.members.kick(deleter, '删除服务器频道');
                console.log(`已踢出用户 ${deleter.username}`);
            } catch (err) {
                console.error('踢人失败:', err);
            }
        }
    }
});

client.login('你的机器人Token');

方案2:Discord.js v13及以下版本

直接传入CHANNEL_DELETE对应的整数值12:

client.on('channelDelete', async (channel) => {
    const channelDeleteId = channel.id;
    // 用整数12替代字符串"CHANNEL_DELETE"
    const auditLogs = await channel.guild.fetchAuditLogs({ type: 12 });
    const channelDeleteEntry = auditLogs.entries.find(entry => entry.target.id === channelDeleteId);

    if (channelDeleteEntry) {
        const deleter = channelDeleteEntry.executor;
        console.log(`User ${deleter.username} deleted channel ${channel.name} at ${channelDeleteEntry.createdAt}`);
        
        // 踢人逻辑
        if (deleter && !deleter.bot) {
            try {
                await channel.guild.members.kick(deleter, '删除服务器频道');
                console.log(`已踢出用户 ${deleter.username}`);
            } catch (err) {
                console.error('踢人失败:', err);
            }
        }
    }
});

额外注意事项

  • 确保机器人拥有查看审核日志和踢人的服务器权限
  • 处理executor为null的情况(比如系统自动删除或日志过期)
  • 建议添加权限检查,避免尝试踢掉服务器管理员等高权限用户

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:11:05