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

90 lines
2.7 KiB
Python

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]
await setting.interaction_check(setting.parent_id, selection)
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 ({commands[config pomodoro]})"
)
_option_name = _p(
"dash:stats|dropdown|placeholder",
"Pomodoro Timer Panel"
)
configui = TimerConfigUI
setting_classes = TimerConfigUI.setting_classes