python Discord.py删除文本通道中的所有消息

时间:2017-04-18 06:28:21

标签: python python-3.x discord

所以我试图让我的不和谐机器人删除文本频道中的所有消息因为我喜欢它干净但我无法弄清楚如何做到这就是我试过的

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

似乎无法弄明白有人可以帮助谢谢< 3 我尝试了其他的东西,并查看其他帖子,但我只发现机器人将每次我键入时删除消息(不是我正在寻找的)

4 个答案:

答案 0 :(得分:7)

如果您想批量删除邮件(即一次删除多条邮件,请使用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条以上的消息,这意味着输入此{{1会引发错误。然而,这并非不可能。如果您真的想要,可以在那里添加!clear 120循环,但这可能会产生意外结果。

现在,如果您的消息更早超过14天怎么办?您无法使用while。相反,您可以使用Client.delete_messages(list_of_messages)这一次只删除一条消息。是的,我知道很慢但是现在,这就是我们所拥有的一切。因此,您可以修改原始代码,以便每次在Client.delete_message(Message)循环时删除它。

这样的事情:

logs_from()

答案 1 :(得分:2)

client = commands.Bot(command_prefix='-')

@client.command(name='clear', help='this command will clear msgs')
async def clear(ctx, amount = 5):
    await ctx.channel.purge(limit=amount)

如果没有提到要删除的消息数量,默认会删除4条消息,即(amount-1)

使用命令 -clear-clear [number] 删除消息。 写'clear'后不要在上一行使用括号

答案 2 :(得分:1)

您可以使用client.logs_from(someChannel)获取频道中所有消息的列表。从那里开始,只需使用client.delete_message(msg)

使用readme of discord.py's repo中列出的示例作为基础,这里有一个适用于Python 3.5的方法。使用"!clear":

触发此操作
client = discord.Client()

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

答案 3 :(得分:0)

如果您仍在寻找删除频道中所有消息的方法。您可以使用 await ctx.channel.purge() 立即删除所有消息。

这是一个例子:

import discord
from discord.ext import commands

client = commands.Bot(command_prefix = ".")

@client.command()
async def clear(ctx):
  await ctx.channel.purge()