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

Discord.py报错ClientUser无guild_permissions属性如何解决

报错原因
  • 参数命名错误:on_message事件的默认传入参数是Message对象,你代码中错误将其命名为ctx,和命令上下文对象混淆
  • 未过滤机器人自身消息:当消息发送者为机器人本身(ClientUser类型)时,该类没有guild_permissions属性,触发属性不存在报错
  • 未过滤私信场景:用户给机器人发的私信消息同样不存在guild_permissions属性,也会触发同类报错
修复方案

修改on_message监听函数的代码,先做前置过滤逻辑,完整修复后的代码如下:

from discord.ext import commands
from var.canais import inviteChannel


class Invite(commands.Cog):

    def __init__(self, client):
        self.client = client

    @commands.command(
        name='invite',
        pass_context=True
    )
    async def invite(self, ctx):
        invitelink = await ctx.channel.create_invite(
            max_uses=1,
            unique=True
        )
        if inviteChannel:
            await ctx.message.delete()
            await ctx.author.send(f'Invite link: {invitelink}')

    @commands.Cog.listener()
    async def on_message(self, message):
        # 前置过滤:机器人自己发的消息直接跳过
        if message.author == self.client.user:
            return
        # 前置过滤:非服务器内的私信消息直接跳过
        if not message.guild:
            return
        if inviteChannel:
            if message.author.guild_permissions.administrator:
                return
            else:
                if not message.content.startswith('!invite'):
                    await message.delete()


def setup(client):
    client.add_cog(Invite(client))
额外说明

修改后代码的逻辑和你原需求完全一致:仅在inviteChannel配置生效时,普通用户在该频道只能发送!invite指令,其他消息都会被删除,管理员不受限制。同时避免了机器人自身消息、私信消息触发的属性报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:12:04