]> git.aero2k.de Git - urlbot-v3.git/log
urlbot-v3.git
6 weeks agoReplace IsDown's third-party scraping with a direct reachability check
Thorsten [Sat, 18 Jul 2026 10:43:28 +0000 (12:43 +0200)]
Replace IsDown's third-party scraping with a direct reachability check

isup.me now serves a Cloudflare bot-challenge page to non-browser clients
(confirmed live), so scraping it can never work again regardless of the
earlier words[0]/words[1] fix. Checked two alternatives from munin:
downforeveryoneorjustme.com is also Cloudflare-gated, and
isitdownrightnow.com, while not gated, only exposes status via a CSS class
in a ping-history table with ambiguous boilerplate text ("is up"/"is down"
appear on every page regardless of actual status) - too fragile to scrape
reliably either.

Instead of depending on any third party's HTML, do the obvious thing: a
DNS lookup to distinguish "doesn't exist" from "unreachable", then a
direct request to the target with a timeout. Simpler, more reliable, and
checks the actual target instead of trusting a third party's cache.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix IsDown off-by-one bug; extend the smoke test to full plugin coverage
Thorsten [Sat, 18 Jul 2026 10:21:48 +0000 (12:21 +0200)]
Fix IsDown off-by-one bug; extend the smoke test to full plugin coverage

IsDown.parse_body() read words[0] (the command word "isdown" itself) as
the target URL instead of words[1] (the actual argument) - every other
plugin in the codebase treats words[0] as the command name and words[1:]
as arguments. This meant "bot: isdown <site>" always silently checked a
nonsense hostname and never replied, caught live via the extended smoke
test. Fixed, with regression test coverage mocking requests.get.

Extends tests/muc_smoke_check.py from the "complex edges" subset to
~40 checks covering nearly every registered plugin: all the deterministic
no-network ones (Pray, BOFH, Klammer, Terminate, Unicode, Slap, 8ball,
XChoose, Coin, Choose, Morse, Uptime, Info, SecurityTracker, URLBlacklist,
MentalDeficits), the network-dependent ones with generous timeouts
(Wikipedia, DuckDuckGo, Consumables/giphy, Translator, IsDown, Youtube,
URLResolver), and dedicated multi-step workflows for the stateful plugins
(Voting - ending the pre-seeded joke election and confirming a fresh vote
lands in the closing tally; VotePoll - full poll/vote/endpoll cycle with
timestamp-uniqued options and a check that skips rather than interrupts
someone else's already-active poll; Recorder - record-then-rejoin-under-
the-target-nick delivery). Deliberately excludes DidYouKnow (permanent
disk growth) and Searx (single hardcoded backend, worst-case ~17min retry
loop before failing).

Also fixes two harness bugs found while running this for real: leave_muc()
isn't a coroutine in the installed slixmpp version (was being incorrectly
awaited, crashing the Recorder workflow before it could finish), and each
stateful workflow is now individually try/excepted so one crashing doesn't
prevent the others from running and reporting.

Corrects an earlier, wrong claim (from before this was actually run live):
Recorder's delivery-on-join was assumed broken because its "userjoin.*"
binding-key entry can never match a real dotted-domain routing key - true,
but irrelevant, since Recorder also subscribes via Worker.CATCH_ALL and
receives the message regardless. Confirmed working end to end.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix cross-bot infinite reply loop: honor the existing other_bots config
Thorsten [Sat, 18 Jul 2026 09:42:59 +0000 (11:42 +0200)]
Fix cross-bot infinite reply loop: honor the existing other_bots config

muc_message() only ever ignored the bot's own nick. With multiple sibling
bot instances (urlbug, pibug, urlbrot) in the same room, each correctly
ignores itself but happily reacts to the others' replies - discovered
live when a smoke-test message containing a CVE id caused
SecurityTracker's URL reply to be picked up by the other bot's
URLResolver, whose title-scrape reply contained the same CVE id, causing
SecurityTracker to fire again, forever, across both bots, hammering
security-tracker.debian.org indefinitely until manually restarted.

persistent_config.ini.spec already had an `other_bots` key seemingly
designed for exactly this, but nothing in the codebase ever read it. Wired
it into muc_message()'s existing self-nick check. Populating the actual
other_bots list per host is a separate, per-deployment config change (not
committed here, since persistent_config.ini is gitignored per-host state).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix leading-'#' zero-match in routing.matches(); extend the smoke test
Thorsten [Sat, 18 Jul 2026 09:02:11 +0000 (11:02 +0200)]
Fix leading-'#' zero-match in routing.matches(); extend the smoke test

routing.matches() (used by the NATS classifier dispatch and the AMQP test
harness alike) only fixed up the trailing zero-match case ("nick.dice.#"
matching bare "nick.dice"). Real AMQP topic exchanges let '#' match zero
words at any position, so a binding key like "#.doctor.#" must also match
"doctor" as the literal first word with nothing before it - that shape
was silently broken under the NATS backend (confirmed live: Doctor and
DidYouKnow, the only two plugins using a bare leading '#', never fired for
that phrasing on munin). Fixed with a symmetric leading-anchor rewrite,
plus unit test coverage. A narrower gap remains for a '#' with zero words
strictly between two literals (documented in routing.py) - only affects
Selfreaction's degenerate "me.<nick>" phrasing, not worth a fully general
regex rewrite for.

Also extends muc_smoke_check.py with checks for the trickiest binding-key
shapes in the codebase: Doctor (leading '#', the bug above), Selfreaction
(mid-pattern '#', the shape with no NATS-subject equivalent at all), and
TeaTimer (a two-phase check - immediate confirmation, then the scheduled
event firing on its own via the JetStream-durable action_processing path,
with no new message sent to prompt it). Confirmed live: after this fix,
Doctor passes on munin (NATS) too, matching aero2k.de (AMQP) exactly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoBind local NATS server to 127.0.0.1 instead of all interfaces
Thorsten [Sat, 18 Jul 2026 08:50:35 +0000 (10:50 +0200)]
Bind local NATS server to 127.0.0.1 instead of all interfaces

nats-server defaults to binding 0.0.0.0, and the systemd unit didn't
override that - meaning any host that can reach munin's port 4222 could
publish/subscribe to the bot's classifier exchange or JetStream streams
with zero authentication configured. It's only ever used by processes on
the same host (nats_uri=localhost), so restrict it to loopback.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoAdd a live MUC smoke-test tool
Thorsten [Sat, 18 Jul 2026 08:38:19 +0000 (10:38 +0200)]
Add a live MUC smoke-test tool

Connects to a real room as a separate test account, addresses the bot by
nick with a few deterministic commands (ping/version/dice), and checks the
responses match expected patterns - a black-box way to confirm a deployed
instance is actually working end to end, not just that its systemd units
are active. Not part of the pytest suite; needs a real XMPP server/room/bot.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix NATS reconnect handling: retry forever instead of giving up after ~2min
Thorsten [Sat, 18 Jul 2026 07:45:07 +0000 (09:45 +0200)]
Fix NATS reconnect handling: retry forever instead of giving up after ~2min

nats-py's default max_reconnect_attempts (60 * 2s) meant a long-enough NATS
outage would leave worker.py's per-plugin consumer threads permanently
stuck with no recovery path - unlike the AsyncBroker path used by
action_worker.py, they had no closed_cb to notice and react to a permanent
disconnect. Setting max_reconnect_attempts=-1 makes nats-py retry
indefinitely instead; confirmed via a local test that a plugin thread
survives a NATS restart and resumes receiving messages afterward without
any restart of its own. Also bumps connect_timeout from nats-py's 2s
default to 10s, since munin (a Pi Zero-class host) observed transient
connect timeouts when ~40 plugin threads dialed in simultaneously at
startup under the tighter default.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoAdd NATS/JetStream as an alternative broker to RabbitMQ
Thorsten [Sat, 18 Jul 2026 07:16:02 +0000 (09:16 +0200)]
Add NATS/JetStream as an alternative broker to RabbitMQ

RabbitMQ's Erlang VM baseline costs ~300-500MB RES regardless of actual
traffic, which is wasteful for a small hobby-scale chatbot. Introduces a
runtime toggle (broker_backend = amqp | nats in local_config.ini) so a
deployment can opt into a NATS+JetStream backend instead, while defaulting
to amqp so existing deployments are unaffected.

- New common/broker.py abstraction (SyncBroker/AsyncBroker) with
  broker_amqp.py (thin, behavior-preserving wrapper around the existing
  pika calls) and broker_nats.py backends.
- Binding-key wildcard matching (some patterns, e.g. fun.py's mid-pattern
  "#", have no native NATS subject-algebra equivalent) is handled by
  subscribing broadly and filtering in-process via common/routing.py,
  lifted from the AMQP-routing simulator already used in integration tests.
- action_processing and plugin_registry go through JetStream for
  durability/late-subscriber buffering, matching today's AMQP guarantees.
- Ansible role: broker_backend/nats_uri toggle, optional local NATS server
  provisioning (nats_local), wait-for-broker.sh picked conditionally.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix Choose plugin crash when mampfdb.json is missing
Thorsten [Fri, 17 Jul 2026 20:23:29 +0000 (22:23 +0200)]
Fix Choose plugin crash when mampfdb.json is missing

open() raised an uncaught FileNotFoundError at class-definition time,
which is never caught by Worker.callback and crashed the whole worker
process on any deployment that hadn't manually placed the file (e.g.
munin, a fresh clone). Also ship mampfdb.json itself so the food-choice
feature works instead of silently falling back to an empty dict.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoAdd XEP-0410 MUC self-ping to auto-rejoin after silent eviction
Thorsten [Tue, 14 Jul 2026 19:50:28 +0000 (21:50 +0200)]
Add XEP-0410 MUC self-ping to auto-rejoin after silent eviction

A c2s reconnect re-fires session_start and rejoins the rooms, but a
silent MUC eviction (e.g. an s2s flap when the account server restarts)
never touches the c2s stream: the bot stays online and JID-pingable yet
quietly drops out of the room with no way to notice.

Periodically ping our own occupant JID and rejoin on not-acceptable /
item-not-found; treat every other error (and timeouts) as inconclusive
so a flaky s2s link can't cause a rejoin storm.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 months ago:)
Thorsten [Fri, 26 Jun 2026 17:09:18 +0000 (19:09 +0200)]
:)

2 months ago:)
Thorsten [Wed, 17 Jun 2026 16:56:31 +0000 (18:56 +0200)]
:)

3 months agomore of those
Thorsten [Mon, 4 May 2026 19:15:12 +0000 (21:15 +0200)]
more of those

3 months agofix youtube urls being "resolved"
Thorsten [Sun, 3 May 2026 09:18:06 +0000 (11:18 +0200)]
fix youtube urls being "resolved"

4 months agofix test
Thorsten [Wed, 15 Apr 2026 19:25:24 +0000 (21:25 +0200)]
fix test

4 months agoAdd CI pipeline definition
Thorsten [Wed, 15 Apr 2026 19:08:47 +0000 (21:08 +0200)]
Add CI pipeline definition

5 months agoadd User-Agent header to Wikipedia API requests
Thorsten [Sat, 14 Mar 2026 18:12:41 +0000 (19:12 +0100)]
add User-Agent header to Wikipedia API requests

8 months agoadd demotivationals plugin, integrate dynamic text loading, and update deployment...
Thorsten [Tue, 16 Dec 2025 00:03:00 +0000 (01:03 +0100)]
add demotivationals plugin, integrate dynamic text loading, and update deployment config

9 months agodublettenbuster
Thorsten [Wed, 19 Nov 2025 15:42:06 +0000 (16:42 +0100)]
dublettenbuster

12 months agoempty message on presence
Thorsten [Sun, 10 Aug 2025 19:53:50 +0000 (21:53 +0200)]
empty message on presence

12 months agofixes
Thorsten [Sun, 10 Aug 2025 19:42:43 +0000 (21:42 +0200)]
fixes

15 months agopraying to urlbug
Thorsten [Sat, 24 May 2025 08:11:05 +0000 (10:11 +0200)]
praying to urlbug

23 months agoaggregate by option, show voters supporting the winning option
Thorsten [Mon, 16 Sep 2024 20:35:31 +0000 (22:35 +0200)]
aggregate by option, show voters supporting the winning option

23 months agoincrease default/max voting durations, since we can end it early
Thorsten [Tue, 10 Sep 2024 16:15:44 +0000 (18:15 +0200)]
increase default/max voting durations, since we can end it early

23 months agore-add vote duration limit
Thorsten [Mon, 9 Sep 2024 20:36:18 +0000 (22:36 +0200)]
re-add vote duration limit

23 months agopoll: add prefixes
Thorsten [Sun, 8 Sep 2024 11:15:12 +0000 (13:15 +0200)]
poll: add prefixes

23 months agopoll: fix get_votes
Thorsten [Sun, 8 Sep 2024 11:06:27 +0000 (13:06 +0200)]
poll: fix get_votes

23 months agopoll: dynamic amount of options
Thorsten [Sun, 8 Sep 2024 10:57:20 +0000 (12:57 +0200)]
poll: dynamic amount of options

23 months agopoll: prefix with letters
Thorsten [Sun, 8 Sep 2024 09:01:54 +0000 (11:01 +0200)]
poll: prefix with letters

23 months agopoll: fix max time, add ending time in status
Thorsten [Sun, 8 Sep 2024 06:27:22 +0000 (08:27 +0200)]
poll: fix max time, add ending time in status

23 months agocustomizable poll duration(up to 12h) and some utility
Thorsten [Sat, 7 Sep 2024 23:10:59 +0000 (01:10 +0200)]
customizable poll duration(up to 12h) and some utility

23 months agouniversally use str | bytes
Thorsten [Sat, 7 Sep 2024 12:22:53 +0000 (14:22 +0200)]
universally use str | bytes

23 months agofix bug
Thorsten [Sat, 7 Sep 2024 12:19:02 +0000 (14:19 +0200)]
fix bug

23 months agoadd poll plugin
Thorsten [Sat, 7 Sep 2024 12:14:10 +0000 (14:14 +0200)]
add poll plugin

2 years agofix bug.
Thorsten [Fri, 23 Aug 2024 20:52:48 +0000 (22:52 +0200)]
fix bug.

2 years agofix bug.
Thorsten [Fri, 12 Jul 2024 18:34:24 +0000 (20:34 +0200)]
fix bug.

2 years agodeployment QoL
Thorsten [Sat, 8 Jun 2024 16:50:41 +0000 (18:50 +0200)]
deployment QoL

2 years agofix teatimer/async loop
Thorsten [Tue, 4 Jun 2024 18:15:26 +0000 (20:15 +0200)]
fix teatimer/async loop

2 years agohungry-mod
Thorsten [Thu, 2 May 2024 09:25:36 +0000 (11:25 +0200)]
hungry-mod

2 years agochoose your battles
Thorsten [Tue, 23 Apr 2024 18:14:16 +0000 (20:14 +0200)]
choose your battles

2 years agochoose your battles
Thorsten [Tue, 23 Apr 2024 18:13:21 +0000 (20:13 +0200)]
choose your battles

2 years agolet buggy clients have ordered messages (yes, you, gajim)
Thorsten [Tue, 23 Apr 2024 17:25:02 +0000 (19:25 +0200)]
let buggy clients have ordered messages (yes, you, gajim)

2 years agoimplement local message broker for testing
Thorsten [Fri, 19 Apr 2024 15:44:02 +0000 (17:44 +0200)]
implement local message broker for testing

with some crude hack to replicate amqp matching

2 years agomigrate to PEP-621, add some tests, refactor some things
Thorsten [Fri, 19 Apr 2024 14:27:52 +0000 (16:27 +0200)]
migrate to PEP-621, add some tests, refactor some things

2 years agofilter whitespace from wp responses
Thorsten [Wed, 17 Jan 2024 07:17:34 +0000 (08:17 +0100)]
filter whitespace from wp responses

2 years agoblacklist localhost on urlresolve
Thorsten [Fri, 5 Jan 2024 13:58:33 +0000 (14:58 +0100)]
blacklist localhost on urlresolve

2 years agofix stupid mistakes
Thorsten [Wed, 13 Dec 2023 16:44:08 +0000 (17:44 +0100)]
fix stupid mistakes

2 years agokantig
Thorsten [Tue, 12 Dec 2023 20:15:19 +0000 (21:15 +0100)]
kantig

2 years agofix upper/lower case
Thorsten [Tue, 12 Dec 2023 20:05:46 +0000 (21:05 +0100)]
fix upper/lower case

2 years agospread the knowledge
Thorsten [Sat, 9 Dec 2023 13:08:41 +0000 (14:08 +0100)]
spread the knowledge

2 years agofuck that
Thorsten [Wed, 25 Oct 2023 05:23:28 +0000 (07:23 +0200)]
fuck that

3 years ago30s keepalive interval
Thorsten [Thu, 3 Aug 2023 15:05:11 +0000 (17:05 +0200)]
30s keepalive interval

3 years agoimprove translation
Thorsten [Wed, 2 Aug 2023 06:12:17 +0000 (08:12 +0200)]
improve translation

3 years agoautostart dsa-watcher, broadcast messages
Thorsten [Sun, 9 Jul 2023 10:53:40 +0000 (12:53 +0200)]
autostart dsa-watcher, broadcast messages

broadcast messages if not targeted at one room specifically - more like a workaround, as I cannot decide a target in feeds.py at the time

hint: this creates infinite loops with other bots parsing DSA-** in the same room

3 years agothree years later, fix the event list
Thorsten [Sun, 9 Jul 2023 10:37:41 +0000 (12:37 +0200)]
three years later, fix the event list

3 years agoack ack!
Thorsten [Sat, 8 Jul 2023 20:57:41 +0000 (22:57 +0200)]
ack ack!

3 years agoseparate clone/view git url
Thorsten [Fri, 7 Jul 2023 13:01:23 +0000 (15:01 +0200)]
separate clone/view git url

3 years agofix naming
Thorsten [Sat, 24 Jun 2023 19:47:11 +0000 (21:47 +0200)]
fix naming

channel is something entirely different than routing key... technically, at least

3 years agooptimize connection usage
Thorsten [Sat, 24 Jun 2023 19:45:22 +0000 (21:45 +0200)]
optimize connection usage

3 years agofix meta plugin
Thorsten [Sat, 24 Jun 2023 19:24:58 +0000 (21:24 +0200)]
fix meta plugin

3 years agofix meta plugin
Thorsten [Sat, 24 Jun 2023 19:01:01 +0000 (21:01 +0200)]
fix meta plugin

3 years agofix threading bug
Thorsten [Sat, 24 Jun 2023 14:59:51 +0000 (16:59 +0200)]
fix threading bug

3 years agofix capitalization
Thorsten [Sat, 24 Jun 2023 11:06:47 +0000 (13:06 +0200)]
fix capitalization

3 years agominor language fixes
Thorsten [Sat, 24 Jun 2023 09:22:53 +0000 (11:22 +0200)]
minor language fixes

3 years agofix machine learning
Thorsten [Fri, 23 Jun 2023 20:01:47 +0000 (22:01 +0200)]
fix machine learning

3 years agoadd some machine learning
Thorsten [Fri, 23 Jun 2023 19:19:09 +0000 (21:19 +0200)]
add some machine learning

3 years agofix another ancient bug: ack every time!
Thorsten [Sat, 17 Jun 2023 09:19:26 +0000 (11:19 +0200)]
fix another ancient bug: ack every time!

3 years agoslixmpp is required in worker, too (message.py)
Thorsten [Sun, 11 Jun 2023 06:33:22 +0000 (08:33 +0200)]
slixmpp is required in worker, too (message.py)

3 years agofix ancient bug
Thorsten [Sun, 4 Jun 2023 08:12:46 +0000 (10:12 +0200)]
fix ancient bug

3 years agofix sed-bug
Thorsten S [Wed, 8 Mar 2023 09:41:20 +0000 (10:41 +0100)]
fix sed-bug

3 years agoadd some intelligence
Thorsten S [Wed, 8 Mar 2023 08:55:59 +0000 (09:55 +0100)]
add some intelligence

3 years agofix searx
Thorsten [Tue, 28 Feb 2023 18:49:13 +0000 (19:49 +0100)]
fix searx

3 years agofix ancient bug
Thorsten [Tue, 28 Feb 2023 16:53:03 +0000 (17:53 +0100)]
fix ancient bug

3 years agoadd nick to info
Thorsten S [Thu, 9 Feb 2023 20:31:49 +0000 (21:31 +0100)]
add nick to info

3 years agofix missing comma
Thorsten S [Fri, 3 Feb 2023 06:50:41 +0000 (07:50 +0100)]
fix missing comma

3 years agocleaned up didyouknow
leolein [Sun, 29 Jan 2023 15:00:24 +0000 (16:00 +0100)]
cleaned up didyouknow

3 years agocleaned up didyouknow
leolein [Sun, 29 Jan 2023 14:51:06 +0000 (15:51 +0100)]
cleaned up didyouknow

3 years ago+2 didyouknow spruechlein
leolein [Fri, 27 Jan 2023 21:44:31 +0000 (22:44 +0100)]
+2 didyouknow spruechlein

3 years agoattempt to fix amazon errors
Thorsten [Mon, 19 Dec 2022 15:21:05 +0000 (16:21 +0100)]
attempt to fix amazon errors

3 years agofix python mirror, again
Thorsten [Sat, 12 Nov 2022 14:47:22 +0000 (15:47 +0100)]
fix python mirror, again

3 years agofixes for pika incompatible upgrade
Thorsten [Sat, 12 Nov 2022 14:34:03 +0000 (15:34 +0100)]
fixes for pika incompatible upgrade

4 years agoadd magic 8ball
Thorsten [Tue, 30 Aug 2022 19:07:02 +0000 (21:07 +0200)]
add magic 8ball

4 years agodumb me
Thorsten [Mon, 25 Apr 2022 20:21:08 +0000 (22:21 +0200)]
dumb me

4 years agodecrease sickness
Thorsten [Mon, 25 Apr 2022 11:19:44 +0000 (13:19 +0200)]
decrease sickness

4 years agoproperly log searx retries
Thorsten [Sun, 24 Apr 2022 10:47:00 +0000 (12:47 +0200)]
properly log searx retries

4 years agoinsults to injury
Thorsten [Sun, 24 Apr 2022 08:21:08 +0000 (10:21 +0200)]
insults to injury

4 years agosome lib-/platform related scenario lets the bot fail on raised exceptions
Thorsten [Mon, 11 Apr 2022 12:18:36 +0000 (14:18 +0200)]
some lib-/platform related scenario lets the bot fail on raised exceptions

(while on others, it's caught)

4 years agofix giphy integration
Thorsten [Mon, 27 Dec 2021 12:59:06 +0000 (13:59 +0100)]
fix giphy integration

4 years agoremove unused, deprecated and no longer present unichr import
Thorsten S [Wed, 8 Dec 2021 18:40:39 +0000 (19:40 +0100)]
remove unused, deprecated and no longer present unichr import

5 years agoshould-never-happen scenario, which happened, fixed
Thorsten [Tue, 17 Aug 2021 16:06:38 +0000 (18:06 +0200)]
should-never-happen scenario, which happened, fixed

5 years agofix stupid me
Thorsten [Thu, 29 Jul 2021 17:27:19 +0000 (19:27 +0200)]
fix stupid me

5 years agofix stupid
Thorsten [Thu, 29 Jul 2021 17:11:50 +0000 (19:11 +0200)]
fix stupid

5 years agod20
Thorsten [Thu, 29 Jul 2021 16:57:28 +0000 (18:57 +0200)]
d20

5 years agosome more debug logs, add group invite
Thorsten [Thu, 29 Jul 2021 16:57:08 +0000 (18:57 +0200)]
some more debug logs, add group invite

5 years agomute functionality (we're still running on python 3.5...)
Thorsten S [Wed, 12 May 2021 17:27:38 +0000 (19:27 +0200)]
mute functionality (we're still running on python 3.5...)

5 years agomute functionality
Thorsten S [Wed, 12 May 2021 17:12:49 +0000 (19:12 +0200)]
mute functionality

5 years agosearx that
Thorsten [Thu, 18 Mar 2021 18:33:01 +0000 (19:33 +0100)]
searx that

5 years agofix routing key (again?!)
Thorsten [Mon, 8 Mar 2021 21:36:03 +0000 (22:36 +0100)]
fix routing key (again?!)

5 years agofix tube
Thorsten [Fri, 12 Feb 2021 16:12:55 +0000 (17:12 +0100)]
fix tube

5 years agoignore the xmpp upload...
Thorsten [Thu, 11 Feb 2021 16:44:27 +0000 (17:44 +0100)]
ignore the xmpp upload...