rewrite: Initial statistics UI.
This commit is contained in:
64
src/modules/statistics/ui/summary.py
Normal file
64
src/modules/statistics/ui/summary.py
Normal file
@@ -0,0 +1,64 @@
|
||||
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
|
||||
Reference in New Issue
Block a user