AttributeError: 'ClientUser' object has no attribute 'guild_permissions' on Discord.py
AttributeError: 'ClientUser' object has no attribute 'guild_permissions' on Discord.py
我正在尝试创建一个“!invite”命令来生成对服务器的邀请 link 并将其发送到用户的直接消息。
该命令有效,但我在控制台上收到以下错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users[=10=]1\Envs\Pix\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users[=10=]1\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'
尽管如此,我得到了link: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))
如错误所述:
行
if ctx.author.guild_permissions.administrator:
抛出 AttributeError 错误,因为 'ctx.author'(ClientUser 类型)没有 guild_permissions 属性。
错误消息还意味着错误被忽略,因此代码不会停止。
我找到了
可能会帮助您解决此问题的答案
祝你好运!
发生此错误是因为当机器人发送消息时也会调用 on_message 事件,在您的情况下,机器人正在 dm 中发送消息,因此它应该是用户对象(成员对象只是公会),而用户对象没有权限,因为它们不在服务器内。它是一个 ClientUser 对象,而不是 User,它是一个特殊的 class 类似 User 的机器人独有的对象。与 User 相比,这是一个单独的 class,因为它有一些只有机器人才能使用的特殊方法,例如编辑机器人名称等
要解决此问题,请忽略消息是否从机器人发送,因此代码为
@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 语句
我正在尝试创建一个“!invite”命令来生成对服务器的邀请 link 并将其发送到用户的直接消息。 该命令有效,但我在控制台上收到以下错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users[=10=]1\Envs\Pix\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users[=10=]1\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'
尽管如此,我得到了link: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))
如错误所述: 行
if ctx.author.guild_permissions.administrator:
抛出 AttributeError 错误,因为 'ctx.author'(ClientUser 类型)没有 guild_permissions 属性。
错误消息还意味着错误被忽略,因此代码不会停止。
我找到了
祝你好运!
发生此错误是因为当机器人发送消息时也会调用 on_message 事件,在您的情况下,机器人正在 dm 中发送消息,因此它应该是用户对象(成员对象只是公会),而用户对象没有权限,因为它们不在服务器内。它是一个 ClientUser 对象,而不是 User,它是一个特殊的 class 类似 User 的机器人独有的对象。与 User 相比,这是一个单独的 class,因为它有一些只有机器人才能使用的特殊方法,例如编辑机器人名称等 要解决此问题,请忽略消息是否从机器人发送,因此代码为
@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 语句