web-dev-qa-db-fra.com

comment mentionner un utilisateur utilisant son identifiant dans discord.py

J'essaie de coder un simple bot en utilisant discord.py, j'ai donc commencé avec les commandes amusantes, comme par exemple

import discord
import asyncio
client = discord.Client()


@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('!hug'):
        await client.send_message(message.channel, "hugs {0.author.mention}".format(message))

    # Greetings
    if message.content.startswith('hello'):
        msg = 'Hello {0.author.mention}'.format(message)
        await client.send_message(message.channel, msg)        

    # say (id) is the best
    # This is where I am lost. how to mention someone's name or id ?
    if message.content.startswith('!best'):
        mid = User.id('ZERO#6885').format(message)
        await client.send_message(message.channel, '{mid} mentioned')
5
Itachi Sama

Alors, j'ai finalement compris comment faire cela après quelques jours d'essais et d'erreurs en espérant que d'autres en bénéficieraient et auraient moins de douleur que moi en réalité ... La solution était finalement facile ..

  if message.content.startswith('!best'):
        myid = '<@201909896357216256>'
        await client.send_message(message.channel, ' : %s is the best ' % myid)
12
Itachi Sama

A partir d'un objet User, utilisez l'attribut User.mention pour obtenir une chaîne représentant une mention pour l'utilisateur. Pour obtenir un objet utilisateur à partir de leur ID, vous avez besoin de Client.get_user_info(id). Pour obtenir l'utilisateur à partir d'un nom d'utilisateur ('ZERO') et d'un discriminateur ('# 6885'), utilisez la fonction utilitaire discord.utils.get(iterable, **attrs). Dans le contexte:

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')
4
Peter G

Si vous travaillez sur des commandes, utilisez de préférence les fonctions de commande intégrées de discord.py. Votre commande hug deviendra:

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()))

En supposant que vous ayez fait quelque chose comme ça au début de votre code:

def __init__(self):
    self.bot = discord.Client(#blah)
1
JayTurnr

Pour mentionner un utilisateur et avoir son nom d'utilisateur à afficher (pas son identifiant), vous devez ajouter un ! à la réponse automatique acceptée. 

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

Lorsque vous ne disposez que de l'ID et non de l'objet Member ou User, je vous recommande de ne pas utiliser la réponse de Peter G où ils ont utilisé get() ou get_user_info(id) pour récupérer réellement l'objet User/Member. Ces opérations prennent beaucoup de temps et ne sont pas nécessaires car .mention ne renvoie que cette chaîne.

0
abccd