首页 > 解决方案 > 如何使用不和谐 python 库在不和谐的文本通道中删除整个消息

问题描述

我使用了堆栈溢出问题中的代码,但其中使用的函数似乎已更改。

代码 :

from discord.ext.commands import 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(ctx.message.channel, limit = number):
        mgs.append(x)
    await client.delete_messages(mgs)

错误:

客户端中的 x 异步(ctx.message.channel,limit = number):TypeError:'Bot' 对象不可调用

discord.ext.commands.errors.CommandInvokeError:命令引发异常:TypeError:'Bot'对象不可调用

标签: pythondiscordbots

解决方案


在新版本的 discord.py 中执行此操作的一个非常简单的方法可能如下所示:

@client.event
async def on_message(message):
    if '-clear all' in message.content and message.author.permissions_in(message.channel).manage_messages:
        deleted = await message.channel.purge(limit=10000, check=is_not_pinned)
    await message.channel.send('All messages deleted.'.format(deleted))
    await client.process_commands(message)

您也可以为此使用常规命令,这样您就不需要await client.process_commands(message)了,但您所追求的功能仍然是await message.channel.purge(limit=amount, check=is_not_pinned)这样,只有具有管理消息权限的人才能使用此命令,并且不会删除固定的消息。

您可以将数量设置为一个令人难以置信的高数字,因此它只会删除接近(如果不是全部)。我只试了大约 300 次,效果很好(不过可能需要一些时间)。


推荐阅读