本文介绍了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删除文本通道中的所有消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 00:24