65 lines
1.8 KiB
Python
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
|