Update scraping structure

This commit is contained in:
AlberLC
2022-08-12 16:47:17 +02:00
parent a68b779e1a
commit 1fbe76b733

View File

@@ -112,6 +112,8 @@ class FlanaBot(MultiBot, ABC):
self.register(self._on_scraping, constants.KEYWORDS['scraping'])
self.register(self._on_scraping_audio, multibot_constants.KEYWORDS['audio'])
self.register(self._on_scraping_config_activate, (multibot_constants.KEYWORDS['activate'], constants.KEYWORDS['scraping']))
self.register(self._on_scraping_config_activate, (multibot_constants.KEYWORDS['activate'], constants.KEYWORDS['scraping'], multibot_constants.KEYWORDS['config']))
@@ -294,15 +296,18 @@ class FlanaBot(MultiBot, ABC):
return options
async def _search_and_send_medias(self, message: Message, send_song_info=False) -> list[Message]:
sended_media_messages = []
async def _scrape_and_send(self, message: Message, audio_only=False) -> OrderedSet[Media]:
if not (medias := await self._search_medias(message, audio_only)):
return OrderedSet()
if medias := await self._search_medias(message):
sended_media_messages, _ = await self.send_medias(medias, message, send_song_info)
sended_media_messages, _ = await self.send_medias(medias, message)
sended_media_messages = OrderedSet(sended_media_messages)
await self.send_inline_results(message)
return sended_media_messages
async def _search_medias(self, message: Message, timeout_for_media: int | float = None) -> OrderedSet[Media]:
async def _search_medias(self, message: Message, audio_only=False, timeout_for_media: int | float = None) -> OrderedSet[Media]:
medias = OrderedSet()
tweet_ids = twitter.find_tweet_ids(message.text)
@@ -469,7 +474,7 @@ class FlanaBot(MultiBot, ABC):
async def _on_new_message_default(self, message: Message):
if message.is_inline:
await self._on_scraping(message)
await self._scrape_and_send(message)
elif (
(
message.chat.is_group
@@ -513,7 +518,7 @@ class FlanaBot(MultiBot, ABC):
await self._check_message_flood(message)
async def _on_no_delete_original(self, message: Message):
if not await self._on_scraping(message, delete_original=False):
if not await self._scrape_and_send(message):
await self._on_recover_message(message)
async def _on_poll(self, message: Message):
@@ -638,35 +643,22 @@ class FlanaBot(MultiBot, ABC):
message.buttons_info.presser_user.save()
async def _on_scraping(self, message: Message, delete_original: bool = None) -> OrderedSet[Media]:
async def _on_scraping(self, message: Message, audio_only=False) -> OrderedSet[Media]:
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)
await self.send_inline_results(message)
sended_media_messages += await self._scrape_and_send(message.replied_message, audio_only)
sended_media_messages += await self._scrape_and_send(message, audio_only)
if (
sended_media_messages
and
message.chat.is_group
and
(
(
delete_original is None
and
not message.replied_message
and
message.chat.config['auto_delete_original']
)
or
(
delete_original is not None
and
delete_original
)
)
not message.replied_message
and
message.chat.config['auto_delete_original']
):
# noinspection PyTypeChecker
BotAction(Action.MESSAGE_DELETED, message, affected_objects=[message, *sended_media_messages]).save()
@@ -674,6 +666,9 @@ class FlanaBot(MultiBot, ABC):
return sended_media_messages
async def _on_scraping_audio(self, message: Message) -> OrderedSet[Media]:
return await self._on_scraping(message, audio_only=True)
@admin
@group
@bot_mentioned
@@ -980,7 +975,6 @@ class FlanaBot(MultiBot, ABC):
await self.typing_delay(message)
return await self.send(random.choice(constants.INSULTS), message)
@return_if_first_empty(exclude_self_types='FlanaBot', globals_=globals())
async def send_medias(self, medias: OrderedSet[Media], message: Message, send_song_info=False) -> tuple[list[Message], int]:
sended_media_messages = []
fails = 0
@@ -1002,13 +996,13 @@ class FlanaBot(MultiBot, ABC):
message.song_infos.add(media.song_info)
message.save()
if not (bot_message := await self.send(media, message)):
fails += 1
else:
if bot_message := await self.send(media, message):
sended_media_messages.append(bot_message)
if media.song_info and bot_message:
bot_message.song_infos.add(media.song_info)
bot_message.save()
else:
fails += 1
if send_song_info and media.song_info:
await self.send_song_info(media.song_info, message)