2017-05-14 1 views
2

Je suis en train de coder un robot simple à l'aide discord.py alors j'ai commencé avec le plaisir des commandes comme juste pour obtenir le blocage de l'apicomment puis-je mentionner un utilisateur en utilisant l'identifiant de l'utilisateur dans discord.py

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') 
+1

D'où provient 'discord.py'? – boardrider

Répondre

5

Alors j'ai finalement compris comment faire cela après quelques jours d'essais et d'erreurs en espérant d'autres en profiteraient et ont moins de douleur que je ne le ai .. La solution a finalement été facile ..

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

À 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 son ID, vous avez besoin de Client.get_user_info(id). Pour obtenir un utilisateur à partir d'un nom d'utilisateur ('ZERO') et d'un discriminateur ('# 6885'), utilisez la fonction d'utilité 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') 
+0

Fichier "\ client.py", ligne 307, dans _run_event, résultat de getattr (self, event) (* args, ** kwargs) Fichier "bot.py", ligne 39, dans on_message id = User.id ('ZERO # 6885'). Format (message) # ou tout ce que vous faites pour obtenir l'ID NameError: nom 'User' n'est pas défini –

+0

bien oui, votre méthode d'obtention de l'ID ne fonctionne pas - désolé je didn ne rends pas cela plus clair. Je vais éditer dans une méthode qui fonctionne –

+0

@ItachiSama En lisant plus loin, vous n'avez pas l'ID de l'utilisateur: vous avez son nom d'utilisateur et son discriminateur. J'ai changé le code pour refléter cela et laissé la méthode qui fonctionnera si vous avez l'ID dans un commentaire. –

1

Si vous travaillez sur les commandes, vous êtes mieux d'utiliser discord.py est construit dans les fonctions de commande, 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())) 

C'est assu ming vous avez fait quelque chose comme ça au début de votre code:

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