9 Commits

Author SHA1 Message Date
AlberLC
00323f99fb Update HEAT_NAMES 2022-06-27 05:08:08 +02:00
AlberLC
6237ccf8b6 Fix _on_choose 2022-06-27 04:59:14 +02:00
AlberLC
f402293c99 Upgrade _on_choose 2022-06-27 04:22:47 +02:00
AlberLC
99effad710 Fix constants accents 2022-06-23 04:51:49 +02:00
AlberLC
54cada0649 Fix _on_choose 2022-06-23 04:31:45 +02:00
AlberLC
0f5d3c333a Fix commands at private 2022-06-23 04:13:36 +02:00
AlberLC
5fb55404cf Fix commands at private 2022-06-23 03:10:49 +02:00
AlberLC
2768d8e949 Fix commands at private 2022-06-23 02:17:59 +02:00
AlberLC
b0ca5a2ded Add ports to db local access 2022-06-23 02:17:33 +02:00
4 changed files with 57 additions and 23 deletions

View File

@@ -7,6 +7,8 @@ services:
mongodb:
image: mongo
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}

View File

@@ -2,6 +2,7 @@ __all__ = ['FlanaBot']
import asyncio
import datetime
import math
import random
import re
import time as time_module
@@ -269,7 +270,7 @@ class FlanaBot(MultiBot, ABC):
return_exceptions=True
)
if not message.is_inline and (self.is_bot_mentioned(message) or not message.chat.is_group):
if not message.is_inline and (self.is_bot_mentioned(message) or message.chat.is_private):
while not results.done():
if constants.SCRAPING_MESSAGE_WAITING_TIME <= time_module.perf_counter() - start_time:
bot_state_message = await self.send(random.choice(constants.SCRAPING_PHRASES), message)
@@ -296,26 +297,53 @@ class FlanaBot(MultiBot, ABC):
# HANDLERS #
# ---------------------------------------------- #
async def _on_bye(self, message: Message):
if not message.chat.is_group or self.is_bot_mentioned(message):
if message.chat.is_private or self.is_bot_mentioned(message):
await self.send_bye(message)
@bot_mentioned
async def _on_choose(self, message: Message):
discarded_words = {*constants.KEYWORDS['choose'], *constants.KEYWORDS['random'], self.name, f'<@{self.id}>'}
if message.chat.is_group and not self.is_bot_mentioned(message):
return
discarded_words = {
*constants.KEYWORDS['choose'],
*constants.KEYWORDS['random'],
self.name.lower(), f'<@{self.id}>',
*flanautils.CommonWords.get('conjunctions'),
'entre', 'between'
}
if final_words := [word for word in message.text.split() if not flanautils.cartesian_product_string_matching(word.lower(), discarded_words, min_ratio=multibot_constants.PARSE_CALLBACKS_MIN_RATIO_DEFAULT)]:
for i in range(1, len(final_words) - 1):
try:
n1 = flanautils.cast_number(final_words[i - 1])
except ValueError:
try:
n1 = flanautils.words_to_numbers(final_words[i - 1], ignore_no_numbers=False)
except KeyError:
continue
try:
n2 = flanautils.cast_number(final_words[i + 1])
except ValueError:
try:
n2 = flanautils.words_to_numbers(final_words[i + 1], ignore_no_numbers=False)
except KeyError:
continue
if final_words[i] in ('al', 'el', 'to'):
await self.send(random.randint(math.ceil(n1), math.floor(n2)), message)
return
await self.send(random.choice(final_words), message)
else:
await self.send(random.choice(('¿Que elija el qué?', '¿Y las opciones?', '?', '🤔')), message)
async def _on_config_button_press(self, message: Message):
await self._accept_button_event(message)
await self.accept_button_event(message)
if not message.buttons_info.presser_user.is_admin:
if message.buttons_info.presser_user.is_admin is False:
return
config = message.buttons_info.pressed_text.split()[1]
message.chat.config[config] = not message.chat.config[config]
pressed_button = message.buttons_info[message.buttons_info.pressed_text]
pressed_button = message.buttons_info.pressed_button
pressed_button.is_checked = not pressed_button.is_checked
pressed_button.text = f"{'' if pressed_button.is_checked else ''} {config}"
@@ -381,15 +409,17 @@ class FlanaBot(MultiBot, ABC):
async def _on_delete_original_config_show(self, message: Message):
await self._show_config('auto_delete_original', message)
@bot_mentioned
async def _on_dice(self, message: Message):
if message.chat.is_group and not self.is_bot_mentioned(message):
return
if top_number := flanautils.sum_numbers_in_text(message.text):
await self.send(random.randint(1, top_number), message)
await self.send(random.randint(1, math.floor(top_number)), message)
else:
await self.send(random.choice(('¿De cuántas caras?', '¿Y el número?', '?', '🤔')), message)
async def _on_hello(self, message: Message):
if not message.chat.is_group or self.is_bot_mentioned(message):
if message.chat.is_private or self.is_bot_mentioned(message):
await self.send_hello(message)
async def _on_new_message_default(self, message: Message):
@@ -436,8 +466,10 @@ class FlanaBot(MultiBot, ABC):
def _distribute_poll_buttons(self, texts: Sequence[str]) -> list[list[str]]:
pass
@bot_mentioned
async def _on_poll(self, message: Message):
if message.chat.is_group and not self.is_bot_mentioned(message):
return
discarded_words = {*constants.KEYWORDS['poll'], self.name.lower(), f'<@{self.id}>'}
if final_options := [option.title() for option in message.text.split() if not flanautils.cartesian_product_string_matching(option.lower(), discarded_words, min_ratio=multibot_constants.PARSE_CALLBACKS_MIN_RATIO_DEFAULT)]:
await self.send('Encuesta en curso...', self._distribute_poll_buttons(final_options), message, buttons_key=ButtonsGroup.POLL, contents={'poll': {'is_active': True, 'votes': {option: [] for option in final_options}}})
@@ -445,7 +477,7 @@ class FlanaBot(MultiBot, ABC):
await self.send(random.choice(('¿Y las opciones?', '?', '🤔')), message)
async def _on_poll_button_press(self, message: Message):
await self._accept_button_event(message)
await self.accept_button_event(message)
if not message.contents['poll']['is_active']:
return
@@ -580,16 +612,15 @@ class FlanaBot(MultiBot, ABC):
if song_infos:
for song_info in song_infos:
await self.send_song_info(song_info, message)
elif self.is_bot_mentioned(message) or not message.chat.is_group:
elif self.is_bot_mentioned(message) or message.chat.is_private:
await self._manage_exceptions(SendError('No hay información musical en ese mensaje.'), message)
async def _on_stop_poll(self, message: Message):
if poll_message := message.replied_message:
if poll_message.contents.get('poll') is None:
return
elif (
self.is_bot_mentioned(message)
(message.chat.is_private or self.is_bot_mentioned(message))
and
flanautils.cartesian_product_string_matching(message.text, constants.KEYWORDS['poll'], min_ratio=multibot_constants.PARSE_CALLBACKS_MIN_RATIO_DEFAULT)
and
@@ -631,7 +662,7 @@ class FlanaBot(MultiBot, ABC):
await self.unpunish(user, message, message)
async def _on_weather_button_press(self, message: Message):
await self._accept_button_event(message)
await self.accept_button_event(message)
match message.buttons_info.pressed_text:
case WeatherEmoji.ZOOM_IN.value:
@@ -694,7 +725,7 @@ class FlanaBot(MultiBot, ABC):
- flanautils.cartesian_product_string_matching(original_text_words, multibot_constants.KEYWORDS['date'], min_ratio=0.85).keys()
- flanautils.cartesian_product_string_matching(original_text_words, multibot_constants.KEYWORDS['thanks'], min_ratio=0.85).keys()
- possible_mentioned_ids
- flanautils.CommonWords.all_words
- flanautils.CommonWords.get()
)
if not place_words:
if not message.is_inline:

View File

@@ -21,9 +21,10 @@ HEAT_NAMES = [
'Canal Caliente',
'Canal Olor a Vasco',
'Verano Cordobés al Sol',
'Canal Ardiendo',
'abrid las putas ventanas y traed el extintor',
'Canal INFIERNO'
'Canal Ardiendo',
'Canal INFIERNO',
'🔥🔥🔥🔥🔥🔥🔥'
]
HOT_CHANNEL_ID = 493530483045564417

View File

@@ -28,8 +28,8 @@ INSULTS = (
'Baneito pa ti en breve.',
'Calla noob.',
'Cansino.',
'Cuentame menos.',
'Cuentame más.',
'Cuéntame menos.',
'Cuéntame más.',
'Cállate ya anda.',
'Cállate.',
'Das penilla.',
@@ -51,7 +51,7 @@ INSULTS = (
'Más tonto y no naces.',
'No eres muy avispado tú...',
'Pesado.',
'Que bien, ¿eh?',
'Qué bien, ¿eh?',
'Que me dejes en paz.',
'Qué pesado.',
'Quita bicho.',
@@ -85,7 +85,7 @@ INSULTS = (
)
KEYWORDS = {
'choose': ('choose', 'elige'),
'choose': ('choose', 'elige', 'escoge'),
'covid_chart': ('case', 'caso', 'contagiado', 'contagio', 'corona', 'coronavirus', 'covid', 'covid19', 'death',
'disease', 'enfermedad', 'enfermos', 'fallecido', 'incidencia', 'jacovid', 'mascarilla', 'muerte',
'muerto', 'pandemia', 'sick', 'virus'),