4 Commits

Author SHA1 Message Date
AlberLC
c2e7e68619 Fix _check_message_flood 2022-06-15 00:46:31 +02:00
AlberLC
f12d0c18c1 Fix insults 2022-06-14 04:41:26 +02:00
AlberLC
b55f933a32 Add new insults 2022-06-14 04:01:16 +02:00
AlberLC
5fa102b157 Fix _on_scraping with replied message 2022-06-12 00:13:33 +02:00
3 changed files with 74 additions and 38 deletions

View File

@@ -152,20 +152,15 @@ class FlanaBot(MultiBot, ABC):
last_2s_messages = Message.find({ last_2s_messages = Message.find({
'platform': self.platform.value, 'platform': self.platform.value,
'author': message.author.object_id, 'author': message.author.object_id,
'last_update': { 'last_update': {'$gte': datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=2)}
'$gte': datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=2)
}
}) })
last_7s_messages = Message.find({ last_7s_messages = Message.find({
'platform': self.platform.value, 'platform': self.platform.value,
'author': message.author.object_id, 'author': message.author.object_id,
'last_update': { 'last_update': {'$gte': datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=7)}
'$gte': datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=7),
'$lt': datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=2)
}
}) })
if len(last_2s_messages) >= 5 or len(last_7s_messages) >= 7: if len(last_2s_messages) >= constants.FLOOD_2s_LIMIT or len(last_7s_messages) >= constants.FLOOD_7s_LIMIT:
n_punishments = len(Punishment.find({ n_punishments = len(Punishment.find({
'platform': self.platform.value, 'platform': self.platform.value,
'user_id': message.author.id, 'user_id': message.author.id,
@@ -308,7 +303,7 @@ class FlanaBot(MultiBot, ABC):
return return
message.chat.config[config] = not message.chat.config[config] message.chat.config[config] = not message.chat.config[config]
message.save()
await self.edit('<b>Estos son los ajustes del grupo:</b>\n\n', self._get_config_buttons(message), message) await self.edit('<b>Estos son los ajustes del grupo:</b>\n\n', self._get_config_buttons(message), message)
@group @group
@@ -449,7 +444,11 @@ class FlanaBot(MultiBot, ABC):
await self.send(deleted_message.text, message) await self.send(deleted_message.text, message)
async def _on_scraping(self, message: Message, delete_original: bool = None) -> OrderedSet[Media]: async def _on_scraping(self, message: Message, delete_original: bool = None) -> OrderedSet[Media]:
sended_media_messages = await self._search_and_send_medias(message.replied_message) if message.replied_message else OrderedSet() sended_media_messages = OrderedSet()
if message.replied_message:
word_matches = flanautils.cartesian_product_string_matching(message.text, constants.KEYWORDS['scraping'], min_ratio=multibot_constants.PARSE_CALLBACKS_MIN_RATIO_DEFAULT)
if sum(max(matches.values()) for matches in word_matches.values()):
sended_media_messages += await self._search_and_send_medias(message.replied_message)
sended_media_messages += await self._search_and_send_medias(message) sended_media_messages += await self._search_and_send_medias(message)
await self.send_inline_results(message) await self.send_inline_results(message)
@@ -462,6 +461,8 @@ class FlanaBot(MultiBot, ABC):
( (
delete_original is None delete_original is None
and and
not message.replied_message
and
message.chat.config['auto_delete_original'] message.chat.config['auto_delete_original']
) )
or or
@@ -542,7 +543,6 @@ class FlanaBot(MultiBot, ABC):
message.weather_chart.apply_zoom() message.weather_chart.apply_zoom()
message.weather_chart.draw() message.weather_chart.draw()
message.save()
image_bytes = message.weather_chart.to_image() image_bytes = message.weather_chart.to_image()
await self.edit(Media(image_bytes, MediaType.IMAGE), message) await self.edit(Media(image_bytes, MediaType.IMAGE), message)

View File

@@ -4,6 +4,8 @@ import flanautils
AUTO_WEATHER_EVERY = datetime.timedelta(hours=6) AUTO_WEATHER_EVERY = datetime.timedelta(hours=6)
CHECK_PUNISHMENTS_EVERY_SECONDS = datetime.timedelta(hours=1).total_seconds() CHECK_PUNISHMENTS_EVERY_SECONDS = datetime.timedelta(hours=1).total_seconds()
FLOOD_2s_LIMIT = 4
FLOOD_7s_LIMIT = 7
HEAT_PERIOD_SECONDS = datetime.timedelta(minutes=15).total_seconds() HEAT_PERIOD_SECONDS = datetime.timedelta(minutes=15).total_seconds()
INSULT_PROBABILITY = 0.00166666667 INSULT_PROBABILITY = 0.00166666667
MAX_PLACE_QUERY_LENGTH = 50 MAX_PLACE_QUERY_LENGTH = 50
@@ -19,30 +21,67 @@ BYE_PHRASES = ('Adiós.', 'adieu', 'adio', 'adioh', 'adios', 'adió', 'adiós',
HELLO_PHRASES = ('alo', 'aloh', 'buenas', 'Hola.', 'hello', 'hey', 'hi', 'hola', 'holaaaa', 'holaaaaaaa', 'ola', HELLO_PHRASES = ('alo', 'aloh', 'buenas', 'Hola.', 'hello', 'hey', 'hi', 'hola', 'holaaaa', 'holaaaaaaa', 'ola',
'ola k ase', 'pa ti mi cola', 'saludos') 'ola k ase', 'pa ti mi cola', 'saludos')
INSULTS = ( INSULTS = (
'Cállate ya anda.', '._.',
'¿Quién te ha preguntado?', 'aha',
'¿Tú eres así o te dan apagones cerebrales?', 'Aléjate de mi.',
'Ante la duda mi dedo corazón te saluda.', 'Ante la duda mi dedo corazón te saluda.',
'Enjoy cancer brain.',
'Calla noob.',
'Hablas tanta mierda que tu culo tiene envidia de tu boca.',
'jAJjajAJjajAJjajAJajJAJajJA',
'enjoy xd',
'Reported.',
'Baneito pa ti en breve.', 'Baneito pa ti en breve.',
'Despídete de tu cuenta.', 'Calla noob.',
'Flanagan es más guapo que tú.', 'Cansino.',
'jajaj', 'Cuentame menos.',
'xd', 'Cuentame más.',
'Hay un concurso de hostias y tienes todas las papeletas.', 'Cállate ya anda.',
'¿Por qué no te callas?', 'Cállate.',
'Das penilla.', 'Das penilla.',
'De verdad. Estás para encerrarte.',
'Deberían hacerte la táctica del C4.', 'Deberían hacerte la táctica del C4.',
'Te voy romper las pelotas.', 'Despídete de tu cuenta.',
'Más tonto y no naces.', 'Déjame tranquilo.',
'Enjoy cancer brain.',
'Eres cortito, ¿eh?',
'Eres más malo que pegarle a un padre.',
'Eres más tonto que peinar bombillas.', 'Eres más tonto que peinar bombillas.',
'Eres más tonto que pellizcar cristales.', 'Eres más tonto que pellizcar cristales.',
'Eres más malo que pegarle a un padre.' 'Estás mal de la azotea.',
'Estás mal de la cabeza.',
'Flanagan es más guapo que tú.',
'Hablas tanta mierda que tu culo tiene envidia de tu boca.',
'Hay un concurso de hostias y tienes todas las papeletas.',
'Loco.',
'Más tonto y no naces.',
'No eres muy avispado tú...',
'Pesado.',
'Que bien, ¿eh?',
'Que me dejes en paz.',
'Qué pesado.',
'Quita bicho.',
'Reportaito mi arma.',
'Reported.',
'Retard.',
'Te voy romper las pelotas.',
'Tú... no estás muy bien, ¿no?',
'Ya estamos otra vez...',
'Ya estamos...',
'enjoy xd',
'jAJjajAJjajAJjajAJajJAJajJA',
'jajaj',
'o_O',
'xd',
'¿Otra vez tú?',
'¿Pero cuándo te vas a callar?',
'¿Por qué no te callas?',
'¿Quién te ha preguntado?',
'¿Qúe quieres?',
'¿Te callas o te callo?',
'¿Te imaginas que me interesa?',
'¿Te quieres callar?',
'¿Todo bien?',
'¿Tú eres así o te dan apagones cerebrales?',
'🖕',
'😑',
'🙄',
'🤔',
'🤨'
) )
KEYWORDS = { KEYWORDS = {

View File

@@ -7,7 +7,6 @@ os.environ |= flanautils.find_environment_variables('../.env')
import unittest import unittest
from typing import Iterable from typing import Iterable
from multibot import constants as multibot_constants
from flanabot.bots.flana_tele_bot import FlanaTeleBot from flanabot.bots.flana_tele_bot import FlanaTeleBot
@@ -15,7 +14,7 @@ class TestParseCallbacks(unittest.TestCase):
def _test_no_always_callbacks(self, phrases: Iterable[str], callback: callable): def _test_no_always_callbacks(self, phrases: Iterable[str], callback: callable):
for i, phrase in enumerate(phrases): for i, phrase in enumerate(phrases):
with self.subTest(phrase): with self.subTest(phrase):
callbacks = [registered_callback.callback for registered_callback in self.flana_tele_bot._parse_callbacks(phrase, multibot_constants.RATIO_REWARD_EXPONENT, multibot_constants.KEYWORDS_LENGHT_PENALTY, multibot_constants.MINIMUM_RATIO_TO_MATCH) callbacks = [registered_callback.callback for registered_callback in self.flana_tele_bot._parse_callbacks(phrase, self.flana_tele_bot._registered_callbacks)
if not registered_callback.always] if not registered_callback.always]
self.assertEqual(1, len(callbacks)) self.assertEqual(1, len(callbacks))
self.assertEqual(callback, callbacks[0], f'\n\nExpected: {callback.__name__}\nActual: {callbacks[0].__name__}') self.assertEqual(callback, callbacks[0], f'\n\nExpected: {callback.__name__}\nActual: {callbacks[0].__name__}')
@@ -92,8 +91,7 @@ class TestParseCallbacks(unittest.TestCase):
def test_on_delete_original_config_activate(self): def test_on_delete_original_config_activate(self):
phrases = [ phrases = [
'activa el borrado automatico', 'activa el borrado automatico',
'flanabot pon el auto delete activado', 'flanabot pon el auto delete activado'
'flanabot activa el autodelete'
] ]
self._test_no_always_callbacks(phrases, self.flana_tele_bot._on_delete_original_config_activate) self._test_no_always_callbacks(phrases, self.flana_tele_bot._on_delete_original_config_activate)
@@ -104,8 +102,7 @@ class TestParseCallbacks(unittest.TestCase):
def test_on_delete_original_config_deactivate(self): def test_on_delete_original_config_deactivate(self):
phrases = [ phrases = [
'desactiva el borrado automatico', 'desactiva el borrado automatico',
'flanabot pon el auto delete desactivado', 'flanabot pon el auto delete desactivado'
'flanabot desactiva el autodelete'
] ]
self._test_no_always_callbacks(phrases, self.flana_tele_bot._on_delete_original_config_deactivate) self._test_no_always_callbacks(phrases, self.flana_tele_bot._on_delete_original_config_deactivate)
@@ -119,9 +116,9 @@ class TestParseCallbacks(unittest.TestCase):
def test_on_mute(self): def test_on_mute(self):
phrases = [ phrases = [
# 'silencia', 'silencia',
# 'silencia al pavo ese', 'silencia al pavo ese',
# 'calla a ese pesao', 'calla a ese pesao',
'haz que se calle', 'haz que se calle',
'quitale el microfono a ese', 'quitale el microfono a ese',
'quitale el micro', 'quitale el micro',