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

Discord.py报错AttributeError: 'str' object has no attribute 'channel'如何解决

错误根因

你定义的Cog指令purge参数顺序不符合nextcord框架要求:类中声明的指令函数,第一个参数为类实例self,第二个固定为上下文对象ctx,不需要额外声明message参数。
你当前的参数顺序为async def purge(self,message,ctx,amount=2),运行时框架会把上下文对象赋值给第二个参数message,而第三个参数ctx实际接收到的是用户调用指令时传入的字符串参数,所以调用ctx.channel时才会抛出'str' object has no attribute 'channel'的报错。

修复代码

调整参数顺序,删除冗余的message参数即可,修复后代码如下:

@commands.command(aliases=['Purge', "Clear", "clear"])
@commands.has_permissions(manage_messages = True)
async def purge(self, ctx, amount=2):
    LOG_CHANNEL = self.client.get_channel(898771125482455041)
    await ctx.channel.purge(limit=amount)
    # 可选:purge操作默认会清除触发指令的消息,若实际运行中没有清除可以保留下面这行,否则可以删除
    # await ctx.message.delete()
    # 可选优化:新增delete_after参数让提示消息3秒后自动删除,避免占用频道消息位
    await ctx.send(f":white_check_mark: Cleared `{amount}` Messages!", delete_after=3)
    
    embed=nextcord.Embed(title="Messages Cleared", color=0xf2ec00)
    embed.add_field(name="Responsible Mod:", value=f"{ctx.author.name}", inline=False)
    embed.add_field(name="Channel:", value=f"{ctx.channel.mention}", inline=False)
    embed.add_field(name="Amount:", value=f"{amount}", inline=False)
    await LOG_CHANNEL.send(embed=embed)

内容的提问来源于stack exchange,提问作者Default Box

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:15:05