RAFAEL/src/rafael/__init__.py

87 lines
2.2 KiB
Python
Raw Normal View History

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