rewrite: New Pomodoro Timer system.

This commit is contained in:
2023-05-19 09:45:06 +03:00
parent 8d5840c696
commit 4aa2587c45
29 changed files with 2860 additions and 12 deletions

View File

@@ -0,0 +1,84 @@
import asyncio
import discord
from discord.ui.select import select, ChannelSelect
from meta import LionBot
from utils.ui import ConfigUI, DashboardSection
from utils.lib import MessageArgs
from .settings import TimerSettings
from . import babel
_p = babel._p
class TimerConfigUI(ConfigUI):
setting_classes = (
TimerSettings.PomodoroChannel,
)
def __init__(self, bot: LionBot, guildid: int, channelid: int, **kwargs):
self.settings = bot.get_cog('TimerCog').settings
super().__init__(bot, guildid, channelid, **kwargs)
# ----- UI Components -----
@select(cls=ChannelSelect, channel_types=[discord.ChannelType.text, discord.ChannelType.voice],
placeholder="CHANNEL_SELECT_PLACEHOLDER",
min_values=0, max_values=1)
async def channel_menu(self, selection: discord.Interaction, selected: ChannelSelect):
await selection.response.defer()
setting = self.instances[0]
setting.value = selected.values[0] if selected.values else None
await setting.write()
async def refresh_channel_menu(self):
self.channel_menu.placeholder = self.bot.translator.t(_p(
'ui:timer_config|menu:channels|placeholder',
"Select Pomodoro Notification Channel"
))
# ----- UI Flow -----
async def make_message(self) -> MessageArgs:
t = self.bot.translator.t
title = t(_p(
'ui:timer_config|embed|title',
"Timer Configuration Panel"
))
embed = discord.Embed(
colour=discord.Colour.orange(),
title=title
)
for setting in self.instances:
embed.add_field(**setting.embed_field, inline=False)
args = MessageArgs(embed=embed)
return args
async def reload(self):
lguild = await self.bot.core.lions.fetch_guild(self.guildid)
self.instances = (
lguild.config.get(TimerSettings.PomodoroChannel.setting_id),
)
async def refresh_components(self):
await asyncio.gather(
self.refresh_channel_menu(),
self.edit_button_refresh(),
self.close_button_refresh(),
self.reset_button_refresh(),
)
self.set_layout(
(self.channel_menu,),
(self.edit_button, self.reset_button, self.close_button)
)
class TimerDashboard(DashboardSection):
section_name = _p(
'dash:pomodoro|title',
"Pomodoro Configuration"
)
configui = TimerConfigUI
setting_classes = TimerConfigUI.setting_classes