python Discord.py 删除一个文本频道中的所有消息

python Discord.py delete all messages in a text channel

所以我试图让我的 discord 机器人删除文本频道中的所有消息,因为我喜欢它干净的时候,但我不知道该怎么做,这就是我尝试过的

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

似乎无法弄清楚有人可以帮忙谢谢<3 我尝试了其他方法并查看了其他帖子,但我只发现每次我输入时机器人都会删除消息(不是我要找的)

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

使用 readme of discord.py's 存储库中列出的示例作为基础,这里有一个适用于 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)

如果您想批量删除消息(即一次删除多条消息,请使用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)
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'

后不要在上一行中使用括号

如果您仍在寻找删除频道中所有消息的方法。您可以使用 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()

此代码将删除 bot 的命令并发送成功消息..

import asyncio

#clear
@bot.command()
async def clear(ctx, amount=0):
  if amount == 0:
    fail = await ctx.send ("Please enter an amount to delete!")
  await asyncio.sleep (6)
  await fail.delete()

  if amount < 3:
    await ctx.channel.purge(limit=amount)
    sucess = await ctx.send (f"{amount} messages has been deleted <a:Verified:878231325469974599>") #sending success msg
    await asyncio.sleep (6) #wait 6 seconds
    await sucess.delete() #deleting the sucess msg

  else :
    if amount == 0:
    fail = await ctx.send ("Please enter an amount to delete!")
    await asyncio.sleep (6)
    await fail.delete()


您可以使用命令-clear 12清除12条消息..将12替换为您的号码