Slixfeed/slixfeed/__main__.py

145 lines
4.6 KiB
Python
Raw Normal View History

2023-07-16 17:23:10 +02:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FIXME
1) Check feed duplication on runtime.
When feed is valid and is not yet in the database it is
posible to send a batch which would result in duplication.
Consequently, it might result in database lock error upon
feed removal attempt
TODO
1) SQL prepared statements;
2) Machine Learning for scrapping Title, Link, Summary and Timstamp;
2023-12-24 19:37:05 +01:00
Scrape element </article> (example: Liferea)
http://intertwingly.net/blog/
https://www.brandenburg.de/
3) Set MUC subject
Feeds which entries are to be set as groupchat subject.
Perhaps not, as it would require to check every feed for this setting.
2023-12-24 19:37:05 +01:00
Maybe a separate bot;
4) Support categories;
5) XMPP commands;
6) Bot as service;
7) OMEMO;
8) Logging;
2023-12-24 19:37:05 +01:00
https://docs.python.org/3/howto/logging.html
9) Readability
2023-12-24 19:37:05 +01:00
See project /buriy/python-readability
9.1) IDEA: Bot to display Title and Excerpt
(including sending a PDF version of it) of posted link
2024-01-09 16:53:19 +01:00
10) Fetch summary from URL, instead of storing summary, or
Store 5 upcoming summaries.
This would help making the database files smaller.
2023-11-15 15:02:39 +01:00
2024-01-09 16:53:19 +01:00
11) Support protocol Gopher
2023-12-24 19:37:05 +01:00
See project /michael-lazar/pygopherd
See project /gopherball/gb
2023-11-15 15:02:39 +01:00
2024-01-09 16:53:19 +01:00
12) Support ActivityPub @person@domain (see Tip Of The Day).
2024-01-09 16:53:19 +01:00
13) Tip Of The Day.
Did you know that you can follow you favorite Mastodon feeds by just
sending the URL address?
Supported fediverse websites are:
Akkoma, Firefish (Calckey), Friendica, HubZilla,
Mastodon, Misskey, Pixelfed, Pleroma, Socialhome, Soapbox.
2024-01-09 16:53:19 +01:00
14) Brand: News Broker, Newsman, Newsdealer, Laura Harbinger
2024-01-09 16:53:19 +01:00
15) See project /offpunk/offblocklist.py
2023-12-24 19:37:05 +01:00
2024-01-09 16:53:19 +01:00
16) Search messages of government regulated publishers, and promote other sources.
2023-12-24 19:37:05 +01:00
Dear reader, we couldn't get news from XYZ as they don't provide RSS feeds.
However, you might want to get news from (1) (2) and (3) instead!
2024-01-09 16:53:19 +01:00
17) Make the program portable (directly use the directory assets) -- Thorsten
2024-01-14 19:05:12 +01:00
18) The operator account will be given reports from the bot about its
activities every X minutes.
When a suspicious activity is detected, it will be reported immediately.
"""
2023-07-16 17:23:10 +02:00
# vars and their meanings:
# jid = Jabber ID (XMPP)
# res = response (HTTP)
from argparse import ArgumentParser
import configparser
# import filehandler
# from slixfeed.file import get_default_confdir
2023-07-16 17:23:10 +02:00
from getpass import getpass
import logging
import os
2023-07-16 17:23:10 +02:00
# from datetime import date
# import time
2023-07-16 17:23:10 +02:00
# from eliot import start_action, to_file
# # to_file(open("slixfeed.log", "w"))
# # with start_action(action_type="set_date()", jid=jid):
# # with start_action(action_type="message()", msg=msg):
2023-07-16 17:23:10 +02:00
#import slixfeed.irchandler
from slixfeed.config import get_value
from slixfeed.xmpp.client import Slixfeed
#import slixfeed.matrixhandler
2023-07-16 17:23:10 +02:00
class Jabber:
def __init__(self, jid, password, nick):
# Setup the Slixfeed and register plugins. Note that while plugins may
# have interdependencies, the order in which you register them does
# not matter.
xmpp = Slixfeed(jid, password, nick)
xmpp.register_plugin('xep_0004') # Data Forms
xmpp.register_plugin('xep_0030') # Service Discovery
xmpp.register_plugin('xep_0045') # Multi-User Chat
xmpp.register_plugin('xep_0048') # Bookmarks
xmpp.register_plugin('xep_0060') # Publish-Subscribe
# xmpp.register_plugin('xep_0065') # SOCKS5 Bytestreams
xmpp.register_plugin('xep_0066') # Out of Band Data
xmpp.register_plugin('xep_0071') # XHTML-IM
xmpp.register_plugin('xep_0199', {'keepalive': True}) # XMPP Ping
xmpp.register_plugin('xep_0249') # Multi-User Chat
xmpp.register_plugin('xep_0363') # HTTP File Upload
xmpp.register_plugin('xep_0402') # PEP Native Bookmarks
# proxy_enabled = get_value("accounts", "XMPP Connect", "proxy_enabled")
# if proxy_enabled == '1':
# values = get_value("accounts", "XMPP Connect", [
# "proxy_host",
# "proxy_port",
# "proxy_username",
# "proxy_password"
# ])
# print("Proxy is enabled: {}:{}".format(values[0], values[1]))
# xmpp.use_proxy = True
# xmpp.proxy_config = {
# 'host': values[0],
# 'port': values[1],
# 'username': values[2],
# 'password': values[3]
# }
# proxy = {'socks5': (values[0], values[1])}
# xmpp.proxy = {'socks5': ('localhost', 9050)}
# Connect to the XMPP server and start processing XMPP stanzas.
xmpp.connect()
xmpp.process()