discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同

Posted

技术标签:

【中文标题】discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同【英文标题】:discord.py bot finds channel messages to delete, but is showing its client id is the same as mine 【发布时间】:2018-07-17 00:46:19 【问题描述】:

我正在尝试创建一个名为“!clear”的命令,该命令仅删除特定频道中的机器人消息。这看起来很简单:

Client = discord.Client()
client = commands.Bot(command_prefix = "!")

@client.event
async def on_message(message):    
    if message.content.lower().startswith("!clear"):
        async for x in client.logs_from(message.channel, limit = 100):
            if str(message.author.id) == 'insert bots client id':
                await client.delete_message(x)
client.run(token)

但是,我发现它没有删除任何消息。因此,在检查 message.author.id 之前,我添加了一个简单的 print(message.author.id) 以查看它接收到的 id。它似乎只吐出我的客户 ID 而没有看到它自己的消息。奇怪的是,如果我将 author.id 检查更改为我的客户端 ID,那么它将删除我的消息以及机器人消息。因此,出于某种原因,机器人认为它的客户端 ID 与我的相同,所以当它位于不是我的测试服务器的服务器中时,它没有正确的权限来删除我的消息,所以它失败了,即使我只希望它删除自己的消息。

任何帮助都会很棒。

【问题讨论】:

在您的测试设置中,机器人可能会以您的身份发布。但是,机器人是否能够使用您的客户端 ID 在非测试设置中发布消息,并且无法删除这些相同的消息? 如果我在 discord 中右键单击机器人并“复制 id”,它与我的非常不同,即使在我的测试频道中也是如此。但是,如果我告诉它只删除带有我的客户 ID 的消息,它仍然会删除它自己的消息。关于另一台服务器,它似乎使用自己的 id 发布,但在尝试删除我的服务器时由于权限而失败,这总是首先由于“!clear”消息。 我的猜测是您的测试通道配置不正确,或者您的机器人没有正确使用测试通道。我的问题是,“它不应该在非测试中工作,使用机器人自己的 id 吗?”如果它使用自己的 ID,它不应该因为删除自己的帖子而被拒绝。 【参考方案1】:

你不是说

if x.author.id == "bot id here":
    await client.delete_message(x)

毕竟,每次迭代都会将每条消息放入x。使用message 指的是async def on_message(message) 函数中的消息。这将是使用该命令的人。也就是你。

【讨论】:

哇,不敢相信我没听懂。谢谢!这解决了它。

以上是关于discord.py bot 找到要删除的频道消息,但显示其客户端 ID 与我的相同的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py bot 在添加反应时将消息重新发送到另一个频道中断

退出频道时如何删除频道房间 discord.py

Discord.py - 如何接收和发送消息到特定频道?

discord.py Bot 并不总是删除消息

Discord.py Bot 将文件发送到 Discord 频道

bot删除消息Discord.py python 3.9.2时的日志记录问题