Hassan Dia
Hassan Dia

Reputation: 25

How to get the ID of any user given the Username in Discord?

import discord
import os

flist = []

client = discord.Client()
@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('?ID'):
      for i in ID.split()[1].split('#'):
         flist.append(i)
         print(flist)

  print(discord.utils.get(client.get_all_members(), name = flist[0], discriminator = flist[1]).id)
     

client.run(TOKEN)

I want to have a bot get the id of a use just by entering the the name and the hashtag number but it returns an error that the final line has nonetype. How could I fix this so it shows the id as a string?

Upvotes: 1

Views: 359

Answers (1)

Buster
Buster

Reputation: 446

First of all let me recommend you to use the discord.ext.commands extension for discord.py, it will greatly help you to make commands.

You just need to get a discord.Member or discord.User in this case. Since these classes have built in converters, you can use them as typehints to create an instance:

from discord.ext import commands

bot = commands.Bot(command_prefix='?', ...)

@bot.command()
async def showid(ctx, member: discord.Member): # a Union could be used for extra 'coverage'
    await ctx.send(f'ID: {member.id}')

Using a typehint in this case allows the command user to invoke the command like: ?showid <id>, ?showid <mention>, ?showid <name#tag>, ?showid <nickname> etc with the same result.

If you don't want to use discord.ext.commands, you can use discord.utils.get as well:

client = discord.Client(...)

@client.event
async def on_message(message):
    ...

    if message.content.startswith('?ID'):
        member = discord.utils.get(message.guild.members, name=message.content.split()[1])
        await message.channel.send(member.id)
    ...

Upvotes: 1

Related Questions