leander and Claude Opus 5.5
50f8b14f95
set the error image to none up front instead of catching NameError
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 02:17:22 +01:00
leander and Claude Opus 5.5
0f8b18fd60
use an absolute path for the logs volume
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 02:17:22 +01:00
leander and Claude Opus 5.5
3558ab24a3
fetch the found article's title when a viteboka search has one result
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 02:17:22 +01:00
leander and Claude Opus 5.5
4d58d33063
make docstrings consistent
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 02:07:01 +01:00
leander and Claude Opus 5.5
a4b889cf54
render viteboka articles from html instead of stripping wikitext
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 02:02:28 +01:00
leander and Claude Opus 5.5
ec27820f64
document privileged intents and dev mode in the bot readme
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:58:45 +01:00
leander and Claude Opus 5.5
75a1524f0e
describe slash command parameters and use english names in code
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:56:37 +01:00
leander and Claude Opus 5.5
52bbf74e47
clean up leftover guild commands in prod and warn about duplicates in dev
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:52:13 +01:00
leander and Claude Opus 5.5
9d0b349023
share one http session for viteboka requests
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:52:13 +01:00
leander and Claude Opus 5.5
499518d842
shut down gracefully on SIGTERM
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:52:13 +01:00
leander and Claude Opus 5.5
4d89cda7bd
log background loop errors
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:42:21 +01:00
leander and Claude Opus 5.5
c3c1f7c012
keep reloading cogs if one fails
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:42:21 +01:00
leander and Claude Opus 5.5
a395df5a47
show the docker field in botinfo when running in docker
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:42:21 +01:00
leander and Claude Opus 5.5
ea2dc6a9de
handle unknown guild ids in leave
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:37:56 +01:00
leander and Claude Opus 5.5
e95c8f8113
import misc_utils the same way as the other modules
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:37:56 +01:00
leander and Claude Opus 5.5
ab0a040926
sort the bot's own imports as first-party
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 01:37:48 +01:00
leander and Claude Opus 5.5
ddba4efc1f
drop the requirements.txt fixer hook
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:14:55 +02:00
leander and Claude Opus 5.5
78ccec5c8d
migrate the verification server to uv
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:14:55 +02:00
leander and Claude Opus 5.5
51cc7e7cf8
migrate the bot to uv
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:14:54 +02:00
leander and Claude Opus 5.5
33bb8c2dc6
ignore .venv directories
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:14:54 +02:00
leander and Claude Opus 5.5
5cc68f5137
reformat with black 26
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:07:53 +02:00
leander and Claude Opus 5.5
61a8b4522f
update pre-commit hooks
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:07:53 +02:00
leander and Claude Opus 5.5
ebdc82fa44
upgrade uvicorn to 0.54
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:07:53 +02:00
leander and Claude Opus 5.5
9c74010c18
upgrade fastapi to 0.162
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:07:53 +02:00
leander and Claude Opus 5.5
c6f5844107
upgrade regex to 2026.9.29
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:57 +02:00
leander and Claude Opus 5.5
8ddb643075
upgrade pypandoc to 1.17
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:56 +02:00
leander and Claude Opus 5.5
c7a02d0c66
upgrade pydantic to 2.14
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:56 +02:00
leander and Claude Opus 5.5
f7a81dc829
upgrade psutil to 7.2
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:56 +02:00
leander and Claude Opus 5.5
c744794a37
upgrade aiohttp to 3.14 and list it in the bot requirements
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:56 +02:00
leander and Claude Opus 5.5
b8da764bd8
upgrade discord.py to 2.7
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:55 +02:00
leander and Claude Opus 5.5
b24fb03af2
upgrade python-dotenv to 1.2
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:55 +02:00
leander and Claude Opus 5.5
5f78de8631
upgrade asyncpg to 0.32
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:55 +02:00
leander and Claude Opus 5.5
f6468b0d7b
upgrade the docker images to python 3.14
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:55 +02:00
leander and Claude Opus 5.5
be64ced94e
use the request-first TemplateResponse signature
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 22:04:45 +02:00
leander and Claude Opus 5.5
d6091b8c86
fix stale status emoji ids in the bot env example
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:51:54 +02:00
leander and Claude Opus 5.5
6a5d67ac09
check the galtinn user id from the notification instead of sending an ignored filter
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:51:54 +02:00
leander and Claude Opus 5.5
8cd4961e74
return None instead of raising when a galtinn request fails
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:49:25 +02:00
leander and Claude Opus 5.5
745412ac48
share one http session with a timeout for galtinn requests in the bot
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:49:25 +02:00
leander and Claude Opus 5.5
8990ccce06
merge the galtinn pagination helpers into one
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:49:24 +02:00
leander and Claude Opus 5.5
0b7412de70
keep the paginator within its page range
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:41:21 +02:00
leander and Claude Opus 5.5
a351ded028
append to one log file that rotates at midnight
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:41:21 +02:00
leander and Claude Opus 5.5
5aeaba22ec
stop summing the total count across galtinn pages
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:41:21 +02:00
leander and Claude Opus 5.5
ff8f794524
show a warning in /guild ikon when the server has no icon
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:41:21 +02:00
leander and Claude Opus 5.5
967ae4bd5e
add doctype and viewport to the verification pages
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:38:10 +02:00
leander and Claude Opus 5.5
befa4dcaf8
only accept the leave confirmation on the confirmation message
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:38:10 +02:00
leander and Claude Opus 5.5
111c84ad9f
fix KeyError in /guild info for the highest verification level
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:38:09 +02:00
leander and Claude Opus 5.5
1f25407210
log prefix commands after they run so failures show up
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:38:09 +02:00
leander and Claude Opus 5.5
a5e7590cfc
fix doubled word in error messages and use 502 for token failures
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:36:05 +02:00
leander and Claude Opus 5.5
266367dff5
take an optional guild id in leave instead of a tuple
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:36:05 +02:00
leander and Claude Opus 5.5
7eaf6f1d0f
stop resetting the cooldown when the error is the cooldown itself
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:36:05 +02:00
leander and Claude Opus 5.5
d12d92a7a9
send long role lists from memory instead of a missing temp dir
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:36:05 +02:00
leander and Claude Opus 5.5
f0039ee240
show an error page when galtinn redirects back without a code
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:34:37 +02:00
leander and Claude Opus 5.5
f08cb453ec
stop reloadall and reloadunloaded failing on unloaded cogs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:34:37 +02:00
leander and Claude Opus 5.5
1c80ed1dfa
handle CheckFailure subclasses before ignoring check failures
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:34:36 +02:00
leander and Claude Opus 5.5
76dbdb1f0a
read BOT_CONFIG_MODE instead of CONFIG_MODE when syncing commands
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:30:18 +02:00
leander and Claude Opus 5.5
c8fb7976b0
use send_help in the cogs command group
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:30:18 +02:00
leander and Claude Opus 5.5
7dba79d4c0
fix empty role list breaking /bruker info for members without roles
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:30:18 +02:00
leander and Claude Opus 5.5
4b82e92d15
fix logging error on every ignored prefix command error
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:30:18 +02:00
leander and Claude Opus 5.5
b6915bf135
default presence env vars so on_ready doesn't crash when unset
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:28:30 +02:00
leander and Claude Opus 5.5
05603326e6
make guild and bruker command groups guild only
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:28:30 +02:00
leander and Claude Opus 5.5
023d94378b
make viteboka requests async with a timeout
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:28:30 +02:00
leander and Claude Opus 5.5
68289af070
fix slash command errors never reaching the user
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 21:28:21 +02:00
leander
b87a617a55
nårsk r vanskeli
2026-10-23 20:50:40 +02:00
leander and Claude Opus 5.5
5867bbe587
remove leftover debug prints in get_guild_member
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:49:03 +02:00
leander and Claude Opus 5.5
2b5abc14d8
show an error page when galtinn returns no access token
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:48:59 +02:00
leander and Claude Opus 5.5
30558eaa45
share one http session with a timeout for galtinn requests in the verification server
...
Unreachable or slow Galtinn requests now show an error page instead of a 500
or hanging the request.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:48:47 +02:00
leander and Claude Opus 5.5
268f593e69
replace deprecated on_event hooks with a lifespan handler
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:48:06 +02:00
leander and Claude Opus 5.5
0849f069d1
fix GALTIINN_CLIENT_ID typo in verification server
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:47:20 +02:00
leander and Claude Opus 5.5
579d3f282a
remove asyncio from requirements
...
The PyPI asyncio package is an outdated backport. asyncio is part of the
standard library.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:47:14 +02:00
leander and Claude Opus 5.5
4827d84f77
add missing = to BOT_EMOJI_DND in bot env example
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:47:14 +02:00
leander and Claude Opus 5.5
665f8deb28
unlink before removing roles in delete, and remove them from the guild member
...
Removing roles first left the user linked but without roles when the
deletion failed. interaction.user is not a guild member when the command
is used in DMs, so the member is now looked up in the guild.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:47:08 +02:00
leander and Claude Opus 5.5
7d782690c5
show an error instead of crashing when galtinn can't be reached in register and delete
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:46:23 +02:00
leander and Claude Opus 5.5
28a61b42a1
keep the membership check going when a single user fails
...
An unhandled exception, e.g. from a user without a discord profile, stopped
the task loop until the bot was restarted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:45:46 +02:00
leander and Claude Opus 5.5
a8168ec323
fetch galtinn group roles once per membership check instead of per user
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:45:21 +02:00
leander and Claude Opus 5.5
aef7753751
resolve roles with at most one fetch_roles call per update
...
Previously every role missing from the cache triggered its own fetch_roles
call, for every user in the membership check.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:44:44 +02:00
leander and Claude Opus 5.5
3e4561367c
only send role changes the member doesn't already have
...
add_roles and remove_roles make one API call per role, and every role linked
to any Galtinn group was removed from every user on every run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:44:20 +02:00
leander and Claude Opus 5.5
9d72cf9da6
skip unresolvable and unmanageable roles instead of aborting the whole update
...
A single deleted or too-high role linked to any Galtinn group was part of
every user's removal set, which made role updates fail for all users.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:44:09 +02:00
leander and Claude Opus 5.5
0737a2c322
reconnect the db listener when its connection is lost
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:43:09 +02:00
leander and Claude Opus 5.5
346b4558bd
give the db listener a dedicated connection that is closed on cog unload
...
The listener previously held a pool connection that was never released and
kept its callback registered after a reload, so every reload leaked a pool
connection and added another handler for each notification.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:42:05 +02:00
leander and Claude Opus 5.5
13703c35a2
use S256 pkce challenge instead of plain
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:38:43 +02:00
leander and Claude Opus 5.5
da06dfd5c1
stop holding the register command open to expire the verification
...
Expiry is enforced by the verification server and the cleanup loop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:38:10 +02:00
leander and Claude Opus 5.5
051a9788c4
insert pending verification atomically with on conflict
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:38:02 +02:00
leander and Claude Opus 5.5
ed66636c34
send verification notification with pg_notify instead of f-string NOTIFY
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:37:19 +02:00
leander and Claude Opus 5.5
5537c7a343
claim verification state atomically and reject expired ones
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:37:12 +02:00
leander and Claude Opus 5.5
621239c5a5
store verification expiry as timestamptz
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:36:58 +02:00
leander and Claude Opus 5.5
f82b3175a9
delete expired verifications in a single query
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:33:31 +02:00
leander and Claude Opus 5.5
90f34f9fde
add command for listing roles connected to galtinn groups
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 02:12:33 +02:00
leander
ef6663b855
revert bad ai logic and replace with bad human logic
2026-09-17 21:38:45 +02:00
leander
23582da034
have an agent rewrite the group fetching logic
...
my stupid brain does not understand how this changes anything but fuck it we ball. I am too lazy to test this locally so here I go comitting it
2026-09-17 21:20:53 +02:00
leander
c7711c579a
specify http error codes when verification server fails
2026-09-17 20:37:50 +02:00
leander
4f8f699893
log if role assignment fails
2026-09-17 20:33:08 +02:00
leander
c4f4373dbd
add checks for ghost roles and role assignment permission errors
...
some ai agent made this. I don't think this will fix any of our core issues but it is not an unreasonable check to do anyway
2026-09-17 20:32:42 +02:00
leander
003b956a90
add more data to log message
2026-09-17 20:26:46 +02:00
leander
c5c36ac464
verify payload data sent over db listener
2026-09-17 20:16:00 +02:00
leander
26c01b470f
add verification server setup guide
2024-10-11 16:22:18 +02:00
leander
f2d09e54f9
remove deprecated version number
2024-10-11 16:16:18 +02:00
leander
d2210a2520
translate to english
2024-10-11 16:15:53 +02:00
leander
3bae17f4f1
refer to new docker compose command
2024-10-11 16:15:07 +02:00
leander
109d9cb611
improve phrasing
2024-10-11 16:14:27 +02:00
leander
975261175e
improve title
2024-10-11 16:13:13 +02:00