Discord Bot带选项的Purge Slash Command代码问题求助
修正Discord Bot带选项的Purge批量删消息命令
原代码存在多个选项和语法相关错误,以下是具体问题和修正后的完整代码:
原代码的错误点
- 导入错误:
from app_commands import options路径错误,正确的Option类来自discord.app_commands - 参数类型错误:批量删消息的数量应该是整数类型,原代码用了
str,还错误使用了Option(str)的写法 - 上下文错误:Slash命令的上下文参数是
interaction而非ctx,且前缀命令的权限装饰器@commands.has_permissions不适用于Slash命令,需要用app_commands.checks.has_permissions - 语法错误:多处错误使用大括号包裹变量(
{amount}),直接使用变量即可 - 类类型错误:
commands.bot应该是大写的commands.Bot - 嵌入时间问题:原代码的嵌入对象提前创建,所有提示都会显示同一个时间,应该在发送时动态生成
修正后的代码
import discord from datetime import datetime from discord.ext import commands from discord import app_commands from discord.app_commands import Option class Purge(commands.Cog): def __init__(self, bot: commands.Bot) -> None: self.bot = bot @app_commands.command(name="purge", description="批量删除频道内的消息") @app_commands.checks.has_permissions(manage_messages=True) @app_commands.describe(amount="要删除的消息数量(需大于0)") async def purge(self, interaction: discord.Interaction, amount: int): # 验证数量是否有效 if amount <= 0: error_embed = discord.Embed( title="错误", description="请提供一个大于0的有效数字", colour=0xf50000, timestamp=datetime.now() ) await interaction.response.send_message(embed=error_embed, ephemeral=True) return try: # 删除指定数量的消息(+1是包含触发命令的这条消息) deleted = await interaction.channel.purge(limit=amount + 1) success_embed = discord.Embed( title="成功", description=f"已成功删除 {len(deleted)} 条消息", colour=0x2b2d31, timestamp=datetime.now() ) # 发送成功提示并在5秒后自动删除 await interaction.response.send_message(embed=success_embed, delete_after=5) except discord.Forbidden: await interaction.response.send_message("我没有删除消息的权限!", ephemeral=True) except discord.HTTPException: await interaction.response.send_message("删除消息时发生了错误!", ephemeral=True) def setup(bot): bot.add_cog(Purge(bot))
额外说明
- 使用
ephemeral=True可让错误提示仅对命令发起者可见,避免频道刷屏 - 成功提示增加了实际删除的消息数量,更直观
- Slash命令名称建议小写,符合Discord规范
内容的提问来源于stack exchange,提问作者nipatsu yt
相关产品推荐
相关产品推荐

