How do I mention a user using user's id in discord.py?

后端 未结 6 626
名媛妹妹
名媛妹妹 2020-12-20 13:36

I\'m trying to code a simple bot using discord.py so i started with the fun commands like just to get the hang of the api

import discord
import asyncio
clien         


        
相关标签:
6条回答
  • 2020-12-20 14:14

    To mention an user and have their username to display (not their id), you'll need to add a ! to the accepted self-answer.

    await client.send_message(message, '<@!20190989635716256>, hi!')
    

    When you only have the id and not the Member or User object, I'd recommend against using Peter G's answer where they used get() or get_user_info(id) to actually fetch the User/Member object first. These operations are very time consuming and not needed since .mention only return this very string.

    0 讨论(0)
  • 2020-12-20 14:15

    If you're working on commands, you're best to use discord.py's built in command functions, your hug command will become:

    import discord
    from discord.ext import commands
    
    @commands.command(pass_context=True)
    async def hug(self, ctx):
        await self.bot.say("hugs {}".format(ctx.message.author.mention()))
    

    This is assuming you've done something like this at the start of your code:

    def __init__(self):
        self.bot = discord.Client(#blah)
    
    0 讨论(0)
  • 2020-12-20 14:16

    While OP's issue is long resolved (and likely forgotten) -- If you're building a Discord bot in Python, it's still a bit difficult to find this information - hopefully this helps someone. If you're trying to use the @bot.command method - the following will work (in python3):

    @bot.command(name='ping', help='Ping the bot to text name')
    async def ping(ctx):
        await ctx.send('Pong ' + format(ctx.author))
        print("debug: " + dir(ctx.author))
    

    If you want to display the nickname of the "author" (who called the command) you can use this instead":

    @bot.command(name='ping', help='Ping the bot to text name')
    async def ping(ctx):
        # await ctx.send('Pong {0}'.format(ctx.author))
        await ctx.send('Pong ' + format(ctx.author.display_name))
        print("debug: " + dir(ctx.author))
    

    Another helpful tip: You can use dir(ctx.author) to see the attributes of the ctx.author object.

    0 讨论(0)
  • 2020-12-20 14:20

    If you just want to respond from the on_message callback, you can grab the mention string from the author like so:

    @bot.event
    async def on_message(message):
        # No infinite bot loops
        if message.author == bot.user or message.author.bot:
            return
    
        mention = message.author.mention
        response = f"hey {mention}, you're great!"
        await message.channel.send(response)
    
    0 讨论(0)
  • 2020-12-20 14:25

    From a User object, use the attribute User.mention to get a string that represents a mention for the user. To get a user object from their ID, you need Client.get_user_info(id). To get the a user from a username ('ZERO') and discriminator ('#6885') use the utility function discord.utils.get(iterable, **attrs). In context:

    if message.content.startswith('!best'):
        user = discord.utils.get(message.server.members, name = 'ZERO', discriminator = 6885)
        # user = client.get_user_info(id) is used to get User from ID, but OP doesn't need that
        await client.send_message(message.channel, user.mention + ' mentioned')
    
    0 讨论(0)
  • 2020-12-20 14:29

    So I finally figured out how to do this after few days of trial and error hoping others would benefit from this and have less pain than I actually had.. The solution was ultimately easy..

      if message.content.startswith('!best'):
            myid = '<@201909896357216256>'
            await client.send_message(message.channel, ' : %s is the best ' % myid)
    
    0 讨论(0)
提交回复
热议问题