diff --git a/README.md b/README.md index c694afb..65a9df4 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,6 @@ JobPost ```env TELEGRAM_BOT_TOKEN=your_telegram_bot_token MONGO_URI=your_mongodb_connection_string - TELEGRAM_CHAT_ID=your_telegram_chat_id ``` 4. **Run the bot**: diff --git a/src/db/job_repository.py b/src/db/job_repository.py index 92c9daa..290031f 100644 --- a/src/db/job_repository.py +++ b/src/db/job_repository.py @@ -23,7 +23,6 @@ class JobRepository: self.logger = create_logger("JobRepository") mongo_client = MongoDB() self.collection = mongo_client.db["jobs"] - self.logger.info("Succeed connect to MongoDB") return cls._instance def find_by_id(self, job_id: str) -> Optional[JobPost]: diff --git a/src/db/monogo_db.py b/src/db/monogo_db.py index 3274217..0cbd12e 100644 --- a/src/db/monogo_db.py +++ b/src/db/monogo_db.py @@ -29,4 +29,5 @@ class MongoDB: "MONGO_DB_NAME environment variable is not set") self.db = client[database_name] + logger.info("Succeed connect to MongoDB") return cls._instance diff --git a/src/telegram_bot.py b/src/telegram_bot.py index ac1c176..6b5ed3d 100644 --- a/src/telegram_bot.py +++ b/src/telegram_bot.py @@ -1,4 +1,5 @@ import os +from typing import Union from dotenv import load_dotenv from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup @@ -20,7 +21,6 @@ class TelegramBot: def __init__(self): self._api_token = os.getenv("TELEGRAM_API_TOKEN") - self.chatId = os.getenv("TELEGRAM_CHAT_ID") self.bot = Bot(token=self._api_token) def get_reply_markup(self): @@ -35,7 +35,7 @@ class TelegramBot: return InlineKeyboardMarkup(keyboard) - async def send_job(self, job: JobPost): + async def send_job(self, chat_id: Union[int, str], job: JobPost): """ Send JobPost details to Telegram chat. """ @@ -47,18 +47,19 @@ class TelegramBot: reply_markup = self.get_reply_markup() try: - await self.bot.sendMessage(chat_id=self.chatId, text=message, reply_markup=reply_markup) + await self.bot.sendMessage(chat_id=chat_id, text=message, reply_markup=reply_markup) logger.info(f"Sent job to Telegram: {job.id}") except Exception as e: logger.error(f"Failed to send job to Telegram: {job.id}") logger.error(f"Error: {e}") - async def send_text(self, message: str, reply_markup: InlineKeyboardMarkup = None): + async def send_text(self, chat_id: Union[int, str], message: str, reply_markup: InlineKeyboardMarkup = None): """ Send Text han Message to Telegram chat. """ try: - await self.bot.sendMessage(chat_id=self.chatId, text=message, reply_markup=reply_markup) + + await self.bot.sendMessage(chat_id=chat_id, text=message, reply_markup=reply_markup) logger.info("Sent text message to Telegram") except Exception as e: logger.error("Failed to send text message to Telegram") @@ -77,12 +78,12 @@ class TelegramBot: 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): + async def set_message_reaction(self, chat_id: Union[int, str], message_id: int, emoji_reaction: ReactionEmoji): """ Send Test Message to Telegram chat. """ try: - await self.bot.set_message_reaction(chat_id=self.chatId, message_id=message_id, + await self.bot.set_message_reaction(chat_id=chat_id, message_id=message_id, reaction=emoji_reaction) logger.info(f"Reaction set to message: {message_id}") except Exception as e: diff --git a/src/telegram_handler/button_callback/button_callback_context.py b/src/telegram_handler/button_callback/button_callback_context.py index 0e17b5c..111c88d 100644 --- a/src/telegram_handler/button_callback/button_callback_context.py +++ b/src/telegram_handler/button_callback/button_callback_context.py @@ -51,7 +51,8 @@ class ButtonCallBackContext: elif self._data: job = self._job_repository.find_by_id(self._data) if job: - self._strategy = JobTitleStrategy(job) + chat_id = self._message.chat.id + self._strategy = JobTitleStrategy(chat_id,job) else: self._logger.error("Invalid enum value") return diff --git a/src/telegram_handler/button_callback/button_fire_strategy.py b/src/telegram_handler/button_callback/button_fire_strategy.py index dbe9584..70a4f76 100644 --- a/src/telegram_handler/button_callback/button_fire_strategy.py +++ b/src/telegram_handler/button_callback/button_fire_strategy.py @@ -27,4 +27,5 @@ class FireStrategy(ButtonStrategy): return job.applied = True self._job_repository.update(job) - await self._telegram_bot.set_message_reaction(self._message.message_id, self._emoji) + chat_id = self._message.chat.id + await self._telegram_bot.set_message_reaction(chat_id, self._message.message_id, self._emoji) diff --git a/src/telegram_handler/button_callback/button_job_title_strategy.py b/src/telegram_handler/button_callback/button_job_title_strategy.py index 3e414a3..a96bbf7 100644 --- a/src/telegram_handler/button_callback/button_job_title_strategy.py +++ b/src/telegram_handler/button_callback/button_job_title_strategy.py @@ -1,16 +1,19 @@ +from typing import Union + from jobspy import JobPost from telegram_bot import TelegramBot from telegram_handler.button_callback.button_strategy import ButtonStrategy class JobTitleStrategy(ButtonStrategy): - def __init__(self, job: JobPost) -> None: + def __init__(self, chat_id: Union[int, str], job: JobPost) -> None: """ Usually, the Context accepts a strategy through the constructor, but also provides a setter to change it at runtime. """ self._job = job + self._chat_id = chat_id self.telegram_bot = TelegramBot() async def execute(self): - await self.telegram_bot.send_job(self._job) + await self.telegram_bot.send_job(self._chat_id, self._job) diff --git a/src/telegram_handler/button_callback/button_poo_strategy.py b/src/telegram_handler/button_callback/button_poo_strategy.py index 930f082..be4fb39 100644 --- a/src/telegram_handler/button_callback/button_poo_strategy.py +++ b/src/telegram_handler/button_callback/button_poo_strategy.py @@ -11,10 +11,10 @@ class PooStrategy(ButtonStrategy): Usually, the Context accepts a strategy through the constructor, but also provides a setter to change it at runtime. """ - self.message = message + self._message = message self._emoji = ReactionEmoji.PILE_OF_POO self.telegram_bot = TelegramBot() async def execute(self): - await self.telegram_bot.set_message_reaction(self.message.message_id, self._emoji) - + chat_id = self._message.chat.id + await self.telegram_bot.set_message_reaction(chat_id, self._message.message_id, self._emoji) diff --git a/src/telegram_handler/telegram_default_handler.py b/src/telegram_handler/telegram_default_handler.py index 074631e..c0d5208 100644 --- a/src/telegram_handler/telegram_default_handler.py +++ b/src/telegram_handler/telegram_default_handler.py @@ -48,12 +48,13 @@ class TelegramDefaultHandler(TelegramHandler): async def handle(self, update: Update, context: ContextTypes.DEFAULT_TYPE): self.logger.info("start handling") - await self.telegram_bot.set_message_reaction( - update.message.message_id, ReactionEmoji.FIRE) + chat_id = update.message.chat.id + await self.telegram_bot.set_message_reaction(chat_id, + update.message.message_id, ReactionEmoji.FIRE) site_names = [site.name for site in self.sites_to_scrap] site_names_print = ", ".join(site_names) - await self.telegram_bot.send_text( - f"Start scarping: {site_names_print}") + await self.telegram_bot.send_text(chat_id, + f"Start scarping: {site_names_print}") filtered_out_jobs, jobs = scrape_jobs( site_name=self.sites_to_scrap, search_term=self.search_term, @@ -61,17 +62,17 @@ class TelegramDefaultHandler(TelegramHandler): results_wanted=200, hours_old=48, filter_by_title=self.title_filters, - country_indeed = 'israel' + country_indeed='israel' ) self.logger.info(f"Found {len(jobs)} jobs") self.jobRepository.insert_many_if_not_found(filtered_out_jobs) old_jobs, new_jobs = self.jobRepository.insert_many_if_not_found(jobs) for newJob in new_jobs: - await self.telegram_bot.send_job(newJob) + await self.telegram_bot.send_job(chat_id, newJob) if filtered_out_jobs: - await self.telegram_bot.send_text("filtered by title: ", + await self.telegram_bot.send_text(chat_id, "filtered by title: ", reply_markup=map_jobs_to_keyboard(filtered_out_jobs)) self.logger.info(f"Found {len(old_jobs)} old jobs") - await self.telegram_bot.send_text( - f"Finished scarping: {site_names_print}") + await self.telegram_bot.send_text(chat_id, + f"Finished scarping: {site_names_print}") self.logger.info("finished handling")