From 9c18c2e936f321ab2488619de1e96b6add18601a Mon Sep 17 00:00:00 2001 From: Yariv Menachem Date: Mon, 30 Dec 2024 16:01:11 +0200 Subject: [PATCH] Added reaction to command and messages for start and finish --- src/jobspy/db/job_repository.py | 4 +++ src/telegram_bot.py | 25 +++++++++++++++---- .../telegram_default_handler.py | 7 ++++++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/jobspy/db/job_repository.py b/src/jobspy/db/job_repository.py index 33ce06f..ede902b 100644 --- a/src/jobspy/db/job_repository.py +++ b/src/jobspy/db/job_repository.py @@ -11,6 +11,10 @@ load_dotenv() class JobRepository: + def __new__(cls): + if not hasattr(cls, 'instance'): + cls.instance = super(JobRepository, cls).__new__(cls) + return cls.instance def __init__(self, database_name: str = None): self.logger = create_logger("JobRepository") diff --git a/src/telegram_bot.py b/src/telegram_bot.py index 21bad57..a5e7dff 100644 --- a/src/telegram_bot.py +++ b/src/telegram_bot.py @@ -12,6 +12,10 @@ logger = create_logger("TelegramBot") class TelegramBot: + def __new__(cls): + if not hasattr(cls, 'instance'): + cls.instance = super(TelegramBot, cls).__new__(cls) + return cls.instance def __init__(self): self._api_token = os.getenv("TELEGRAM_API_TOKEN") @@ -35,10 +39,10 @@ class TelegramBot: Send JobPost details to Telegram chat. """ message = f"Job ID: {job.id}\n" \ - f"Job Title: {job.title}\n" \ - f"Company: {job.company_name}\n" \ - f"Location: {job.location.display_location()}\n" \ - f"Link: {job.job_url}\n" + f"Job Title: {job.title}\n" \ + f"Company: {job.company_name}\n" \ + f"Location: {job.location.display_location()}\n" \ + f"Link: {job.job_url}\n" reply_markup = self.get_reply_markup() try: @@ -48,6 +52,17 @@ class TelegramBot: logger.error(f"Failed to send job to Telegram: {job.id}") logger.error(f"Error: {e}") + async def send_text(self, message: str): + """ + Send Text han Message to Telegram chat. + """ + try: + await self.bot.sendMessage(chat_id=self.chatId, text=message) + logger.info("Sent text message to Telegram") + except Exception as e: + logger.error("Failed to send text message to Telegram") + logger.error(f"Error: {e}") + async def send_test_message(self): """ Send Test Message to Telegram chat. @@ -58,7 +73,7 @@ class TelegramBot: await self.bot.sendMessage(chat_id=self.chatId, text=message, reply_markup=reply_markup) logger.info("Sent test message to Telegram") except Exception as e: - logger.error("Failed o send test message to Telegram") + logger.error("Failed to send test message to Telegram") logger.error(f"Error: {e}") async def set_message_reaction(self, message_id: int, emoji_reaction: ReactionEmoji): diff --git a/src/telegram_handler/telegram_default_handler.py b/src/telegram_handler/telegram_default_handler.py index 9769597..ab5a0bb 100644 --- a/src/telegram_handler/telegram_default_handler.py +++ b/src/telegram_handler/telegram_default_handler.py @@ -1,4 +1,5 @@ from telegram import Update +from telegram.constants import ReactionEmoji from telegram.ext import ( ContextTypes, ) @@ -26,6 +27,10 @@ class TelegramDefaultHandler(TelegramHandler): async def handle(self, update: Update, context: ContextTypes.DEFAULT_TYPE): self.logger.info("start handling") + await self.telegram_bot.send_text( + f"Start scarping: {self.sites_to_scrap[0].name}") + await self.telegram_bot.set_message_reaction( + update.message.message_id, ReactionEmoji.FIRE) jobs = scrape_jobs( site_name=self.sites_to_scrap, search_term=self.search_term, @@ -38,4 +43,6 @@ class TelegramDefaultHandler(TelegramHandler): new_jobs = self.jobRepository.insertManyIfNotFound(jobs) for newJob in new_jobs: await self.telegram_bot.send_job(newJob) + await self.telegram_bot.send_text( + f"Finished scarping: {self.sites_to_scrap[0].name}") self.logger.info("finished handling")