82 lines
2.0 KiB
Python
82 lines
2.0 KiB
Python
import logging
|
|
import os
|
|
import sqlite3
|
|
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
|
|
from dotenv import load_dotenv
|
|
from telegram import Update
|
|
from telegram.ext import CallbackContext, CommandHandler, Updater
|
|
|
|
from models import Link
|
|
|
|
load_dotenv()
|
|
|
|
logging.basicConfig(level=logging.DEBUG,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
|
|
|
|
@dataclass
|
|
class BotSettings:
|
|
token: str
|
|
db: str
|
|
|
|
|
|
class Bot:
|
|
def __init__(self, settings: BotSettings):
|
|
self.settings = settings
|
|
self._init_db()
|
|
|
|
self.updater = Updater(token=self.settings.token, use_context=True)
|
|
self.dispatcher = self.updater.dispatcher
|
|
self._register_commands()
|
|
|
|
def _register_commands(self):
|
|
for f in dir(self):
|
|
if f.startswith("cmd_"):
|
|
self.dispatcher.add_handler(
|
|
CommandHandler(f[4:], getattr(self, f)))
|
|
|
|
@property
|
|
def db(self):
|
|
return sqlite3.connect(self.settings.db)
|
|
|
|
def _init_db(self):
|
|
with self.db as db:
|
|
cur = db.cursor()
|
|
cur.execute("""
|
|
CREATE TABLE IF NOT EXISTS links (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
link TEXT,
|
|
user_id TEXT,
|
|
read_at DATETIME,
|
|
added_at DATETIME
|
|
);
|
|
""")
|
|
|
|
def cmd_start(self, update: Update, context: CallbackContext):
|
|
context.bot.send_message(chat_id=update.effective_chat.id, text='Hi!')
|
|
# TODO: timezones
|
|
# TODO: ask to set time or something
|
|
|
|
def cmd_test(self, update: Update, context: CallbackContext):
|
|
l = Link(
|
|
link="2137",
|
|
user_id="papiez"
|
|
)
|
|
with self.db as db:
|
|
l.create(db)
|
|
|
|
def run(self):
|
|
self.updater.start_polling()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
s = BotSettings(
|
|
token=os.environ['READLATER_TOKEN'],
|
|
db=os.environ.get('READLATER_DB', './db.sqlite3'),
|
|
)
|
|
b = Bot(s)
|
|
|
|
b.run()
|