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 logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from telegram import Update
|
from telegram import Update, user
|
||||||
from telegram.ext import CallbackContext, CommandHandler, Updater
|
from telegram.ext import (CallbackContext, CommandHandler, MessageHandler,
|
||||||
|
Updater)
|
||||||
|
|
||||||
from models import Link
|
from models import Link
|
||||||
|
|
||||||
|
|
@ -15,6 +17,8 @@ load_dotenv()
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
logging.basicConfig(level=logging.DEBUG,
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
|
link_regex = re.compile(
|
||||||
|
'((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)', re.DOTALL)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
@ -31,6 +35,7 @@ class Bot:
|
||||||
self.updater = Updater(token=self.settings.token, use_context=True)
|
self.updater = Updater(token=self.settings.token, use_context=True)
|
||||||
self.dispatcher = self.updater.dispatcher
|
self.dispatcher = self.updater.dispatcher
|
||||||
self._register_commands()
|
self._register_commands()
|
||||||
|
self._register_handlers()
|
||||||
|
|
||||||
def _register_commands(self):
|
def _register_commands(self):
|
||||||
for f in dir(self):
|
for f in dir(self):
|
||||||
|
|
@ -38,6 +43,11 @@ class Bot:
|
||||||
self.dispatcher.add_handler(
|
self.dispatcher.add_handler(
|
||||||
CommandHandler(f[4:], getattr(self, f)))
|
CommandHandler(f[4:], getattr(self, f)))
|
||||||
|
|
||||||
|
def _register_handlers(self):
|
||||||
|
self.dispatcher.add_handler(MessageHandler(
|
||||||
|
filters=None,
|
||||||
|
callback=self.message))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def db(self):
|
def db(self):
|
||||||
return sqlite3.connect(self.settings.db, detect_types=sqlite3.PARSE_DECLTYPES)
|
return sqlite3.connect(self.settings.db, detect_types=sqlite3.PARSE_DECLTYPES)
|
||||||
|
|
@ -75,6 +85,23 @@ class Bot:
|
||||||
links = Link.get_unread(db, user_id)
|
links = Link.get_unread(db, user_id)
|
||||||
pprint(list(links))
|
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):
|
def run(self):
|
||||||
self.updater.start_polling()
|
self.updater.start_polling()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
from os import read
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
@ -32,7 +31,7 @@ class Link:
|
||||||
return cls(
|
return cls(
|
||||||
id=id,
|
id=id,
|
||||||
link=link,
|
link=link,
|
||||||
user_id=user_id,
|
user_id=useredid,
|
||||||
read_at=read_at,
|
read_at=read_at,
|
||||||
added_at=added_at
|
added_at=added_at
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue