You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:05:05