AttributeError:'ClientUser'对象在Discord.py上没有属性'guild_permissions'

2024-10-04 07:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用“!invite”命令生成到服务器的invite链接,并将其发送到用户的DM。 该命令有效,但控制台上出现以下错误:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\001\Envs\Pix\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\001\PycharmProjects\Testing bot\cogs\invite.py", line 27, in on_message
    if ctx.author.guild_permissions.administrator:
AttributeError: 'ClientUser' object has no attribute 'guild_permissions'

然而,我得到了链接:My DM screenshot.

如何修复此错误

代码:

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, ctx):

        if inviteChannel:
            if ctx.author.guild_permissions.administrator:
                return
            else:
                if not ctx.content.startswith('!invite'):
                    await ctx.delete()


def setup(client):
    client.add_cog(Invite(client))

Tags: inselfclientpermissionsmessageifondef
2条回答

发生此错误的原因是,当bot发送消息时也会调用on_message事件,并且在您的情况下,bot是在dm中发送消息的,因此它应该是用户对象(成员对象仅限于帮会),并且用户对象没有权限,因为它们不在服务器内。它是一个ClientUser对象,而不是User,后者是一个特殊的类,类似于User,是bot所特有的。与User相比,这是一个单独的类,因为它有一些只有bot才能使用的特殊方法,比如编辑bot名称等 若要修复此问题,请忽略消息是否从bot发送,这样代码将

@commands.Cog.listener()
async def on_message(self, ctx):
    if message.author.bot:
        return
    if inviteChannel:
        if ctx.author.guild_permissions.administrator:
            return
        if not ctx.content.startswith('!invite'):
            await ctx.delete()

在这里,我添加了if message.author.bot: return,以便在作者是机器人时停止函数执行。我还删除了不必要的else语句

正如错误所说: 线路

 if ctx.author.guild_permissions.administrator:

抛出AttributeError错误,因为“ctx.author”(ClientUser类型)没有guild_permissions属性

错误信息还意味着错误被忽略,因此代码将继续执行而不停止

我找到了this 回答可能帮助您克服此问题的问题

祝你好运

相关问题 更多 >