@Hakyury

Бот не оповещает о новом участнике или кто то покидает Discord Server, как исправить код правильно?

не могу найти информацию, касаемо embed.set_thumbnail, embed.set_author. Если в Cog, в embed не использовать =f'{...}' , а просто текст, то всё отображается, сообщение появляется в чате. Но я хочу получить Никнейм нового участника и его Аватарку, не бота. Если использовать self.bot.user.avatar.url , то картинка используется Бота, а не участника. На оф. сайте написано self.bot.user.avatar_url (хотя оказывается, что обновили, и вместо _ используется . ).
Я уже не понимаю, где мне актуальную и понятную брать информацию по Disnake.py и Discord.py

Смотрел в туториалах, старая инфа, на форумах тоже нормально инфы нет. Кто с таким сталкивался и кто фарит за embed в файлах Cog? Я пытаюсь взять информацию о пользователе, но через Cog - async def on_member_join адекватно не робит, или я что-то вбиваю не так, или что-то не добавил, но конкретно по своему вопросу инфы не нашёл :(

import disnake
from disnake.ext import commands
from disnake import utils
intents = disnake.Intents.default()
intents.members = True


class Newmem(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    ########### НОВЫЙ ПОЛЬЗОВАТЕЛЬ ########
    @commands.Cog.listener()
    async def on_member_join(self, member):
        channel = member.guild.system_channel
        embed=disnake.Embed(
            title="Новый участник!",
            description=f"Добро пожаловать на наш великолепные Сервер! Надеямся, ты с нами на долго!",
            color=0xadf5f1
        )
        embed.set_image(url="https://ctot.com/wp-content/uploads/2016/01/fotolia_76080180_subscription_monthly_xl.jpg")
        embed.set_thumbnail(url=f'{member.avatar.url}')
        embed.set_author(name=f'{member.name}', icon_url=f'{member.avatar.url}')   
        await channel.send(embed=embed)
    #######################################


    ########### ПОКИДАЮЩИЙ УЧАСТНИК ########
    @commands.Cog.listener()
    async def on_member_remove(self, member):
        channel = member.guild.system_channel
        embed=disnake.Embed(
            title="Участник покинул Сервер!",
            description=f"Надеемся, что ещё вернётся к нам.",
            color=0xe641c8
        )
        embed.set_image(url="https://f9.pmo.ee/UE-dYSzSbDA3sk0UeFp2BHsUwlc=/1536x0/nginx/o/2018/07/31/11134772t1ha1a1.jpg")
        embed.set_thumbnail(url=f'{member.avatar.url}')
        embed.set_author(name=f'{member.name}', icon_url=f'{member.avatar.url}')     
        await channel.send(embed=embed)
    #######################################


    #### Готовность Проверки новых пользователе Cog ####
    @commands.Cog.listener()
    async def on_ready(self):
        print(
            f"Новые пользователи {self.bot.user} готов к работе!")
    ################################################


def setup(bot):
    bot.add_cog(Newmem(bot))
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix
yellow
А если без сумбура, то в чем проблема? В том что бот не оповещает, в том что картинка бота, а не участника, про то что где-то там что-то там кто-то что-то обновил? Код рабочий, за исключением того что не может обрабатывать людей без аватарки

screeens
Если пользуете disnake, вот есть документация: https://docs.disnake.dev/en/stable/api.html

Вот есть две функции, они возвращают класс Member. Идем по нему
64514bfb9fe97739238074.jpeg

У Member есть поле avatar. Оно равнозначно User.avatar
64514c1634d7d054255848.jpeg

Поле avatar является типом Asset. Проваливаемся в Asset и заодно читаем что если аватарки нет. то возвращается None.
64514c2f43bb6972408073.jpeg

У Asset есть key и url
64514c761d3c0648472535.jpeg

Если интересует url аватара, то так и получается: member.avatar.url
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы