rewrite (babel): Complete configuration UI.

This commit is contained in:
2023-06-05 15:51:03 +03:00
parent 68fb0e9c62
commit eb0731e185
8 changed files with 397 additions and 170 deletions

86
src/babel/settingui.py Normal file
View File

@@ -0,0 +1,86 @@
import asyncio
import discord
from discord.ui.button import button, Button, ButtonStyle
from meta import LionBot
from utils.ui import ConfigUI, MessageUI, DashboardSection
from utils.lib import MessageArgs
from .settings import LocaleSettings
from . import babel
_p = babel._p
class LocaleSettingUI(ConfigUI):
setting_classes = [
LocaleSettings.GuildLocale,
LocaleSettings.ForceLocale,
]
def __init__(self, bot: LionBot, guildid: int, channelid: int, **kwargs):
self.settings = bot.get_cog('BabelCog').settings
super().__init__(bot, guildid, channelid, **kwargs)
# ----- UI Components -----
@button(label="FORCE_BUTTON_PLACEHOLDER", style=ButtonStyle.grey)
async def force_button(self, press: discord.Interaction, pressed: Button):
await press.response.defer()
setting = next(inst for inst in self.instances if inst.setting_id == LocaleSettings.ForceLocale.setting_id)
setting.value = not setting.value
await setting.write()
async def force_button_refresh(self):
button = self.force_button
setting = next(inst for inst in self.instances if inst.setting_id == LocaleSettings.ForceLocale.setting_id)
button.label = self.bot.translator.t(_p(
'ui:locale_config|button:force|label',
"Toggle Force"
))
button.style = ButtonStyle.green if setting.value else ButtonStyle.grey
# ----- UI Flow -----
async def make_message(self) -> MessageArgs:
t = self.bot.translator.t
title = t(_p(
'ui:locale_config|embed|title',
"Language 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 = tuple(
lguild.config.get(setting.setting_id)
for setting in self.setting_classes
)
async def refresh_components(self):
await asyncio.gather(
self.force_button_refresh(),
self.edit_button_refresh(),
self.close_button_refresh(),
self.reset_button_refresh(),
)
self.set_layout(
(self.force_button, self.edit_button, self.reset_button, self.close_button)
)
class LocaleDashboard(DashboardSection):
section_name = _p(
'dash:locale|title',
"Server Language Configuration"
)
configui = LocaleSettingUI
setting_classes = LocaleSettingUI.setting_classes