Как отобразить личную информацию про сервер
Всем привет! Я разрабатываю своего бота на языке программирования 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 шт):
Ошибка заключается в том, что ты пытаешься найти информацию о пригласившем через 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)