Add tunnel chats

This commit is contained in:
AlberLC
2023-03-13 08:29:37 +01:00
parent 060484396e
commit cf8ec9182e

View File

@@ -11,7 +11,7 @@ import pymongo
import pytz import pytz
from flanaapis import InstagramLoginError, MediaNotFoundError, PlaceNotFoundError from flanaapis import InstagramLoginError, MediaNotFoundError, PlaceNotFoundError
from flanautils import return_if_first_empty from flanautils import return_if_first_empty
from multibot import BadRoleError, MultiBot, Role, bot_mentioned, constants as multibot_constants, group, inline, owner from multibot import BadRoleError, MultiBot, RegisteredCallback, Role, bot_mentioned, constants as multibot_constants, group, inline, owner
from flanabot import constants from flanabot import constants
from flanabot.bots.connect_4_bot import Connect4Bot from flanabot.bots.connect_4_bot import Connect4Bot
@@ -30,12 +30,19 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
Chat = Chat Chat = Chat
Message = Message Message = Message
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.tunnel_chat = None
self.owner_chat = None
# -------------------------------------------------------- # # -------------------------------------------------------- #
# ------------------- PROTECTED METHODS ------------------ # # ------------------- PROTECTED METHODS ------------------ #
# -------------------------------------------------------- # # -------------------------------------------------------- #
def _add_handlers(self): def _add_handlers(self):
super()._add_handlers() super()._add_handlers()
self.register(self._on_activate_tunnel, (multibot_constants.KEYWORDS['activate'], constants.KEYWORDS['tunnel']))
self.register(self._on_bye, multibot_constants.KEYWORDS['bye']) self.register(self._on_bye, multibot_constants.KEYWORDS['bye'])
self.register(self._on_config, multibot_constants.KEYWORDS['config']) self.register(self._on_config, multibot_constants.KEYWORDS['config'])
@@ -45,6 +52,8 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
self.register(self._on_database_messages_simple, (multibot_constants.KEYWORDS['last'], multibot_constants.KEYWORDS['message'], multibot_constants.KEYWORDS['simple'])) self.register(self._on_database_messages_simple, (multibot_constants.KEYWORDS['last'], multibot_constants.KEYWORDS['message'], multibot_constants.KEYWORDS['simple']))
self.register(self._on_deactivate_tunnel, (multibot_constants.KEYWORDS['deactivate'], constants.KEYWORDS['tunnel']))
self.register(self._on_delete, multibot_constants.KEYWORDS['delete']) self.register(self._on_delete, multibot_constants.KEYWORDS['delete'])
self.register(self._on_delete, (multibot_constants.KEYWORDS['delete'], multibot_constants.KEYWORDS['message'])) self.register(self._on_delete, (multibot_constants.KEYWORDS['delete'], multibot_constants.KEYWORDS['message']))
@@ -63,6 +72,8 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
self.register(self._on_roles, (multibot_constants.KEYWORDS['activate'], multibot_constants.KEYWORDS['role'])) self.register(self._on_roles, (multibot_constants.KEYWORDS['activate'], multibot_constants.KEYWORDS['role']))
self.register(self._on_roles, (multibot_constants.KEYWORDS['deactivate'], multibot_constants.KEYWORDS['role'])) self.register(self._on_roles, (multibot_constants.KEYWORDS['deactivate'], multibot_constants.KEYWORDS['role']))
self.register(self._on_tunnel_message, always=True)
self.register(self._on_users, multibot_constants.KEYWORDS['user']) self.register(self._on_users, multibot_constants.KEYWORDS['user'])
self.register_button(self._on_config_button_press, ButtonsGroup.CONFIG) self.register_button(self._on_config_button_press, ButtonsGroup.CONFIG)
@@ -122,6 +133,21 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
# ---------------------------------------------- # # ---------------------------------------------- #
# HANDLERS # # HANDLERS #
# ---------------------------------------------- # # ---------------------------------------------- #
async def _on_activate_tunnel(self, message: Message):
keywords = (*multibot_constants.KEYWORDS['activate'], *constants.KEYWORDS['tunnel'])
try:
chat_id_or_name = next(part for part in flanautils.remove_accents(message.text.lower()).split() if not flanautils.cartesian_product_string_matching(part, keywords, multibot_constants.PARSER_MIN_SCORE_DEFAULT))
except StopIteration:
return
chat_id_or_name = flanautils.cast_number(chat_id_or_name, raise_exception=False)
if (chat := await self.get_chat(chat_id_or_name)) or (chat := await self.get_chat(await self.get_user(chat_id_or_name))):
self.tunnel_chat = chat
self.owner_chat = await self.get_chat(self.owner_id) or await self.get_chat(await self.get_user(self.owner_id))
await self.send(f"Túnel abierto con <code>{chat.name}{f' ({chat.group_name})' if chat.group_name else ''}</code>.", message)
else:
await self.send_error('Chat inválido.', message)
async def _on_bye(self, message: Message): async def _on_bye(self, message: Message):
if message.chat.is_private or self.is_bot_mentioned(message): if message.chat.is_private or self.is_bot_mentioned(message):
await self.send_bye(message) await self.send_bye(message)
@@ -193,6 +219,11 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
async def _on_database_messages_simple(self, message: Message): async def _on_database_messages_simple(self, message: Message):
await self._on_database_messages(message, simple=True) await self._on_database_messages(message, simple=True)
async def _on_deactivate_tunnel(self, message: Message):
self.tunnel_chat = None
self.owner_chat = None
await self.send('Túnel desactivado.', message)
@inline(False) @inline(False)
async def _on_delete(self, message: Message): async def _on_delete(self, message: Message):
if message.replied_message: if message.replied_message:
@@ -350,6 +381,28 @@ class FlanaBot(Connect4Bot, PenaltyBot, PollBot, ScraperBot, UberEatsBot, Weathe
message.buttons_info.presser_user.save() message.buttons_info.presser_user.save()
async def _on_tunnel_message(self, message: Message):
if (
not self.tunnel_chat
or
self._parse_callbacks(
message.text,
[
RegisteredCallback(..., (multibot_constants.KEYWORDS['activate'], constants.KEYWORDS['tunnel'])),
RegisteredCallback(..., (multibot_constants.KEYWORDS['deactivate'], constants.KEYWORDS['tunnel']))
]
)
):
return
if message.chat.is_private and message.author.id == self.owner_id:
if message.text:
await self.send(message.text, self.tunnel_chat)
else:
await self.send('No puedo enviar un mensaje sin texto.', self.tunnel_chat)
elif message.chat == self.tunnel_chat:
await self.send(message.text if message.text else '<mensaje sin texto>', self.owner_chat)
@group @group
@bot_mentioned @bot_mentioned
async def _on_users(self, message: Message): async def _on_users(self, message: Message):