bot/main.py

84 lines
2.7 KiB
Python

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()