@Vasiliy009

Почему не показывает ник человека который пригласил пользователя на сервер в discord.py?

Хотел сделать когда человек заходит на сервер, в определенный канал оповешал его данные регистрации, его mention, кто его пригласил и если возможно то по какой ссылке он вступил на сервер в discord.py
Я сделал и получилось только получить дату регистрации и ник, но не смог получить ник человека который его пригласил и ссылка по которой вступил

Если возможно, то как сделать удалить последнии данные о регистрации по типу 343000+00:00 после времени

import asyncio
import discord
from discord.ext import commands
import string

intents=intents=discord.Intents.all()
client = commands.Bot(command_prefix='!', intents = intents)

@client.event
async def on_member_join(member: discord.Member):
    guild_id = member.guild.id
    guild = client.get_guild(guild_id)

    # Выполняем логику выдачи роли определенного сервера
    role = discord.utils.get(guild.roles, name="Фанат")
    await member.add_roles(role)

    # Отправляем информацию о приглашении
    invite_channel = discord.utils.get(guild.channels, name="║статус-приглашения")
    if invite_channel:
        inviter = None
        invite_url = None

        for invite in await guild.invites():
            if invite.channel == invite_channel:
                inviter = invite.inviter
                invite_url = invite.url
                break

        inviter_mention = inviter.name if inviter else "Unknown"

        emb_invite_info = discord.Embed(
            title='Информация о приглашении',
            description=f"Новый пользователь: {member.mention}\nДата регистрации: {member.created_at}\n"
                        f"Пригласивший: {inviter_mention}\nСсылка на приглашение: {invite_url}",
            color=discord.Color.blue()
        )
        await invite_channel.send(embed=emb_invite_info)


6588758d5e941939203578.png
Так выглядит вывод
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Давайте пройдем пошагово по алгоритму:
1) Вы смотрите в какой канал зашел пользователь
- На нем отвалятся те, у кого нет доступа к этому каналу и те кто заходят без конкретного канала

2) Ищите первого человека, кто создавал для этого канала
- Тут отвалятся несколько приглашений на один канал

3) Ожидаете что будет пригласивший
- Хотя это опциональное поле.

Итого даже если звезды сойдутся и на ком-то все отработает, считать все равно будет неправильно, т.к алгоритм предполагает, что на один канал может пригласить только один человек.

Теперь правильный алгоритм:
1) Заводите команду, например /invite, которой генерируете приглашения за пользователя.
2) При генерации сохраняете в БД кто команду вызвал, в формате вроде (user_id, url)
3) При заходите смотрите обязательное поле url и смотрите какой пользователь его генерировал - он и будет пригласившим.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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