mirror of https://github.com/Bunsly/JobSpy
removed chat id env variable
parent
4fb2b2dbb7
commit
f83e875171
|
@ -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**:
|
||||
|
|
|
@ -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]:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue