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
相关产品推荐
相关产品推荐

