如何将用户名转换为不一致的ID?

时间:2019-03-15 05:32:53

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

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

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

如何将bob#9413转换为58492482649273613之类的不一致ID,因为在我的数据库中,由于人们可以更改其用户名,因此我将用户的用户存储为其ID,而不是其实际用户名。

4 个答案:

答案 0 :(得分:2)

使用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或提及。

答案 1 :(得分:0)

on_message回调函数传递给message

message是一个discord.Message实例。
它具有authormentions属性可以是discord.Memberdiscord.User的实例,具体取决于消息是通过专用通道发送的。

discord.Member类是discord.User的子类,并且可以在此处访问用户id

答案 2 :(得分:0)

您可以使用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”都将进行查找。但是,前者将给出更精确的结果。

答案 3 :(得分:0)

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)

您可以使用它来收集调用来自的服务器的所有memberinfo。这是我用于此的代码。