Commit Graph
100 Commits
Author SHA1 Message Date
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
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
leander 78f326de55 refer to new docker compose command in docs 2024-10-11 16:12:16 +02:00
leander 2afd2344f4 make group profiles optional
because some groups apparently lack profiles >:
2024-09-09 19:33:36 +02:00
Leander Furumo 98006a51dc stop db event listener on cog unload 2024-05-08 00:05:14 +02:00
Leander Furumo 100aaf26ba convert static discord ids from .env to int 2024-04-29 23:45:02 +02:00
Leander Furumo 90fc0c37a1 remove redundant models and fields 2024-04-22 02:43:15 +02:00
Leander Furumo 11a8b33285 log at root level instead of 'discord' level 2024-04-22 02:41:22 +02:00
Leander Furumo 1762125788 change return type of fetch_all_galtinn_roles
since member and volunteer roles are fetches independently of api we need to return them regardless of group status.
2024-04-22 02:39:19 +02:00
Leander Furumo b93b055a06 make utc datetime now naive 2024-04-22 02:32:37 +02:00
Leander Furumo 4c4a35d4f7 log completion of db listener trigger function 2024-04-22 02:08:48 +02:00
Leander Furumo 93bd59e62a replace deprecated datetime.utcnow 2024-04-22 02:06:32 +02:00
Leander Furumo 4c6fb019fe log roles to add and remove before attempting to do so 2024-04-22 02:03:51 +02:00
Leander Furumo aecddf7708 make sure member and volunteer roles are removed, even when a user does not have any groups 2024-04-22 02:02:19 +02:00
Leander Furumo b944550bd6 make active_member_card registration date optional 2024-04-22 01:55:55 +02:00
Leander Furumo 83a1a2966e log roles set instead role setter function instead of outside 2024-04-22 01:43:41 +02:00
Leander Furumo 8b5ac02b0f fix active_member_card type 2024-04-22 01:42:39 +02:00
Leander Furumo 616f987924 make membership order and end date optional 2024-04-22 01:40:04 +02:00