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替换为您的号码
所以我试图让我的 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替换为您的号码