from datetime import datetime from typing import Optional, Tuple from telegram.ext import Updater, CommandHandler, CallbackContext from telegram import Update, ParseMode import os import logging from dotenv import load_dotenv load_dotenv() logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') class Bot: def __init__(self, token, chat, forward_to=None): self.chat = chat self.forward_to = forward_to or [] self.updater = Updater(token=token, use_context=True) self.dispatcher = self.updater.dispatcher for f in dir(self): if f.startswith("cmd_"): self.dispatcher.add_handler( CommandHandler(f[4:], getattr(self, f))) def cmd_start(self, update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=f'Hi! effective_chat.id={update.effective_chat.id}') def send_event(self, date: datetime, header: str, description: str, location: str, latlong: Optional[Tuple[float, float]] = None, is_new: bool = True): messages = [] d = date.strftime("%Y-%m-%d %H:%M") text = f"""\ *{header}* _{d}, {location}_ {description} """ m = self.updater.bot.send_message( self.chat, text=text, parse_mode=ParseMode.MARKDOWN) messages.append(m) if latlong is not None: m = self.updater.bot.send_location( self.chat, latitude=latlong[0], longitude=latlong[1]) messages.append(m) m = self.updater.bot.send_poll( self.chat, f'Wpadasz? ({header})', ['Będę', 'Nie będę', '🍆'], is_anonymous=False, allows_multiple_answers=False, ) messages.append(m) for chat in self.forward_to: for msg in messages: msg.forward(chat) def cmd_test(self, update: Update, context: CallbackContext): context.bot.send_message(chat_id=self.chat, text="Test") self.send_event(datetime.now(), "Header", "Description", "Szynowa 18", (51.060938, 17.057193)) def cmd_location(self, update: Update, context: CallbackContext): print(type(update)) context.bot.send_location( update.effective_chat.id, 51, 19 ) def run(self): self.updater.start_polling() if __name__ == '__main__': b = Bot( token=os.environ['SZYNOWO_TOKEN'], chat=os.environ['SZYNOWO_CHAT'], forward_to=[s.strip() for s in os.environ.get( 'SZYNOWO_FORWARD_TO', '').split(',')], ) b.run()