首页 > 解决方案 > 发送消息确认机器人已删除/清除消息

问题描述

我正在创建一个清除命令,并且我希望机器人在清除确认它已清除消息后。

我的代码:

@client.command(aliases=["del","delete","cl","clearmessages","deletemessages","deletemessage","clearmessage","cm"])
async def clear(ctx, amount=5):
  if ctx.message.author.guild_permissions.manage_messages:
      await ctx.channel.purge(limit=amount+1)
    msg = await ctx.send(f"{amount} messages have been deleted!")
    import asyncio
    asyncio.sleep(15)
    await msg.delete()
  else:
    await ctx.send("Your don't have manage messages perms!")

我还希望机器人在一段时间后删除自己的消息

标签: pythondiscorddiscord.pybots

解决方案


编写此命令的更好方法是:

@client.command(aliases=['put alternative names here'])
@commands.has_permissions(manage_messages=True)
async def clear(ctx, amount=5):
    try:
        await ctx.channel.purge(limit=amount+1)
        await ctx.send(f"{amount} messages have been deleted!", delete_after=5)
    except:
        await ctx.send("Your don't have manage messages perms!")

注意 - 您将需要以下导入语句:

from discord.ext import commands

编辑:您可以摆脱尝试,除了循环并改用错误处理程序

@client.event
async def on_command_error(ctx, error):
    error = getattr(error, 'original', error)
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("You don't have the required perms to carry out this command")

如果您希望它是特定于命令的,以便您可以添加唯一的错误消息:

@client.event
async def on_command_error(ctx, error):
    error = getattr(error, 'original', error)
    if isinstance(error, commands.MissingPermissions):
        if ctx.command.name == "clear":
            await ctx.send("You don't have manage messages perm")

编辑#2:添加限制

async def clear(ctx, amount: int):
    if amount <= 500:
        await ctx.channel.purge(limit=amount + 1)
        await ctx.send(f"{amount} messages have been deleted!", delete_after=5)
    else:
        #error message

推荐阅读