【问题标题】:Sending message confirming bot have deleted/cleared messages发送消息确认机器人已删除/清除消息
【发布时间】:2021-11-13 18:54:47
【问题描述】:

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

我的代码:

@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!")

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

【问题讨论】:

  • msg.delete() 有一个延迟参数。但这也应该有效,尽管我发现导入内部函数很奇怪。除非您有特定原因,否则在文件顶部使用导入。
  • 你能说清楚问题是什么吗?你得到什么错误,发生了什么,应该发生什么?此外,send() 函数中有一个关键字delete_after,您可以使用它在 n 秒后自动删除消息。 Reference
  • 我使用命令时它不起作用,尝试自己运行它

标签: python discord discord.py bots


【解决方案1】:

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

@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

【讨论】:

  • 它有效,但它不会告诉我你是否有管理消息权限。
  • 哦,我的错,您必须使用错误处理程序来处理该特定错误
  • 谢谢!现在它可以工作了,顺便说一句,你知道如何限制命令吗? (金额的限制)如果你不知道就再讨论
  • 是的,您可以检查编辑#2(我仅以 500 为例,您可以更改该值)
猜你喜欢
  • 2021-03-06
  • 2018-11-25
  • 2019-03-01
  • 2019-12-31
  • 2021-10-14
  • 2020-08-24
  • 2020-10-26
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多