]> git.aero2k.de Git - urlbot-v3.git/log
urlbot-v3.git
6 weeks agoFix NATS classifier publish dropping messages with quoted multi-word args
Thorsten [Sat, 18 Jul 2026 11:40:11 +0000 (13:40 +0200)]
Fix NATS classifier publish dropping messages with quoted multi-word args

A shlex-quoted plugin argument (e.g. choose 'multi word option') produces
a routing key containing a literal space. AMQP's topic exchange tolerates
that, but NATS's whitespace-delimited wire protocol does not - the PUB
frame gets corrupted and the server silently drops the connection before
the message reaches any subscriber. Sanitize whitespace out of the
subject before publishing; the JSON payload plugins actually read from is
untouched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6 weeks agoFix NATS provisioning for hosts where the bot user lacks passwordless sudo
Thorsten [Sat, 18 Jul 2026 11:09:25 +0000 (13:09 +0200)]
Fix NATS provisioning for hosts where the bot user lacks passwordless sudo

nats_server.yml's tasks use become: true, which worked fine on munin (the
"pi" user has passwordless sudo) but hung waiting for a sudo password
prompt on aero2k.de, where "jabberbot" doesn't - discovered deploying NATS
there for the first time.

Moved "provision local nats server" into deploy.yml's first play, which
already connects as root directly (no become needed at all), instead of
the second play that connects as botuser. Also switched from a raw
include_tasks path to include_role(tasks_from: nats_server), since a bare
include_tasks doesn't pull in the role's defaults/main.yml (nats_version
was undefined otherwise) while include_role does regardless of which
tasks file is requested.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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?!)