Discord.py 删除除 pin 消息之外的所有消息

Posted

技术标签:

【中文标题】Discord.py 删除除 pin 消息之外的所有消息【英文标题】:Discord.py delete all messages except pin messages 【发布时间】:2019-05-07 16:58:48 【问题描述】:

目前我的不和谐机器人有一个功能,当一个人输入 !delete 时,它​​会删除频道中的大部分文本。但是,它会删除所有消息,包括固定的消息。如何增强我的代码,使其不会删除 pin 消息?

if message.content.startswith('!delete'):
   tmp = await client.send_message(message.channel, 'Clearing messages...')
   async for msg in client.logs_from(message.channel):
     await client.delete_message(msg)

【问题讨论】:

【参考方案1】:

您可以使用message.pinned 来检查消息是否被固定。

if message.content.startswith('!delete'):
    tmp = await client.send_message(message.channel, 'Clearing messages...')
    async for msg in client.logs_from(message.channel):
        if not msg.pinned:
            await client.delete_message(msg)

【讨论】:

【参考方案2】:

或者你可以使用purge_from函数和check参数只删除非固定消息。

dicord.py:

if message.content.startswith('!delete'):
    await client.purge_from(channel, limit=None, check=lambda msg: not msg.pinned)

discord.py 重写:

if message.content.startswith('!delete'):
    await channe.purge(limit=None, check=lambda msg: not msg.pinned)

【讨论】:

太棒了,谢谢!

以上是关于Discord.py 删除除 pin 消息之外的所有消息的主要内容,如果未能解决你的问题,请参考以下文章

如何删除discord.py中的消息[重复]

任务不删除消息,discord.py

Discord.py 按钮交互消息删除

如何删除 discord.py 中的消息信息?

在 discord.py 中删除机器人的消息

discord.py Bot 并不总是删除消息