如何使漫游器查找频道所有者/与作者的ID进行比较

时间:2019-05-12 08:27:30

标签: javascript discord.js

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

我已经研究过Google,却一无所获。

我尝试将函数与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。但是,如果他们这样做了,机器人就会移动频道。

实际结果是,无论它们是否拥有该频道,漫游器都始终在移动该频道。

2 个答案:

答案 0 :(得分:0)

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

  

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

On documentation I see this:

  

实例化渠道的客户

实例化已初始化

不同

答案 1 :(得分:0)

正如 @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));