Topic 4 of 6

Course materials are currently available in Russian only.

Эмбеды

Простой текст быстро надоедает. Для красивых ответов в Discord есть эмбеды — карточки с заголовком, текстом, полями и цветной полосой.

Embed

import discord

embed = discord.Embed(
    title="Профиль: Аня",
    description="Любит викторины про космос",
    color=discord.Color.blurple(),
)
embed.add_field(name="Очки", value="120")
embed.add_field(name="Ответов", value="15")
embed.add_field(name="Достижения", value="🏆 Первая победа", inline=False)
embed.set_footer(text="Викторина · сезон 1")
embed.set_thumbnail(url=user.display_avatar.url)

await message.channel.send(embed=embed)
  • title — заголовок, description — основной текст (поддерживает жирный, курсив и списки Markdown);
  • color — полоса слева: discord.Color.green(), red(), gold(), blurple() или discord.Color(0xFF8800);
  • add_field(name, value, inline=True) — поле «подпись: значение»; inline=True ставит поля в ряд (до трёх), False — с новой строки. Значение — непустая строка: числа превращайте через str();
  • set_footer(text=…) — мелкий текст внизу; set_thumbnail, set_image — картинки.

Эмбед — обычный объект: его можно собирать по частям в функции и возвращать.

Таблица лидеров

players = [(name, score) for name, score in SCORES.items() if score > 0]
top = sorted(players, key=lambda kv: (-kv[1], kv[0]))[:3]
lines = [f"{medal} {name} — {score}" for medal, (name, score) in zip(["🥇", "🥈", "🥉"], top)]
embed = discord.Embed(title="Лидеры", description="\n".join(lines) or "Пока никто не играл")

zip останавливается на самом коротком списке — если игроков меньше трёх, лишние медали просто не используются.

Проценты без ошибок

  • деление на ноль: у новичка ещё 0 ответов — проверьте это отдельно;
  • // округляет вниз, round — по обычным правилам; выберите то, что нужно;
  • границы «от 80%» сравнивают через >=, а дробей можно избежать: correct * 100 >= total * 80.

Итог

  • discord.Embed(title, description, color);
  • add_field(name, value, inline), set_footer(text);
  • channel.send(embed=embed);
  • сортировка с ничьими, zip с медалями, проценты без деления на ноль.