67 lines
1.9 KiB
Python
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,
|
|
)
|