【问题标题】:How to how to convert username to discord ID?如何将用户名转换为不和谐 ID?
【发布时间】:2019-08-06 03:37:46
【问题描述】:

我有一个关于不和谐的简单问题。我正在尝试创建一个经济系统,它运行良好,但我想对其进行一些定制。我正在使用这个人的模块:https://github.com/Rapptz/discord.py

如何将用户名转换为不和谐的 ID。例如,如果我有一个不和谐的“命令”允许人们互相赠送金钱,例如:james#0243 类型 !give 100 bob#9413

我如何将 bob#9413 转换为不和谐的 ID,例如 58492482649273613,因为在我的数据库中,我将人们的用户存储为他们的 ID,而不是他们的实际用户名,因为人们可以更改他们的用户名。

【问题讨论】:

    标签: python discord discord.py discord.py-rewrite


    【解决方案1】:

    使用converter 获取目标的Member 对象,其中将包括他们的id

    from discord import Member
    from dicord.ext.commands import Bot
    
    bot = Bot(command_prefix='!')
    
    @bot.command()
    async def getids(ctx, member: Member):
        await ctx.send(f"Your id is {ctx.author.id}")
        await ctx.send(f"{member.mention}'s id is {member.id}")
    
    bot.run("token")
    

    转换器非常灵活,因此您可以提供姓名、昵称、ID 或提及。

    【讨论】:

    • 对不起。我对python有点陌生,所以在这一行async def getids(ctx, member: Member):我会用用户名替换Member?例如:async def getids(ctx, member: bob#9413):。我认为即使用户名不在服务器中,这也会起作用?
    • 没有。当您在不和谐!getids bob#9413 中调用命令时,参数将在传递给此协程之前传递给转换器。到这段代码运行时,member 是一个 Member 对象。
    • 抱歉,我从来没有使用过@bot.command,只有@client.event。然后使用on_message 函数。您是否可以使用client.eventon_message 向我展示。保留你第一次制作的那个,但只是在client.event 上的另一个版本。对不起,我很痛苦。
    【解决方案2】:

    on_message 回调函数被传递给message

    message 是一个 discord.Message 实例。
    它有authormentions 属性可以是 discord.Memberdiscord.User 的实例,具体取决于消息是否在私人频道中发送。

    discord.Member 类是discord.User 的子类,用户id 可以在那里访问。

    【讨论】:

    • 这意味着这个人必须输入!give 100 @bob#9413?
    • 没错。这是你不想要的约束吗?并且宁愿使用不带@ 前缀的用户名?
    • 嗯,我想知道是否有办法在没有@符号的情况下做到这一点。所以用户会输入!give 100 bob#9413
    • 查看 Tristo 的答案。
    【解决方案3】:

    你可以使用get_member_named 来做类似的事情

    @client.command(pass_context = True)
    async def name_to_id(ctx, *, name):
      server = ctx.message.server
      user_id = server.get_member_named(name).id
    

    名称可以有一个可选的鉴别器参数,例如“Jake#0001”或“Jake”都将进行查找。然而,前者会给出更精确的结果。

    【讨论】:

    • 如果我错了,请纠正我,但这仅与服务器中的用户名匹配?我正在寻找任何名字。在服务器中或不在服务器中
    • 只有在给定适当的permissions时,您才能从您的机器人所在的服务器获取信息(用户、角色等)
    【解决方案4】:
    prefix_choice = "!"
    bot = commands.Bot(max_messages=10000, command_prefix=commands.when_mentioned_or(prefix_choice))
    
    @bot.command()
    async def membersLog(ctx):
        for i, member in enumerate(ctx.message.server.members):
            list_mem_num = (f'{i}')
            list_mem_id = (f'{member.id}')
            list_mem = (f'{member}')
            list_mem_name = (f'{member.name}')
            list_all = (f'Number: {list_mem_num} ID: {list_mem_id} Name: {list_mem} ({list_mem_name})\n')
            print(list_all)
    

    您可以使用它来收集呼叫来自的服务器的所有成员信息。这是我使用的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2019-05-09
      • 2019-08-20
      • 2020-10-14
      • 2020-10-09
      相关资源
      最近更新 更多