Repository navigation
v0.3.0 — Discord notifications
Bot-driven Discord notifications. Quest Board's Celery tasks now call the bot's HTTP server instead of posting plain webhook embeds on campaigns that have a guild_id configured.
Added
bot/cogs/notifications.py— full implementation replacing the v0.1.0 stub:on_bot_notifylistener routes incoming payloads to per-event handlers_resolve_channel— fetchesTextChannelby ID with clear logging on NotFound / Forbidden errorssession_proposed— rich embed with one field per time slot using Discord<t:timestamp:F>localised timestamps; slot details fetched fromGET /api/bot/sessions/{id}/timeslots; seed reactions 🇦–🇪 added immediately after posting (0.5 s apart to respect rate limits)session_confirmed— embed with confirmed time; campaign name fetched from APIsession_reminder— embed with human-readable label (_reminder_labelconvertshours_untilto "2 hours", "3 days", etc.) and confirmed time; campaign name fetched from APIsession_cancelled— embed using title and campaign name from payloadvote_update— embed with per-slot yes / maybe / no counts fetched from APIget_message_mapping(message_id)— public method used by the voting cog (v0.5.0) to resolve a Discord message ID back to a session ID and ordered slot list- Redis-backed message→session store (
qb_msg:{message_id}, 30-day TTL); falls back to an in-memory dict ifREDIS_URLis not set or Redis is unreachable