mirror of
https://github.com/nexus-stc/hyperboria
synced 2024-12-02 16:02:53 +01:00
9ce67ec590
- feat(idm): Rename IDM-2 to IDM - feat(idm): Open IDM 3 internal commit(s) GitOrigin-RevId: e302e9b5cda18cca1adc4ae8a3d906714d222106
129 lines
4.5 KiB
Python
129 lines
4.5 KiB
Python
from typing import Optional
|
|
|
|
from idm.api.proto.chat_manager_service_pb2 import Chat as ChatPb
|
|
from nexus.bot.application import TelegramApplication
|
|
from nexus.translations import t
|
|
from telethon import Button
|
|
|
|
top_languages = {
|
|
'am': '🇪🇹',
|
|
'ar': '🇦🇪',
|
|
'de': '🇩🇪',
|
|
'en': '🇬🇧',
|
|
'es': '🇪🇸',
|
|
'fa': '🇮🇷',
|
|
'hi': '🇮🇳',
|
|
'id': '🇮🇩',
|
|
'it': '🇮🇹',
|
|
'ja': '🇯🇵',
|
|
'ms': '🇲🇾',
|
|
'pb': '🇧🇷',
|
|
'ru': '🇷🇺',
|
|
'tg': '🇹🇯',
|
|
'uk': '🇺🇦',
|
|
'uz': '🇺🇿',
|
|
}
|
|
|
|
boolean_emoji = {
|
|
False: '❎',
|
|
True: '✅️',
|
|
}
|
|
|
|
|
|
class SettingsWidget:
|
|
def __init__(
|
|
self,
|
|
application: TelegramApplication,
|
|
chat: ChatPb,
|
|
has_language_buttons: Optional[bool] = None,
|
|
is_group_mode: bool = False,
|
|
request_id: Optional[str] = None,
|
|
):
|
|
self.application = application
|
|
self.chat = chat
|
|
self.has_language_buttons = has_language_buttons
|
|
if self.has_language_buttons is None:
|
|
self.has_language_buttons = self.application.config['application']['views']['settings']['has_language_buttons']
|
|
self.is_group_mode = is_group_mode
|
|
self.request_id = request_id
|
|
self._actions = {
|
|
'sl': self._switch_language,
|
|
'ssm': self._switch_system_messaging,
|
|
'sd': self._switch_discovery,
|
|
}
|
|
|
|
async def _switch_language(self, target_language: str):
|
|
self.chat = await self.application.idm_client.update_chat(
|
|
chat_id=self.chat.chat_id,
|
|
language=target_language,
|
|
request_id=self.request_id,
|
|
)
|
|
return self.chat
|
|
|
|
async def _switch_system_messaging(self, is_system_messaging_enabled: str):
|
|
self.chat = await self.application.idm_client.update_chat(
|
|
chat_id=self.chat.chat_id,
|
|
is_system_messaging_enabled=bool(int(is_system_messaging_enabled)),
|
|
request_id=self.request_id,
|
|
)
|
|
return self.chat
|
|
|
|
async def _switch_discovery(self, is_discovery_enabled: str):
|
|
self.chat = await self.application.idm_client.update_chat(
|
|
chat_id=self.chat.chat_id,
|
|
is_discovery_enabled=bool(int(is_discovery_enabled)),
|
|
request_id=self.request_id,
|
|
)
|
|
return self.chat
|
|
|
|
async def process_action(self, action_id: str, data: str):
|
|
old_chat = self.chat
|
|
await self._actions[action_id](data)
|
|
return old_chat != self.chat
|
|
|
|
async def render(self):
|
|
text = t('SETTINGS_TEMPLATE', language=self.chat.language).format(
|
|
bot_version=self.application.config['application']['bot_version'],
|
|
nexus_version=self.application.config['application']['nexus_version'],
|
|
language=top_languages.get(self.chat.language, self.chat.language),
|
|
)
|
|
if not self.is_group_mode and self.application.config['application']['views']['settings']['has_discovery_button']:
|
|
text = f"{text}\n\n{t('NEXUS_DISCOVERY_DESCRIPTION', language=self.chat.language)}"
|
|
buttons = []
|
|
if self.has_language_buttons:
|
|
buttons.append([])
|
|
for language in sorted(top_languages):
|
|
if len(buttons[-1]) >= 4:
|
|
buttons.append([])
|
|
buttons[-1].append(
|
|
Button.inline(
|
|
text=top_languages[language],
|
|
data=f'/settings_sl_{language}'
|
|
)
|
|
)
|
|
|
|
if self.is_group_mode:
|
|
return text, buttons
|
|
|
|
if self.application.config['application']['views']['settings']['has_system_messaging_button']:
|
|
buttons.append([
|
|
Button.inline(
|
|
text=(
|
|
f'{t("SYSTEM_MESSAGING_OPTION", language=self.chat.language)}: '
|
|
f'{boolean_emoji[self.chat.is_system_messaging_enabled]}'
|
|
),
|
|
data=f'/settings_ssm_{1 - int(self.chat.is_system_messaging_enabled)}'
|
|
)
|
|
])
|
|
if self.application.config['application']['views']['settings']['has_discovery_button']:
|
|
buttons.append([
|
|
Button.inline(
|
|
text=(
|
|
f'{t("DISCOVERY_OPTION", language=self.chat.language)}: '
|
|
f'{boolean_emoji[self.chat.is_discovery_enabled]}'
|
|
),
|
|
data=f'/settings_sd_{1 - int(self.chat.is_discovery_enabled)}'
|
|
)
|
|
])
|
|
return text, buttons
|