Files
croccybot/src/modules/statistics/ui/summary.py

65 lines
1.8 KiB
Python

from typing import Optional
import asyncio
import discord
from utils.lib import MessageArgs
from .. import babel
from .base import StatsUI
from gui.cards import StatsCard, ProfileCard
from ..graphics.stats import get_stats_card
_p = babel._p
class SummaryUI(StatsUI):
_ui_name = _p('ui:SummaryUI|name', 'Summary')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._rendered = False
self._stats_card: Optional[StatsCard] = None
self._profile_card: Optional[ProfileCard] = None
async def redraw(self):
if self.guild is not None:
self._layout = [
(*self._switcher_buttons, self.toggle_pressed)
]
else:
self._layout = [
self._switcher_buttons
]
await super().redraw()
async def make_message(self) -> MessageArgs:
if not self._rendered:
await self._render()
stats_file = self._stats_card.as_file('stats.png')
profile_file = self._profile_card.as_file('profile.png')
# TODO: Refresh peer timeouts on interaction usage
# TODO: Write close and cleanup
return MessageArgs(files=[profile_file, stats_file])
async def _render(self):
await asyncio.gather(self._render_stats(), self._render_profile())
self._rendered = True
async def _render_stats(self):
card = await get_stats_card(self.bot, self.data, self.user.id, self.guild.id if self.guild else None)
await card.render()
self._stats_card = card
return card
async def _render_profile(self):
args = await ProfileCard.sample_args(None)
card = ProfileCard(**args)
await card.render()
self._profile_card = card
return card