extract links from messages
This commit is contained in:
parent
4c678da1fe
commit
3faeabb788
33
main.py
33
main.py
|
|
@ -1,13 +1,15 @@
|
|||
from pprint import pprint
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import sqlite3
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from pprint import pprint
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from telegram import Update
|
||||
from telegram.ext import CallbackContext, CommandHandler, Updater
|
||||
from telegram import Update, user
|
||||
from telegram.ext import (CallbackContext, CommandHandler, MessageHandler,
|
||||
Updater)
|
||||
|
||||
from models import Link
|
||||
|
||||
|
|
@ -15,6 +17,8 @@ load_dotenv()
|
|||
|
||||
logging.basicConfig(level=logging.DEBUG,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
link_regex = re.compile(
|
||||
'((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)', re.DOTALL)
|
||||
|
||||
|
||||
@dataclass
|
||||
|
|
@ -31,6 +35,7 @@ class Bot:
|
|||
self.updater = Updater(token=self.settings.token, use_context=True)
|
||||
self.dispatcher = self.updater.dispatcher
|
||||
self._register_commands()
|
||||
self._register_handlers()
|
||||
|
||||
def _register_commands(self):
|
||||
for f in dir(self):
|
||||
|
|
@ -38,6 +43,11 @@ class Bot:
|
|||
self.dispatcher.add_handler(
|
||||
CommandHandler(f[4:], getattr(self, f)))
|
||||
|
||||
def _register_handlers(self):
|
||||
self.dispatcher.add_handler(MessageHandler(
|
||||
filters=None,
|
||||
callback=self.message))
|
||||
|
||||
@property
|
||||
def db(self):
|
||||
return sqlite3.connect(self.settings.db, detect_types=sqlite3.PARSE_DECLTYPES)
|
||||
|
|
@ -75,6 +85,23 @@ class Bot:
|
|||
links = Link.get_unread(db, user_id)
|
||||
pprint(list(links))
|
||||
|
||||
def _natural_count(self, n, singular, plural):
|
||||
if abs(n) == 1:
|
||||
return f"{n} {singular}"
|
||||
return f"{n} {plural}"
|
||||
|
||||
def message(self, update: Update, context: CallbackContext):
|
||||
user_id = update.effective_user.id
|
||||
links = re.findall(link_regex, update.message.text)
|
||||
with self.db as db:
|
||||
for link in links:
|
||||
l = Link(
|
||||
user_id=user_id,
|
||||
link=link[0],
|
||||
)
|
||||
l.create(db)
|
||||
context.bot.send_message(
|
||||
update.effective_chat.id, f"Added {self._natural_count(len(links), 'link', 'links')} to your list.")
|
||||
|
||||
def run(self):
|
||||
self.updater.start_polling()
|
||||
|
|
|
|||
Loading…
Reference in New Issue