【问题标题】:Changing a user's nickname -- Discord.py更改用户的昵称——Discord.py
【发布时间】:2021-05-24 14:04:13
【问题描述】:

当用户的角色被更新时,我希望机器人在他们的名字中的 Admin 之后附加他们的用户名,例如。 Admin | username 但它不起作用。这是我的代码:

@client.event
async def on_member_update(before, after):
    role = discord.utils.get(before.guild.roles, name="Admin")
    if after in role.members:
          await after.edit(nick="Admin | " + discord.user, reason=None)

【问题讨论】:

  • 它到底是怎么不工作的,是不做还是什么,还是引发错误?
  • 嗯,它将昵称更改为“Admin |”并引发错误 "Must be str, not module" ,所以它只是忽略 discord.user

标签: python discord discord.py


【解决方案1】:

discord.user 是一个类,我们想要一个字符串,它是用户的昵称、user_name。

@client.event
async def on_member_update(before, after):
    role = discord.utils.get(before.guild.roles, name="Admin")
    if after.nick is not None and after.nick.startswith("Admin |"):
        return
    if after in role.members:
          await after.edit(nick="Admin | " + after.display_name, reason=None) #discord.user is a class, we want the member's new display name.

【讨论】:

  • 它有效,但仅适用于 before.edit 和 before.display_name,即便如此,它也会给出昵称“Admin | Admin| DiscordName”。我知道问题是什么。
  • 我刚刚意识到它会给某人“管理员”前缀,直到昵称达到最大值。长度,所以有些东西没有做它的工作
  • 是的,它会进行递归循环,因为在我们更新昵称之后,会调用 on_member_update。会解决的
  • 修复了吗?
  • 仍然报错:“AttributeError: 'NoneType' object has no attribute 'startswith'”
猜你喜欢
  • 1970-01-01
  • 2020-04-07
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
相关资源
最近更新 更多