【问题标题】:Discord.py: Changing Nickname if user has specific roleDiscord.py:如果用户具有特定角色,则更改昵称
【发布时间】:2021-02-22 16:15:47
【问题描述】:

我想让我的机器人更改某人的昵称,如果这个用户有一个特定的角色,那么几乎是一个角色前缀系统。所以我像这样尝试过,但它一直给我错误“缺少权限”。这是我的代码:

@client.event
@has_role("Admin")
async def on_member_update(nick, member):
    await member.edit(nick="Admin | ")

【问题讨论】:

  • 你能发布整个回溯吗?
  • 这是整个代码,其他都是其他事件、命令和导入
  • 我要求的是错误,而不是代码
  • discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
  • 该机器人根本没有编辑成员的权限,它在层次结构上太低或者它是服务器所有者的成员。另请注意,has_role 装饰器仅适用于命令,不适用于事件

标签: python discord discord.py


【解决方案1】:

机器人根本没有编辑成员的权限,它的层次结构太低,或者它是服务器的所有者。另请注意,has_role 装饰器仅适用于命令,不适用于事件

要使其正常工作,您应该使用 if 语句或创建自己的装饰器

  • if 语句
@client.event
async def on_member_update(before, after):
    role = discord.utils.get(before.guild.roles, name="Admin")
    if after in role.members:
        # Change the nick
  • 自定义装饰器
from functools import wraps

def has_admin_role(coro):
    @wraps(coro)
    async def wrapper(before, after):
        role = discord.utils.get(before.guild.roles, name="Admin")
        if after in role.members:
            await coro(before, after)
    return wrapper


@client.event
@has_admin_role # Without calling it, it's hardcoded
async def on_member_update(before, after):
    # Edit the nick

另请注意,has_admin_role 装饰器仅适用于 on_member_update 事件。

【讨论】:

  • 它说“discord.utils 没有属性 get_roles”
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 2020-04-07
  • 2021-08-11
  • 2021-06-28
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多