From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NO_DNS_FOR_FROM,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 Received: from localhost.localdomain (unknown [101.128.125.94]) by gnuweeb.org (Postfix) with ESMTPSA id 08EC57E7BE; Thu, 21 Jul 2022 23:30:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1658446210; bh=6CPZmIyGZbF9EGZef6jWiXZdLkEFaoQjiWOW9nXWDMY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kVQbaep9KnB69hdkozPOvrzWc1ce9eKajQHiIcTc9Jfb/I6gsAFKEzM1w/Fdu0HTA zPTXlZlDpD0cDMNFTuqCbGLXsI73U8wegT7oUVe5k4fpbF0fLHYdwybSCZ1zZd3TLn U3SJvfvx8zAfJ3APXpOrLK7x73wC18Pjpgog6ySCe+RFpSfWddly3YXN9SlQnSRpnB dYvmbPSylZgSuq7572qwI7KDOpkx+jyBKHIl/FidsPS1eguEeXGbWw47IpiOZpK9ri +bFU/CeXGvDvpgqaRPbaB6n0N8JQykM3aa5bJt1gAvEHs/yma4hlGRGAkbevZ2y6sb Bl44zPuQwrJLg== From: Muhammad Rizki To: Ammar Faizi Cc: Muhammad Rizki , GNU/Weeb Mailing List Subject: [PATCH v3 07/17] Re-design send email message to Telegram Date: Fri, 22 Jul 2022 06:29:28 +0700 Message-Id: <20220721232938.503-8-kiizuha@gnuweeb.org> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <20220721232938.503-1-kiizuha@gnuweeb.org> References: <20220721232938.503-1-kiizuha@gnuweeb.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: From: Muhammad Rizki We want to separate send message function and inherit with the Pyrogram Client, so it should makes the code clean and clear. Signed-off-by: Muhammad Rizki --- daemon/packages/__init__.py | 1 + daemon/packages/client.py | 64 +++++++++++++++++++++++++++++++++++++ daemon/run.py | 4 +-- daemon/scraper/bot.py | 35 ++++++-------------- 4 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 daemon/packages/__init__.py create mode 100644 daemon/packages/client.py diff --git a/daemon/packages/__init__.py b/daemon/packages/__init__.py new file mode 100644 index 0000000..efef9ae --- /dev/null +++ b/daemon/packages/__init__.py @@ -0,0 +1 @@ +from .client import DaemonClient diff --git a/daemon/packages/client.py b/daemon/packages/client.py new file mode 100644 index 0000000..f73b913 --- /dev/null +++ b/daemon/packages/client.py @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2022 Muhammad Rizki +# + +from pyrogram import Client +from pyrogram.enums import ParseMode +from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton +from typing import Union, BinaryIO + + +class DaemonClient(Client): + def __init__(self, name: str, api_id: int, + api_hash: str, **kwargs): + super().__init__(name, api_id, + api_hash, **kwargs) + + + async def send_text_email( + self, + chat_id: Union[int, str], + text: str, + reply_to: int, + url: str = None, + parse_mode: ParseMode = ParseMode.HTML + ) -> Message: + print("[send_text_email]") + return await self.send_message( + chat_id=chat_id, + text=text, + reply_to_message_id=reply_to, + parse_mode=parse_mode, + reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton( + "See the full message", + url=url + )] + ]) + ) + + + async def send_patch_email( + self, + chat_id: Union[int, str], + doc: Union[str, BinaryIO], + caption: str, + reply_to: int, + url: str = None, + parse_mode: ParseMode = ParseMode.HTML + ) -> Message: + print("[send_patch_email]") + return await self.send_document( + chat_id=chat_id, + document=doc, + caption=caption, + reply_to_message_id=reply_to, + parse_mode=parse_mode, + reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton( + "See the full message", + url=url + )] + ]) + ) diff --git a/daemon/run.py b/daemon/run.py index 83b2cdb..1151ccd 100644 --- a/daemon/run.py +++ b/daemon/run.py @@ -8,7 +8,7 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler from scraper import BotMutexes from dotenv import load_dotenv from mysql import connector -from pyrogram import Client +from packages import DaemonClient from scraper import Scraper from scraper import Bot import os @@ -17,7 +17,7 @@ import os def main(): load_dotenv() - client = Client( + client = DaemonClient( "storage/EmailScraper", api_id=int(os.getenv("API_ID")), api_hash=os.getenv("API_HASH"), diff --git a/daemon/scraper/bot.py b/daemon/scraper/bot.py index 2392b61..93e633a 100644 --- a/daemon/scraper/bot.py +++ b/daemon/scraper/bot.py @@ -8,7 +8,7 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler from pyrogram.types import InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton from slugify import slugify -from pyrogram import Client +from packages import DaemonClient from scraper import Scraper from pyrogram import enums from . import utils @@ -32,12 +32,11 @@ class Bot(): ] TG_CHAT_IDS = [ - -1001394203410, - -1001673279485, + "kiizuah" ] - def __init__(self, client: Client, sched: AsyncIOScheduler, + def __init__(self, client: DaemonClient, sched: AsyncIOScheduler, scraper: Scraper, mutexes: BotMutexes, conn): self.client = client self.sched = sched @@ -123,8 +122,8 @@ class Bot(): reply_to, text, url) else: text = "#ml\n" + text - m = await self.__send_text_msg(tg_chat_id, reply_to, - text, url) + m = await self.__send_text_msg(tg_chat_id, text, + reply_to, url) self.db.insert_telegram(email_id, m.chat.id, m.id) for d, f in files: @@ -161,10 +160,10 @@ class Bot(): async def __send_patch_msg(self, mail, tg_chat_id, reply_to, text, url): print("[__send_patch_msg]") - tmp, fnm, caption, url = Bot.prepare_send_patch(mail, text, url) + tmp, doc, caption, url = Bot.prepare_send_patch(mail, text, url) ret = await self.__handle_telegram_floodwait( - self.____send_patch_msg, - *[tg_chat_id, reply_to, fnm, caption, url] + self.client.send_patch_email, + *[tg_chat_id, doc, caption, reply_to, url] ) Bot.clean_up_after_send_patch(tmp) return ret @@ -207,7 +206,7 @@ class Bot(): async def __send_text_msg(self, *args): return await self.__handle_telegram_floodwait( - self.____send_text_msg, + self.client.send_text_email, *args ) @@ -251,19 +250,3 @@ class Bot(): )] ]) ) - - - async def ____send_text_msg(self, tg_chat_id, reply_to, text, url): - print("[__send_text_msg]") - return await self.client.send_message( - tg_chat_id, - text, - reply_to_message_id=reply_to, - parse_mode=enums.ParseMode.HTML, - reply_markup=InlineKeyboardMarkup([ - [InlineKeyboardButton( - "See the full message", - url=url - )] - ]) - ) -- Muhammad Rizki