我正在制造一个机器人,如果您执行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
。但是,如果他们这样做了,机器人就会移动频道。
实际结果是,无论它们是否拥有该频道,漫游器都始终在移动该频道。
答案 0 :(得分:0)
当您进入<anything>.client.user
时,它将返回机器人客户端。
如果要查看谁创建了通道,则必须检查审核日志或在内部保存它。
我已经检查了文件。这是它对.client所说的 渠道。它表示初始化频道的人,或者 创建它的人。
实例化渠道的客户
实例化与已初始化
不同答案 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));