我正在尝试创建一个名为'!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而没有看到自己的消息。奇怪的是,如果我将author.id检查更改为我的客户端ID,那么它将删除我的消息以及机器人消息。所以由于某种原因,机器人认为它的客户端ID与我的相同,所以当它在不是我的测试服务器的服务器中时,它没有正确的权限来删除我的消息,所以它失败了,即使我只希望它删除自己的消息。
任何帮助都会很棒。
答案 0 :(得分:2)
你不是说
if x.author.id == "bot id here":
await client.delete_message(x)
毕竟,每次迭代都会将每条消息放入x
。使用message
引用async def on_message(message)
函数中的消息。使用该命令的人是哪个。又名你。