84 lines
2.7 KiB
Python
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()
|