Эмбеды
Простой текст быстро надоедает. Для красивых ответов в 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с медалями, проценты без деления на ноль.