首页 > 解决方案 > 你如何从 discord.py 中获得用户头像?

问题描述

我为我的机器人创建了一个头像命令,但它不适用于提及,我试图不使用'@client.command',因为它会导致其余代码出现问题

  if message.content.startswith('+avatar'):
        sender = message.author
        name = sender.display_name
        avatar_url = sender.avatar_url

        embedVar = discord.Embed(title="**{}**".format(sender), description="Username: {}".format(name), color=0xec9e36)
        embedVar.set_image(url = avatar_url)
        await message.channel.send(embed=embedVar)

是我写的,我找不到任何让它工作的方法,任何形式的帮助都将不胜感激!

标签: pythondiscorddiscord.py

解决方案


我猜你正在尝试做类似 +avatar @mention A 提及基本上是一个包含用户 ID 的字符串标记。

import re

def is_mention(s):
    '''Check if the string is a valid 'mention' string for Discord'''
    try:
        return bool(re.match(r'<@!?(\d+)>', s))
    except Exception:
        return None


def mention_to_id(s):
    '''Extract user-id from the mention'''
    if is_mention(s):
        return int(re.sub(r'[<>!@]', '', s))
    return None

您可以先使用 提取提及字符串mention_str = message.content.split()[1],然后调用mention_to_id函数从提及字符串中提取 ID。

之后,调用get_user您的机器人(客户端)对象以获取用户,这将返回一个User具有avatar_url字段的对象。

总结一下,

if message.content.startswith('+avatar'):
    message_parts = message.content.split()
    if len(message_parts) > 1:
        mention_str = message.content.split()[1]
        if is_mention(mention_str):
            user = client.get_user(mention_to_id(mention_str)
            # do whatever with user.avatar_url
        else:
            # Warn about invalid mention
     else:
         # Whatever you want to do when there's no mention

参考:

  1. get_userhttps ://discordpy.readthedocs.io/en/latest/api.html#discord.Client.get_user
  2. Userhttps ://discordpy.readthedocs.io/en/latest/api.html#discord.User

推荐阅读