import time import dotenv import os import click import dokuwiki import requests from bs4 import BeautifulSoup from flask import Flask from telegram import Update from telegram.ext import Updater, MessageHandler, CommandHandler, Filters, CallbackContext from datetime import datetime app = Flask("rafael") RAFAEL_UA = "RAFAEL/0.1" class RafaelBot: def __init__(self): self.updater = Updater(os.getenv("TELEGRAM_API_KEY")) self.dispatcher = self.updater.dispatcher self.dispatcher.add_handler(MessageHandler(Filters.entity('url'), self.handle_url)) try: self.wiki = dokuwiki.DokuWiki(os.getenv('DOKU_URL'), os.getenv('DOKU_USER'), os.getenv('DOKU_PASS'), cookieAuth=True) except (dokuwiki.DokuWikiError, Exception) as err: print('unable to connect: %s' % err) def get_title(self, url): r = requests.get(url, headers={"User-Agent": RAFAEL_UA}) bs = BeautifulSoup(r.content) return bs.title.string def handle_url(self, update: Update, context: CallbackContext) -> None: """Echo the user message.""" update.message.reply_text("Storing URL...") update_body = "" for ent in update.message.entities: if ent.type == "url": url = update.message.text[ent.offset:ent.length] try: title = self.get_title(url) link = f"[[{url}|{title}]]" except: link = "{url}" added_ds = f"(retrieved at: {datetime.now().strftime('%d/%m/%Y, %H:%M:%S')})" update_body += f" * {link} {added_ds}" try: self.wiki.pages.append("bookmarks/inbox", f"\n\n{update_body}") update.message.reply_text(f"Updated bookmarks page: {os.getenv('DOKU_URL')}bookmarks/inbox") except (dokuwiki.DokuWikiError) as err: update.message.reply_text(f"Failed to store url: {err}") def run(self): self.updater.start_polling() @app.route("/", methods=['GET']) def index(): return "hello" def main(): dotenv.load_dotenv() bot = RafaelBot() bot.run() # app.run() if __name__ == "__main__": main()