从 discord.py 中的提及中获取用户 ID

Posted

技术标签:

【中文标题】从 discord.py 中的提及中获取用户 ID【英文标题】:Get user id from mention in discord.py 【发布时间】:2021-09-12 06:17:36 【问题描述】:

当我尝试使用以下代码运行命令$getUserId @user 时,它按预期工作,但在尝试传递参数时发送$getUserId 123 之类的内容时会出错。 我想要一个不会出错的机器人。

import discord

client = commands.Bot(command_prefix = "$")

@client.command()
async def getUserId(ctx, *user: discord.User):
if not arg:
    userId = ctx.author.id
else:
    userId = arg.id
await ctx.send(userId)

如果给出$getUserId 命令,我将如何处理:将提到的用户作为参数并处理所有异常?

有没有更简单的方法从提及中获取用户 ID?必须有一个简单的方法来做到这一点,对吧? 无论如何,非常感谢所有帮助。

【问题讨论】:

【参考方案1】:

如果是问题或代码中的错误,但您的缩进被弄乱了,并且 arg 不存在,请确认


def convert_mention_to_id(mention):
    return int(mention[1:][:len(mention)-2].replace("@","").replace("!",""))

@client.command(name="getUserId")
async def getUserId(ctx ,*arg):
    if not arg:
        await ctx.send(ctx.author.id)
    else:
        try:
            await ctx.send(i:convert_mention_to_id(arg[i]) for i in arg)
        except ValueError:
            await ctx.send("Invalid ID")

convert_mention_to_id 是一个实用函数,提及以<@!id> 格式传递,该函数只是从中获取 id。

ID 在 Discord API 中用作 int,因此在传递无效 id 时会在引发值错误的函数中进行转换

您可以使用client.get_user() 获取提到的用户,但它需要成员意图是真实的

【讨论】:

【参考方案2】:

您的代码有一些问题。

    使用 arg:您没有在您提供的代码中的任何地方定义 arg。而是将 arg 替换为 user。 如果不是用户:如果您将用户留空,则会引发错误,例如“用户是缺少的必需参数”。解决此问题的一种方法是将其默认为 None

您可以在下面的代码以及测试示例中查看上述观察结果。

@client.command()
async def getUserId(ctx, user: discord.User=None): # defaults user to None if nothing is passed
    if not user: # you are not using an arg variable, you're using user
        userId = ctx.author.id
    else:
        userId = user.id # same as previous
    await ctx.send(userId)

【讨论】:

以上是关于从 discord.py 中的提及中获取用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ID discord.py 中获取成员对象

Discord.py:获取带有 id 的用户对象

从用户 id 获取用户名 |不和谐.py

Discord.py:检查用户是不是具有列表中的角色 ID 不起作用

Discord.py 如何提及/显示使用该命令的人的用户名?

discord.py 你能从 discord 标签中获取用户对象吗?