Files
croccybot/src/modules/pomodoro/graphics.py

67 lines
1.9 KiB
Python

from typing import TYPE_CHECKING
from meta import LionBot
from utils.lib import utc_now
from gui.cards import FocusTimerCard, BreakTimerCard
if TYPE_CHECKING:
from .timer import Timer, Stage
from tracking.voice.cog import VoiceTrackerCog
from modules.nowdoing.cog import NowDoingCog
async def get_timer_card(bot: LionBot, timer: 'Timer', stage: 'Stage'):
voicecog: 'VoiceTrackerCog' = bot.get_cog('VoiceTrackerCog')
nowcog: 'NowDoingCog' = bot.get_cog('NowDoingCog')
name = timer.base_name
if stage is not None:
duration = stage.duration
remaining = (stage.end - utc_now()).total_seconds()
else:
remaining = duration = timer.data.focus_length
card_users = []
guildid = timer.data.guildid
for member in timer.members:
profile = await bot.get_cog('ProfileCog').fetch_profile_discord(member)
task = nowcog.tasks.get(profile.profileid, None)
tag = ''
session_duration = 0
if task:
tag = task.task
session_duration = ((task.done_at or utc_now()) - task.started_at).total_seconds()
else:
session = voicecog.get_session(guildid, member.id)
if session:
tag = session.tag
if session.start_time:
session_duration = (utc_now() - session.start_time).total_seconds()
else:
session_duration = 0
card_user = (
(member.id, (member.avatar or member.default_avatar).key),
session_duration,
tag,
)
card_users.append(card_user)
if stage is None or stage.focused:
card_cls = FocusTimerCard
else:
card_cls = BreakTimerCard
skin = await bot.get_cog('CustomSkinCog').get_skinargs_for(
timer.data.guildid, None, card_cls.card_id
)
return card_cls(
name,
remaining,
duration,
users=card_users,
)