如果你想批量删除的消息(也就是,一次删除多条消息,使用await Client.delete_messages(list_of_messages)
下面是一个例子
import asyncio
import discord
from discord.ext.commands import Bot
Client = Bot('!')
@Client.command(pass_context = True)
async def clear(ctx, number):
mgs = [] #Empty list to put all the messages in the log
number = int(number) #Converting the amount of messages to delete to an integer
async for x in Client.logs_from(ctx.message.channel, limit = number):
mgs.append(x)
await Client.delete_messages(mgs)
Client.run(Token)
注意:这样做只适用于14天前的邮件和下的,并且您无法一次删除100条以上的邮件,这意味着输入此!clear 120
会引发错误,但这并非不可能,您可以将while
循环添加到如果你真的在那里但可能会产生意想不到的结果。
现在,如果您有邮件旧比14天?你不能使用Client.delete_messages(list_of_messages)
。相反,您可以使用Client.delete_message(Message)
这样一次只能删除一条消息。是的,我知道速度缓慢,但现在,这就是我们所拥有的一切。因此,您可以修改原始代码,使其每次在logs_from()
中循环时都将其删除。
事情是这样的:
import asyncio
import discord
from discord.ext.commands import Bot
Client = Bot('!')
@Client.command(pass_context = True)
async def clear(ctx, number):
number = int(number) #Converting the amount of messages to delete to an integer
counter = 0
async for x in Client.logs_from(ctx.message.channel, limit = number):
if counter < number:
await Client.delete_message(x)
counter += 1
await asyncio.sleep(1.2) #1.2 second timer so the deleting process can be even
Client.run(Token)
只是为了我的理解...我使用Python和'@client.event's(用'async def some_event')开发了一个完整的Discord bot,我完全不知道你在导入Bot和传递'!'作为参数。 '@ Client.command'与'message.content.startswith'使用'async def on_message'相同吗?请赐教,因为它看起来只有通过查看你的简短例子,我可以删除100行代码,并让我的代码呼吸更好,同时得到确切的结果... – dnLL
@dnLL所有'@ Client.command()'基本上只是一个命令处理程序,所以它仍然只是一个'on_message'事件侦听器,只不过它解析出消息内容以确保它甚至是一个命令,解析出参数和所有爵士乐,因此您可以使用@ Client.command( )'。你仍然只能使用'on_message',但是你可能会使用'if'语句来分割每个命令,除非你编写自己的命令处理程序,否则它们可能会被填充,直到你。 – Wright
迄今为止使用if语句。 2之间是否存在任何性能差异,或者没有其他区别而不易于阅读? – dnLL