python - 发送消息确认机器人已删除/清除消息
问题描述
我正在创建一个清除命令,并且我希望机器人在清除确认它已清除消息后。
我的代码:
@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!")
我还希望机器人在一段时间后删除自己的消息
解决方案
编写此命令的更好方法是:
@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
推荐阅读
- c++ - 我需要在这些 OpenGL 函数的末尾加上“3f”吗?
- php - 将查询结果从灯堆栈传输到另一个
- telegram - 通过内联键盘 Telegram VB.NET 更新当前消息
- c++ - 创建指针会占用大量资源吗?
- python - 通用关系没有反映在 django 的迁移中?
- java - 在 Spring 中覆盖库版本
- c - 关于 sizeof 溢出 size_t 的 C 标准
- excel - 运行时错误,用于电子邮件自动化的 VBA EXCEL
- php - PHP中的Excel数据显示自动显示一组行
- python - 使用Event在线程中循环时如何修复Window对象没有属性_stop_thread?