【问题标题】:AttributeError: 'ClientUser' object has no attribute 'guild_permissions' on Discord.pyAttributeError:“ClientUser”对象在 Discord.py 上没有属性“guild_permissions”
【发布时间】:2021-11-04 21:45:57
【问题描述】:

我正在尝试创建一个“!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))

【问题讨论】:

  • 它实际上是真的,ClientUser 没有属性guild_permissions 我不知道,但它应该是一个discord.Member 类来获取guild_permissions 属性。当您获得预期的输出时,您可以将代码放在 try/except 块中
  • 请不要将on_message 事件用于命令。您已经有一个名为 invite 的命令
  • 这里的inviteChannel 是什么?
  • 我正在使用on_message,以便在适当的文本频道中,只有管理员可以发送“!邀请”以外的内容。 InviteChannel 是我要在其上运行“!invite”命令的频道 ID 的变量。

标签: python discord discord.py attributeerror


【解决方案1】:

发生此错误是因为当机器人发送消息时也会调用 on_message 事件,并且在您的情况下,机器人在 dm 中发送消息,因此它应该是一个用户对象(成员对象仅限公会),并且用户对象没有权限,因为它们不在服务器内。它是一个 ClientUser 对象,而不是 User ,后者是一个特殊的类,例如 User ,它是机器人独有的。与 User 相比,这是一个单独的类,因为它有一些特殊的方法,只有机器人可以使用,比如编辑机器人的名称等等 如果消息是从机器人发送的,要解决这个问题,只需忽略,这样代码就会是

@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 语句

【讨论】:

  • 抱歉让您久等了!感谢您的回答,我会试一试。 (:
【解决方案2】:

正如错误所说: 线

 if ctx.author.guild_permissions.administrator:

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

错误消息还意味着错误被忽略,因此代码继续进行而不停止。

我找到了this 可能会帮助您解决此问题的答案

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2021-04-13
    • 2021-05-22
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多