gpt4 book ai didi

python - 删除文本 channel 中的所有消息

转载 作者:太空狗 更新时间:2023-10-30 02:08:25 24 4
gpt4 key购买 nike

我试图让我的 Discord 机器人删除文本 channel 中的所有消息,但我不知道该怎么做。这是我尝试过的:

@CLIENT.command()
async def Clear(message):
return await CLIENT.delete_message(message)

我尝试了其他方法并查看了其他帖子,但我只发现机器人会删除我每次输入的消息(不是我要找的)。

最佳答案

如果您想批量删除消息(即一次删除多条消息,请使用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 - 删除文本 channel 中的所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43465082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com