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 在添加反应时将消息重新发送到另一个频道中断