代码之家  ›  专栏  ›  技术社区  ›  Nathan Liwang

我无法让discord机器人检测到删除该频道的人

  •  1
  • Nathan Liwang  · 技术社区  · 1 年前

    所以我像机器人一样编码,检测频道是否被删除,如果删除了,我需要那个人,这样我就可以用机器人踢他们。这就是代码

    client.on('channelDelete', async (channel) => {
        // Get the channel ID
        const channelDeleteId = channel.id;
    
        // Fetch all channel deletions from the audit log
        const auditLogs = await channel.guild.fetchAuditLogs({ type: 'CHANNEL_DELETE' });
    
        // Find the log entry for this specific channel
        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 time ${channelDeleteEntry.createdAt}`);
        }
    });
    
    

    我试着问不和谐的人,但错误仍然出现,错误是 DiscordAPIError[50035]: Invalid Form Body action_type[NUMBER_TYPE_COERCE]: Value "CHANNEL_DELETE" is not int.

    请帮忙

    1 回复  |  直到 1 年前
        1
  •  1
  •   Logarr    1 年前

    这个 fetchAuditLogs() 函数需要的数值 type: 属性,而不是您在此处使用的字符串值。您可能发现了一个过时的教程或该函数的示例,它来自以前的版本。在某个时刻,API被更新为对枚举使用数值。可以找到完整的可能性列表及其数值 here ,但这一行代码对您来说应该是什么样子:

    const auditLogs = await channel.guild.fetchAuditLogs({ type: 12 });
    

    遗憾的是,我对JavaScript的处理还不够,不知道是否有一种方法可以像在C#中那样从枚举列表中访问这些值。也许有人可以提供一个编辑/评论来包括这一点。你必须参考外部文档才能知道它们的含义,这并不理想。