diff --git a/flanabot/bots/flana_bot.py b/flanabot/bots/flana_bot.py index bc67cc7..8d51314 100644 --- a/flanabot/bots/flana_bot.py +++ b/flanabot/bots/flana_bot.py @@ -18,7 +18,7 @@ from flanautils import Media, MediaType, NotFoundError, OrderedSet, Source, Time from multibot import Action, BadRoleError, BotAction, MultiBot, SendError, User, admin, bot_mentioned, constants as multibot_constants, group, ignore_self_message, inline, reply from flanabot import constants -from flanabot.models import ButtonsMessageType, Chat, Message, Punishment, WeatherChart +from flanabot.models import Chat, Message, Punishment, WeatherChart # ----------------------------------------------------------------------------------------------------- # @@ -131,7 +131,8 @@ class FlanaBot(MultiBot, ABC): self.register(self._on_weather_chart_config_show, (constants.KEYWORDS['weather_chart'], multibot_constants.KEYWORDS['config'])) self.register(self._on_weather_chart_config_show, (multibot_constants.KEYWORDS['show'], constants.KEYWORDS['weather_chart'], multibot_constants.KEYWORDS['config'])) - self.register_button(self._on_button_press) + self.register_button(self._on_config_button_press, list(Chat.DEFAULT_CONFIG.keys())) + self.register_button(self._on_weather_button_press, WeatherEmoji.values) async def _change_config(self, config_name: str, message: Message, value: bool = None): if value is None: @@ -296,50 +297,20 @@ class FlanaBot(MultiBot, ABC): # ---------------------------------------------- # # HANDLERS # # ---------------------------------------------- # - async def _on_button_press(self, message: Message): - await self._accept_button_event(message) - - match message.button_pressed_text: - case WeatherEmoji.ZOOM_IN.value: - buttons_message_type = ButtonsMessageType.WEATHER - message.weather_chart.zoom_in() - case WeatherEmoji.ZOOM_OUT.value: - buttons_message_type = ButtonsMessageType.WEATHER - message.weather_chart.zoom_out() - case WeatherEmoji.LEFT.value: - buttons_message_type = ButtonsMessageType.WEATHER - message.weather_chart.move_left() - case WeatherEmoji.RIGHT.value: - buttons_message_type = ButtonsMessageType.WEATHER - message.weather_chart.move_right() - case WeatherEmoji.PRECIPITATION_VOLUME.value: - buttons_message_type = ButtonsMessageType.WEATHER - message.weather_chart.trace_metadatas['rain_volume'].show = not message.weather_chart.trace_metadatas['rain_volume'].show - message.weather_chart.trace_metadatas['snow_volume'].show = not message.weather_chart.trace_metadatas['snow_volume'].show - case emoji if emoji in WeatherEmoji.values: - buttons_message_type = ButtonsMessageType.WEATHER - trace_metadata_name = WeatherEmoji(emoji).name.lower() - message.weather_chart.trace_metadatas[trace_metadata_name].show = not message.weather_chart.trace_metadatas[trace_metadata_name].show - case _ if message.button_pressed_user.is_admin and 'auto_' in (config := message.button_pressed_text.split()[1]): - buttons_message_type = ButtonsMessageType.CONFIG - message.chat.config[config] = not message.chat.config[config] - message.save() - await self.edit('Estos son los ajustes del grupo:\n\n', self._get_config_buttons(message), message) - case _: - return - - if buttons_message_type is ButtonsMessageType.WEATHER: - message.weather_chart.apply_zoom() - message.weather_chart.draw() - message.save() - - image_bytes = message.weather_chart.to_image() - await self.edit(Media(image_bytes, MediaType.IMAGE), message) - async def _on_bye(self, message: Message): if not message.chat.is_group or self.is_bot_mentioned(message): await self.send_bye(message) + async def _on_config_button_press(self, message: Message): + await self._accept_button_event(message) + + if not message.button_pressed_user.is_admin or 'auto_' not in (config := message.button_pressed_text.split()[1]): + return + + message.chat.config[config] = not message.chat.config[config] + message.save() + await self.edit('Estos son los ajustes del grupo:\n\n', self._get_config_buttons(message), message) + @group @bot_mentioned async def _on_config_list_show(self, message: Message): @@ -548,6 +519,34 @@ class FlanaBot(MultiBot, ABC): for user in await self._find_users_to_punish(message): await self.unpunish(user, message, message) + async def _on_weather_button_press(self, message: Message): + await self._accept_button_event(message) + + match message.button_pressed_text: + case WeatherEmoji.ZOOM_IN.value: + message.weather_chart.zoom_in() + case WeatherEmoji.ZOOM_OUT.value: + message.weather_chart.zoom_out() + case WeatherEmoji.LEFT.value: + message.weather_chart.move_left() + case WeatherEmoji.RIGHT.value: + message.weather_chart.move_right() + case WeatherEmoji.PRECIPITATION_VOLUME.value: + message.weather_chart.trace_metadatas['rain_volume'].show = not message.weather_chart.trace_metadatas['rain_volume'].show + message.weather_chart.trace_metadatas['snow_volume'].show = not message.weather_chart.trace_metadatas['snow_volume'].show + case emoji if emoji in WeatherEmoji.values: + trace_metadata_name = WeatherEmoji(emoji).name.lower() + message.weather_chart.trace_metadatas[trace_metadata_name].show = not message.weather_chart.trace_metadatas[trace_metadata_name].show + case _: + return + + message.weather_chart.apply_zoom() + message.weather_chart.draw() + message.save() + + image_bytes = message.weather_chart.to_image() + await self.edit(Media(image_bytes, MediaType.IMAGE), message) + async def _on_weather_chart(self, message: Message): bot_state_message: Message | None = None if message.is_inline: @@ -568,7 +567,7 @@ class FlanaBot(MultiBot, ABC): possible_mentioned_ids.append(user.name.split('#')[0].lower()) possible_mentioned_ids.append(f'@{user.id}') - if roles := await self.get_group_roles(message): + if roles := await self.get_roles(message): for role in roles: possible_mentioned_ids.append(f'@{role.id}') diff --git a/flanabot/models/__init__.py b/flanabot/models/__init__.py index 32e91cd..2f04044 100644 --- a/flanabot/models/__init__.py +++ b/flanabot/models/__init__.py @@ -1,5 +1,4 @@ from flanabot.models.chat import * -from flanabot.models.enums import * from flanabot.models.message import * from flanabot.models.punishment import * from flanabot.models.weather_chart import * diff --git a/flanabot/models/enums.py b/flanabot/models/enums.py deleted file mode 100644 index 90f04f9..0000000 --- a/flanabot/models/enums.py +++ /dev/null @@ -1,10 +0,0 @@ -__all__ = ['ButtonsMessageType'] - -from enum import auto - -from flanautils import FlanaEnum - - -class ButtonsMessageType(FlanaEnum): - CONFIG = auto() - WEATHER = auto()