forked from sch/Slixfeed
Improve listing of commands
This commit is contained in:
parent
4da2a28184
commit
6883eb6615
3 changed files with 258 additions and 4 deletions
|
@ -49,6 +49,7 @@ from slixfeed.url import (
|
|||
trim_url
|
||||
)
|
||||
import slixfeed.xmpp.bookmark as bookmark
|
||||
import tomllib
|
||||
from urllib import error
|
||||
from urllib.parse import parse_qs, urlsplit
|
||||
import xml.etree.ElementTree as ET
|
||||
|
@ -81,6 +82,27 @@ except:
|
|||
"Package readability was not found.\n"
|
||||
"Arc90 Lab algorithm is disabled.")
|
||||
|
||||
def commands(section=None, command=None):
|
||||
config_dir = config.get_default_config_directory()
|
||||
with open(config_dir + "/commands.toml", mode="rb") as commands:
|
||||
cmds = tomllib.load(commands)
|
||||
if command and section:
|
||||
command_name = '`', cmds[section][command], '`\n'
|
||||
command_info = cmds[section][command + '_info']
|
||||
if isinstance(command_info, list):
|
||||
command_info = '\n'.join(command_info)
|
||||
cmd_list = [command_name, command_info]
|
||||
elif section:
|
||||
cmd_list = []
|
||||
for cmd in cmds[section]:
|
||||
if not '_info' in cmd:
|
||||
cmd_list.extend([cmd])
|
||||
else:
|
||||
cmd_list = []
|
||||
for cmd in cmds:
|
||||
cmd_list.extend([cmd])
|
||||
return cmd_list
|
||||
|
||||
|
||||
def log_to_markdown(timestamp, filename, jid, message):
|
||||
"""
|
||||
|
|
211
slixfeed/assets/commands.toml
Normal file
211
slixfeed/assets/commands.toml
Normal file
|
@ -0,0 +1,211 @@
|
|||
[action]
|
||||
url = "<url>"
|
||||
url_info = "Add <url> to subscription list."
|
||||
add = "add <url> TITLE"
|
||||
add_info = "Add <url> to subscription list (without validity check)."
|
||||
next = "next N"
|
||||
next_info = "Send N next updates."
|
||||
|
||||
[backup]
|
||||
opml = "export opml"
|
||||
opml_info = "Send an OPML file with feeds."
|
||||
html = "backup news html"
|
||||
html_info = "Send an HTML formatted file of your news items."
|
||||
md = "backup news md"
|
||||
md_info = "Send a Markdown file of your news items."
|
||||
text = "backup news text"
|
||||
text_info = "Send a Plain Text file of your news items."
|
||||
|
||||
[custom]
|
||||
new = "new"
|
||||
new_info = "Send only new items of newly added feeds."
|
||||
old = "old"
|
||||
old_info = "Send all items of newly added feeds."
|
||||
|
||||
[document]
|
||||
get = "get <id> <type>"
|
||||
get_info = [
|
||||
"Send an article as file. Specify <id> and <type>.",
|
||||
"Supported types are HTML, MD and PDF (default)."
|
||||
]
|
||||
|
||||
[filter]
|
||||
allow = "allow [+|-]"
|
||||
allow_info = [
|
||||
"Keywords to allow",
|
||||
"comma-separated keywords",
|
||||
"'+' appends to, '-' removes from."
|
||||
]
|
||||
deny = "deny [+|-]"
|
||||
deny_info = [
|
||||
"Keywords to block",
|
||||
"comma-separated keywords",
|
||||
"'+' appends to, '-' removes from."
|
||||
]
|
||||
clear_allow = "filter clear allow"
|
||||
clear_allow_info = "Reset allow list."
|
||||
clear_deny = "filter clear deny"
|
||||
clear_deny_info = "Reset deny list."
|
||||
|
||||
[groupchat]
|
||||
join = "join <muc>"
|
||||
join_info = "Join specified groupchat."
|
||||
|
||||
[help]
|
||||
commands = "commands"
|
||||
commands_info = "Print list of commands."
|
||||
help = "help"
|
||||
help_info = "Print this help manual."
|
||||
info = "info"
|
||||
info_info = "Print information page."
|
||||
support = "support"
|
||||
support_info = "Join xmpp:slixfeed@chat.woodpeckersnest.space?join"
|
||||
|
||||
[info]
|
||||
about = [
|
||||
"Slixfeed aims to be an easy to use and fully-featured news",
|
||||
"aggregator bot for XMPP. It provides a convenient access to Blogs,",
|
||||
"Fediverse and News websites along with filtering functionality.",
|
||||
"\n",
|
||||
"Slixfeed is primarily designed for XMPP (aka Jabber).",
|
||||
"Visit https://xmpp.org/software/ for more information.",
|
||||
"\n",
|
||||
"XMPP is the Extensible Messaging and Presence Protocol, a set",
|
||||
"of open technologies for instant messaging, presence, multi-party",
|
||||
"chat, voice and video calls, collaboration, lightweight",
|
||||
"middleware, content syndication, and generalized routing of XML",
|
||||
"data.",
|
||||
"\n",
|
||||
"Visit https://xmpp.org/about/ for more information on the XMPP",
|
||||
"protocol.",
|
||||
]
|
||||
platforms = [
|
||||
"Supported prootcols are IRC, Matrix, Tox and XMPP.",
|
||||
"For the best experience, we recommend you to use XMPP."
|
||||
]
|
||||
filetypes = [
|
||||
"Supported filetypes: Atom, JSON, RDF, RSS and XML."
|
||||
]
|
||||
protocols = [
|
||||
"Supported protocols: Dat, FTP, Gemini, Gopher, HTTP and IPFS."
|
||||
]
|
||||
authors = [
|
||||
"Laura Lapina",
|
||||
"Schimon Zackary"
|
||||
]
|
||||
thanks = [
|
||||
# consultants and testers
|
||||
"Alixander Court (Utah)",
|
||||
"habnabit_ from #python on irc.libera.chat",
|
||||
"imattau (atomtopubsub)",
|
||||
"Jaussoin Timothée (Movim, France)",
|
||||
"magicfelix",
|
||||
"Simone \"roughnecks\" Canaletti (WoodpeckersNest.space, Italy)",
|
||||
"Strix from loqi.im",
|
||||
# gajim
|
||||
"Denis Fomin (Gajim, Russia)",
|
||||
"Emmanuel Gil Peyrot (Poezio, France)",
|
||||
"Yann Leboulanger (Gajim, France)",
|
||||
# intro
|
||||
"Christian Dersch (SalixOS)",
|
||||
"Cyrille Pontvieux (SalixOS, France)",
|
||||
"Dimitris Tzemos (SalixOS, Greece)",
|
||||
"George Vlahavas (SalixOS, Greece)",
|
||||
"Pierrick Le Brun (SalixOS, France)",
|
||||
"Raphael Groner (Fedora, Germany)",
|
||||
"Thorsten Mühlfelder (SalixOS, Germany)",
|
||||
# openfire
|
||||
"Guus der Kinderen from IgniteRealtime.org (Openfire, Netherlands)",
|
||||
# swift
|
||||
"Kevin Smith from Isode (Swift, Wales# xmpp)",
|
||||
"Remko Tronçon (Swift, Germany)",
|
||||
# xmpp
|
||||
"Florent Le Coz (Poezio, France)",
|
||||
"Maxime Buquet (slixmpp, France)",
|
||||
"Mathieu Pasquet (slixmpp, France)",
|
||||
]
|
||||
license = [
|
||||
"Slixfeed is free software; you can redistribute it and/or",
|
||||
"modify it under the terms of the MIT License.",
|
||||
"\n",
|
||||
"Slixfeed is distributed in the hope that it will be useful,",
|
||||
"but WITHOUT ANY WARRANTY; without even the implied warranty of",
|
||||
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the",
|
||||
"MIT License for more details.",
|
||||
]
|
||||
note = [
|
||||
"You can run Slixfeed on your own computer, server, and",
|
||||
"even on a Linux phone (i.e. Droidian, Kupfer, Mobian, NixOS,",
|
||||
"postmarketOS). You can also use Termux.",
|
||||
"\n",
|
||||
"All you need is one of the above and an XMPP account to",
|
||||
"connect Slixfeed to.",
|
||||
]
|
||||
resources = [
|
||||
"Slixfeed",
|
||||
"https://gitgud.io/sjehuda/slixfeed",
|
||||
"Slixmpp",
|
||||
"https://slixmpp.readthedocs.io/",
|
||||
"feedparser",
|
||||
"https://pythonhosted.org/feedparser",
|
||||
]
|
||||
|
||||
[mastership]
|
||||
demaster = "demaster NICKNAME"
|
||||
demaster_info = "Remove master privilege."
|
||||
mastership = "mastership NICKNAME"
|
||||
mastership_info = "Add master privilege."
|
||||
ownership = "ownership NICKNAME"
|
||||
ownership_info = "Set new owner."
|
||||
|
||||
[message]
|
||||
interval = "interval <num>"
|
||||
interval_info = "Set interval update to every <num> minutes."
|
||||
length = "length"
|
||||
length_info = "Set maximum length of news item description. (0 for no limit)"
|
||||
quantum = "quantum <num>"
|
||||
quantum_info = "Set <num> amount of updates per interval."
|
||||
|
||||
[modification]
|
||||
remove = "remove <id>"
|
||||
remove_info = "Remove feed of <id> from subscription list."
|
||||
disable = "disable <id>"
|
||||
disable_info = "Disable updates for feed of <id>."
|
||||
enable = "enable <id>"
|
||||
enable_info = "Enable updates for feed of <id>."
|
||||
reset = "reset"
|
||||
reset_info = "Mark all entries as read and remove all archived entries"
|
||||
reset_url = "reset <url>"
|
||||
reset_url_info = "Mark entries of <url> as read and remove all archived entries of <url>."
|
||||
start = "start"
|
||||
start_info = "Enable bot and send updates."
|
||||
stop = "stop"
|
||||
stop_info = "Disable bot and stop updates."
|
||||
|
||||
[preview]
|
||||
read = "read <url>"
|
||||
read_info = "Display most recent 20 titles of given <url>."
|
||||
read_num = "read <url> <n>"
|
||||
read_num_info = "Display specified entry number from given <url>."
|
||||
|
||||
[search]
|
||||
feeds = "feeds"
|
||||
feeds_info = "List all subscriptions."
|
||||
feeds_keyword = "feeds <text>"
|
||||
feeds_keyword_info = "Search subscriptions by given <text>."
|
||||
search = "search <text>"
|
||||
search_info = "Search news items by given <text>."
|
||||
recent = "recent <num>"
|
||||
recent_info = "List recent <num> news items (up to 50 items)."
|
||||
|
||||
[statistics]
|
||||
analyses = "analyses"
|
||||
analyses_info = "Show report and statistics of feeds."
|
||||
obsolete = "obsolete"
|
||||
obsolete_info = "List feeds that are not available."
|
||||
unread = "unread"
|
||||
unread_info = "Print number of unread news items."
|
||||
|
||||
[token]
|
||||
activate = "activate CODE"
|
||||
activate_info = "Activate given token to command bot."
|
|
@ -212,6 +212,7 @@ async def message(self, message):
|
|||
logging.debug([str(message['from']), ':', message_text])
|
||||
|
||||
# Support private message via groupchat
|
||||
# Fail. See https://codeberg.org/poezio/slixmpp/issues/3506
|
||||
if message['type'] == 'chat' and message.get_plugin('muc', check=True):
|
||||
jid_bare = message['from'].bare
|
||||
jid_full = str(message['from'])
|
||||
|
@ -239,11 +240,31 @@ async def message(self, message):
|
|||
# 'Type: breakpoint.'
|
||||
# )
|
||||
# send_reply_message(self, message, response)
|
||||
case 'commands':
|
||||
response = manual.print_cmd()
|
||||
send_reply_message(self, message, response)
|
||||
case 'help':
|
||||
response = manual.print_help()
|
||||
command_list = '`, `'.join(action.commands())
|
||||
response = (
|
||||
'Available command topics:\n`', command_list,
|
||||
'`\nSend `help command_topic` for instructions.')
|
||||
send_reply_message(self, message, response)
|
||||
case _ if message_lowercase.startswith('help'):
|
||||
command = message_text[5:]
|
||||
command = command.split(' ')
|
||||
if len(command) == 2:
|
||||
command_root = command[0]
|
||||
command_name = command[1]
|
||||
command_list = ''.join(action.commands(
|
||||
section=command_root, command=command_name))
|
||||
response = (command_list)
|
||||
elif len(command) == 1:
|
||||
command = command[0]
|
||||
command_list = '`, `'.join(action.commands(command))
|
||||
response = (
|
||||
'Available commands:\n`', command_list,
|
||||
'`\nSend `help {} command_name` for instructions.'
|
||||
.format(command))
|
||||
else:
|
||||
response = (
|
||||
'Invalid. Enter command topic or command topic and name')
|
||||
send_reply_message(self, message, response)
|
||||
case 'info':
|
||||
response = manual.print_info()
|
||||
|
|
Loading…
Reference in a new issue