Как отобразить личную информацию про сервер

Всем привет! Я разрабатываю своего бота на языке программирования Python и библиотеке disnake.py и создал команду "инвайт-инфо" и она работает на обычных серверах, показывает информацию в каком канале и на какой сервер сделана инвайт-ссылка, но я столкнулся с проблемой, что эта команда перестает работать, когда я пишу вместо обычной ссылки пишу персональную (3 лвл буст сервера сервера). Вот пример:

!инвайт-инфо https://discord.gg/juniperbot

А бот тупо не отвечает на запрос. Пожалуйста, помогите мне, потому что я не знаю, как это исправить. Вот код:

@bot.command(name="инвайт-инфо", aliases=["Инвайт-инфо"])
async def инвайт_инфо(ctx, invite_url: str):
    try:
        invite = await bot.fetch_invite(invite_url)
    except disnake.NotFound:
        embed = disnake.Embed(description=f"❌ Приглашение не найдено. Убедитесь, что ссылка правильная.", color=0xc80005)
        return await ctx.send(embed=embed)
    except disnake.HTTPException:
        embed = disnake.Embed(description=f"❌ Произошла ошибка при получении информации о приглашении.", color=0xc80005)
        return await ctx.send(embed=embed)

    offline_count = invite.approximate_member_count - invite.approximate_presence_count

    invite_link = f"https://discord.gg/{invite.code}"
    
    embed = disnake.Embed(title="Информация о приглашении", description=f"Код: [`{invite.code}`]({invite_link})\nСервер: `{invite.guild.name}` (ID: {invite.guild.id})\nКанал: `{invite.channel.name}` (ID: {invite.channel.id})\nАвтор: `{invite.inviter.name}` (ID: {invite.inviter.id})", color=0x2b2d31)
    embed.add_field(name="По статусам", value=f"Участников: **{invite.approximate_member_count}**\nОнлайн: **{invite.approximate_presence_count}**\nОффлайн: **{offline_count}**")

    await ctx.send(embed=embed)

Вот как мой бот отвечает обычно: введите сюда описание изображения

Вот как он реаигирует на персональные ссылки: введите сюда описание изображения

И вот как альтернативно работает jeggyBot и на обычные ссылки и на персональные: введите сюда описание изображения


Ответы (1 шт):

Автор решения: Daniil Waysman

Ошибка заключается в том, что ты пытаешься найти информацию о пригласившем через invite.inviter, что приводит к ошибке в персональных ссылках

Нужно добавить проверки на наличие пригласившего, если ее нет, то ссылка является персональной

Вот код, который учитывает оба варианта:

@bot.command(name="инвайт-инфо", aliases=["Инвайт-инфо"])
async def инвайт_инфо(ctx, invite_url: str):
    try:
        invite = await bot.fetch_invite(invite_url)
    except disnake.NotFound:
        embed = disnake.Embed(
            description="❌ Приглашение не найдено. Убедитесь, что ссылка правильная.", 
            color=0xc80005)
        return await ctx.send(embed=embed)
    except disnake.HTTPException:
        embed = disnake.Embed(
            description="❌ Произошла ошибка при получении информации о приглашении.",
            color=0xc80005)
        return await ctx.send(embed=embed)

    offline_count = invite.approximate_member_count - invite.approximate_presence_count
    invite_link = f"https://discord.gg/{invite.code}"

    # Определяем информацию о пригласившем
    if invite.inviter is not None:  # Если inviter существует, это не персональная ссылка
        inviter_info = f"Автор: `{invite.inviter.name}` (ID: {invite.inviter.id})"
    else:  # Если inviter равен None, то это персональная ссылка
        inviter_info = "Автор: Неизвестен"

    embed = disnake.Embed(
        title="Информация о приглашении",
        description=(
            f"Код: [`{invite.code}`]({invite_link})\n"
            f"Сервер: `{invite.guild.name}` (ID: {invite.guild.id})\n"
            f"Канал: `{invite.channel.name}` (ID: {invite.channel.id})\n"
            f"{inviter_info}"  # Информация о пригласившем
        ),
        color=0x2b2d31
    )
    
    embed.add_field(
        name="По статусам",
        value=f"Участников: **{invite.approximate_member_count}**\n"
               "Онлайн: **{invite.approximate_presence_count}**\n"
               "Оффлайн: **{offline_count}**")

    await ctx.send(embed=embed)
→ Ссылка