3 Commits

Author SHA1 Message Date
AlberLC
296f0d625d Fix on_recover and bot_state_message in search_medias 2022-01-15 03:38:34 +01:00
AlberLC
a1858887de Update README.rst 2022-01-15 03:37:26 +01:00
AlberLC
641b36ee81 Update send_medias 2022-01-12 06:02:04 +01:00
5 changed files with 56 additions and 7 deletions

View File

@@ -10,7 +10,7 @@ Installation
Python 3.10 or higher is required.
.. code-block:: python
.. code-block::
pip install flanabot

View File

@@ -3,7 +3,9 @@ import datetime
import itertools
import pprint
import random
import time
from abc import ABC
from asyncio import Future
from typing import Iterable, Iterator, Type
import flanaapis.geolocation.functions
@@ -252,7 +254,8 @@ class FlanaBot(MultiBot, ABC):
Source.TWITTER: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0},
Source.INSTAGRAM: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0},
Source.TIKTOK: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0},
Source.REDDIT: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0}
Source.REDDIT: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0},
None: {MediaType.IMAGE: 0, MediaType.AUDIO: 0, MediaType.GIF: 0, MediaType.VIDEO: 0, None: 0, MediaType.ERROR: 0}
}
for media in medias:
medias_count[media.source][media.type_] += 1
@@ -278,7 +281,7 @@ class FlanaBot(MultiBot, ABC):
MediaType.ERROR: 'errores'}[media_type]
source_medias_sended_info.append(f'{count} {type_text}')
if source_medias_sended_info:
medias_sended_info.append(f"{flanautils.join_last_separator(source_medias_sended_info, ', ', ' y ')} de {source.name}")
medias_sended_info.append(f"{flanautils.join_last_separator(source_medias_sended_info, ', ', ' y ')} de {source.name if source else 'algún sitio'}")
medias_sended_info_joined = flanautils.join_last_separator(medias_sended_info, ',\n', ' y\n')
new_line = ' ' if len(medias_sended_info) == 1 else '\n'
@@ -292,19 +295,35 @@ class FlanaBot(MultiBot, ABC):
async def _search_and_send_medias(self, message: Message, send_song_info=False) -> list[Message]:
sended_media_messages = []
if medias := await self._search_medias(message):
sended_media_messages, _ = await self.send_medias(medias, message, send_song_info)
return sended_media_messages
async def _search_medias(self, message: Message) -> OrderedSet[Media]:
results: tuple[OrderedSet[Media] | BaseException, ...] = await asyncio.gather(
bot_state_message: Message | None = None
start_time = time.perf_counter()
results: Future = asyncio.gather(
twitter.get_medias(message.text),
instagram.get_medias(message.text),
tiktok.get_medias(message.text),
return_exceptions=True
)
results, exceptions = flanautils.filter_exceptions(results)
if self.is_bot_mentioned(message) or not message.chat.is_group:
while not results.done():
if constants.SCRAPING_MESSAGE_WAITING_TIME <= time.perf_counter() - start_time:
bot_state_message = await self.send(random.choice(constants.SCRAPING_PHRASES), message)
break
await asyncio.sleep(0.1)
await results
if bot_state_message:
await self.delete_message(bot_state_message)
results, exceptions = flanautils.filter_exceptions(results.result())
await self._manage_exceptions(exceptions, message)
@@ -445,6 +464,7 @@ class FlanaBot(MultiBot, ABC):
return
if not message_deleted_bot_action:
await self.send_error(random.choice(constants.RECOVER_PHRASES), message)
return
affected_object_ids = [affected_message_object_id for affected_message_object_id in message_deleted_bot_action.affected_objects]
@@ -452,6 +472,8 @@ class FlanaBot(MultiBot, ABC):
for deleted_message in deleted_messages:
await self.send(deleted_message.text, message)
message_deleted_bot_action.delete()
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 += await self._search_and_send_medias(message)
@@ -758,6 +780,10 @@ class FlanaBot(MultiBot, ABC):
sended_info_message = await self.send(f'{message.author.name} compartió{self._medias_sended_info(medias)}', message)
for media in medias:
if not media.content:
fails += 1
continue
if media.song_info:
message.song_infos.add(media.song_info)
message.save()

View File

@@ -13,6 +13,7 @@ PUNISHMENTS_RESET = datetime.timedelta(weeks=6 * flanautils.WEEKS_IN_A_MONTH)
RECOVERY_DELETED_MESSAGE_BEFORE = datetime.timedelta(hours=1)
TIME_THRESHOLD_TO_MANUAL_UNMUTE = datetime.timedelta(days=3)
TIME_THRESHOLD_TO_MANUAL_UNPUNISH = datetime.timedelta(days=3)
SCRAPING_MESSAGE_WAITING_TIME = 0.1
BAD_PHRASES = (
'Cállate ya anda.',
@@ -83,7 +84,7 @@ KEYWORDS = {
'scraping': ('api', 'aqui', 'busca', 'contenido', 'content', 'descarga', 'descargar', 'download', 'envia', 'habia',
'media', 'redes', 'scrap', 'scraping', 'search', 'send', 'social', 'sociales', 'tenia', 'video',
'videos'),
'show': ('actual', 'enseña', 'estado', 'how', 'is', 'muestra', 'show', 'como'),
'show': ('actual', 'enseña', 'estado', 'how', 'muestra', 'show', 'como'),
'song_info': ('aqui', 'cancion', 'data', 'datos', 'info', 'informacion', 'information', 'llama', 'media', 'name',
'nombre', 'sonaba', 'sonando', 'song', 'sono', 'sound', 'suena', 'title', 'titulo',
'video'),
@@ -98,3 +99,15 @@ KEYWORDS = {
'solano', 'storm', 'sun', 'temperatura', 'tempo', 'tiempo', 'tormenta', 've', 'ventisca',
'weather', 'wetter')
}
RECOVER_PHRASES = (
'No hay nada que recuperar.',
'Ya lo he recuperado y enviado, así que callate ya.',
'Ya lo he recuperado y enviado, así que mejor estás antento antes de dar por culo.',
'Ya lo he recuperado y enviado, no lo voy a hacer dos veces.',
'Ya lo he recuperado y enviado. A ver si leemos más y jodemos menos.',
'Ya lo he reenviado.'
)
SCRAPING_PHRASES = ('Analizando...', 'Buscando...', 'Hackeando internet... 👀', 'Rebuscando en la web...',
'Robando cosas...', 'Scrapeando...', 'Scraping...')

View File

@@ -1,7 +1,9 @@
from dataclasses import dataclass
from dataclasses import dataclass, field
from multibot import Chat as MultiBotChat
from flanabot.models.user import User
@dataclass(eq=False)
class Chat(MultiBotChat):
@@ -11,6 +13,7 @@ class Chat(MultiBotChat):
'auto_delete_original': True,
'auto_scraping': True,
'auto_weather_chart': True}
users: list[User] = field(default_factory=list)
def __post_init__(self):
super().__post_init__()

View File

@@ -1,14 +1,21 @@
from __future__ import annotations # todo0 remove in 3.11
from dataclasses import dataclass, field
from typing import Iterable
from flanautils import Media, OrderedSet
from multibot import Message as MultiBotMessage
from flanabot.models.chat import Chat
from flanabot.models.user import User
from flanabot.models.weather_chart import WeatherChart
@dataclass(eq=False)
class Message(MultiBotMessage):
author: User = None
mentions: Iterable[User] = field(default_factory=list)
chat: Chat = None
replied_message: Message = None
weather_chart: WeatherChart = None
song_infos: OrderedSet[Media] = field(default_factory=OrderedSet)