Commit Graph
125 Commits
Author SHA1 Message Date
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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
leanderandClaude 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