本文介绍了Python Discord.py删除文本通道中的所有消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我试图让我的不和谐机器人删除文本通道中的所有消息,因为我喜欢它干净的时候,但我想不出怎么做这就是我尝试过的
@CLIENT.command()
async def Clear(message):
return await CLIENT.delete_message(message)
好像想不出来了,有没有人能帮帮忙谢谢<;3我试过其他方法,也看过其他帖子,但我只发现机器人会在我每次键入(不是我要找的)时删除消息。推荐答案
如果您想批量删除消息(即一次删除多条消息),请使用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 Discord.py删除文本通道中的所有消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!