【问题标题】:How to make a bot find a channel owner / compare to the author's ID如何让机器人找到频道所有者/与作者的 ID 进行比较
【发布时间】:2019-09-29 12:47:50
【问题描述】:

我正在制作一个机器人,如果您执行d!move,机器人将通过 ID 将消息发送到的频道移动到一个类别下。我还想让执行该命令的人拥有我已经添加的权限,例如MANAGE_CHANNELS。问题是,当我想确认创建该频道的人是激活命令的人时,机器人说是。我在一个 alt 帐户上执行此操作,在那里我创建了频道,我的 alt 是初始化它的那个,机器人说“成功!”我也想这样做,所以如果其他人创建了频道,当我这样做时,它会起作用,因为我让机器人知道我的 ID。

我研究了谷歌,一无所获。

我尝试过使用带有 fetchAuditlog 的函数,但得到了任何结果。

    if(!message.channel.client.user.id == message.author || !message.author.id == `329023088517971969`) return message.channel.send("You don't own this channel!")
    else message.channel.send("success!"); 
    message.channel.setParent(`576976244575305759`);

我希望机器人能够检查作者是否创建了频道,如果他们不拥有该频道,则可以转到 You don't own this channel。但如果他们这样做了,那么机器人就会移动频道。

实际结果是机器人无论如何都会移动频道,无论他们是否拥有频道。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    正如@André 所指出的,channel.client 代表客户端本身,而不是创建频道的用户。此外,代码中的最后一行不是 else 语句的一部分,因此这就是它运行的原因,而不管您定义的条件如何。

    要找到解决方案,您可以利用公会的审核日志。您可以搜索用户是消息作者并且创建了频道的条目。然后,您剩下的就是检查其中一个条目是否适用于当前频道,如果是,则运行其余代码。

    示例:

    message.guild.fetchAuditLogs({
      user: message.author,
      type: 'CHANNEL_CREATE'
    }).then(logs => {
      if (!logs.entries.find(e => e.target && e.target.id === message.channel.id)) return message.channel.send('You don\'t own this channel.');
      else {
        // rest of code
      }
    }).catch(err => console.error(err));
    

    【讨论】:

    • 我在代码的e.target.id 部分有一个错误,上面写着TypeError: Cannot read property 'id' of undefined 我试图定义目标和“e”,但这不起作用。我是在 alt 帐户上执行此操作的,这时我收到了此错误。
    【解决方案2】:

    当您转到 <anything>.client.user 时,它将返回机器人客户端。
    如果您想查看谁创建了频道,您必须检查审核日志或将其保存在内部。

    我已经检查了文件。以下是 .client 对 渠道。它表示初始化频道的人,或 创建它的人。

    On documentation I see this:

    实例化频道的客户端

    instantiatedinitialized

    不同

    【讨论】:

    • 我已将代码更改为let chann = message.channel let creator = message.guild.fetchAuditLogs({type: 'CHANNEL_CREATE'}) if(!creator.executor.id == message.author.id || !message.author.id == '329023088517971969') return message.channel.send("You don't own this channel!"),但我还没有找到让机器人找到发送消息的频道的功能。
    • 您正在查找已创建的所有通道的所有审核日志。
    • 是的,但是我该如何让机器人搜索创建消息发送到的频道?然后它会取用户的ID,如果创建者的ID等于作者的ID,那么它会做一个函数。
    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 2010-11-11
    • 2012-02-01
    • 2021-12-09
    • 2021-02-13
    • 1970-01-01
    • 2019-06-28
    • 2021-08-25
    相关资源
    最近更新 更多