如何在 discord.py 中将字符串更改为不和谐 id

Posted

技术标签:

【中文标题】如何在 discord.py 中将字符串更改为不和谐 id【英文标题】:How to change a string into a discord id in discord.py 【发布时间】:2021-08-12 14:21:33 【问题描述】:

我正在尝试让一段代码工作,但它总是卡住。

role = discord.utils.get(Player.guild.roles, name="role")
await member.add_role(role)

我使用的是bot,而不是client,我没有使用ctx,而是使用message,我使用的是on_message()。每当我运行代码时,它都会给我错误消息

Unresolved attribute reference 'guild' for class 'str' 

那么我如何将Player 设为用户ID 而不是字符串。 Player显示

@!8214498848170 etc

【问题讨论】:

你能告诉我们更多关于Player的信息吗? Player 是一个包含用户 ID @!8214498848170 etc 的字符串,现在我正在尝试使用 Player 查找用户并在我的不和谐服务器中赋予他们一个角色 这个字符串中是etc还是等等你的意思是id后面还有更多的东西? etc 是用户 ID,但我不想将我的完整 ID 公开 什么是会员?如果你给 Minimal, Reproducible Example 会容易得多,这样我就可以复制你的代码并得到你的错误。 【参考方案1】:

guild 对象只是真实member 的属性,而不是字符串的属性,因此您的错误。 但是,您可以解析字符串以检索用户 ID,然后获取或获取成员。 Discord-ID 的长度为 18 19 位数字。应避免对 id 的长度使用静态字符串索引。

userID = int(Player[2:])

获取成员

member = await message.guild.fetch_member(userID)

现在您可以为成员分配角色

userID = int(Player[2:].split(" ")[0])
member = await message.guild.fetch_member(userID)
role = discord.utils.get(member.guild.roles, name="role")
await member.add_roles(role)

【讨论】:

当我运行代码时它显示AttributeError: 'NoneType' object has no attribute 'guild' 我刚刚意识到8214498848170 不是用户ID。它到底位于您的Player 字符串中的什么位置?在不知道您的 Player 字符串包含什么的情况下,我无法正确说出如何从您的示例命令中提取用户 ID。我现在猜测 Player 看起来像这样 @!8214498848170 <your-user-id> <etc> 并更新我的答案 删除<>后的完整用户ID为@!821449884817031238 这就是Player中写的所有内容?只有@!user-id? 是的 Player 只包含 @!821449884817031238

以上是关于如何在 discord.py 中将字符串更改为不和谐 id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 discord.py 获取所有文本频道?

使用 discord.py 让用户对我不和

如何更改昵称(discord.py)

如何在嵌入 discord.py 中将长字段作为页面发送?

Discord.py 帮助命令(对编辑消息做出反应)

如何在 discord.py 中将值合并到一条消息中