EQNotify: Telegram delivery errors + Officer/Knight list-users command#265
Merged
Merged
Conversation
/eqnotify test (and batphone dispatch) surfaced a bare "status code 400" when Telegram rejected a send. The most common cause is that a Telegram bot cannot message a user who has not contacted it first, so sends to a freshly registered chat ID fail with "chat not found". - telegramPush now inspects Telegram's error `description` and throws an actionable message: "chat not found" tells the user to open the bot and send /start; "blocked" tells them to unblock it; anything else surfaces the raw Telegram description instead of a generic Axios 400. - /eqnotify register now reminds Telegram registrants to message the bot first, and the README documents the requirement. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BWXRmPbtEz35wquwFd8Cu7
Adds an Officer/Knight-gated subcommand that lists everyone registered for EQNotify, showing each subscriber's delivery channel, current Raider status (resolved live, so officers can see who is actually receiving alerts), and tag count. Output is ephemeral and chunked to stay within Discord's message length limit for large rosters. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BWXRmPbtEz35wquwFd8Cu7
Aligns list-users with add-user / remove-user (Officer/Mod/Knight) instead of Officer/Knight only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BWXRmPbtEz35wquwFd8Cu7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two EQNotify follow-ups (bundled because #265 hadn't merged yet — both are small and touch the same feature).
1. Surface Telegram delivery errors and guide bot
/startFixes the opaque
/eqnotify AxiosError: Request failed with status code 400on/eqnotify testafter registering with Telegram.Root cause is a Telegram constraint: a bot cannot initiate a conversation. If a user registers their chat ID but hasn't messaged the EQNotify bot, the API rejects sends with
400 Bad Request: chat not found. The code was throwing the raw Axios 400 without Telegram's explanatorydescription.telegramPushnow inspects Telegram'sdescriptionand throws an actionable error:chat not found→ tell the user to open the bot and send/start;blocked→ tell them to unblock it; otherwise surface the raw description./eqnotify registerreminds Telegram registrants to message the bot first; README documents the/start-first requirement.2.
/eqnotify list-users(Officer/Knight)Adds an Officer/Knight-gated subcommand listing everyone registered for EQNotify, showing each subscriber's delivery channel, current Raider status (resolved live, so officers can see who is actually receiving alerts per the #264 gate), and tag count. Reply is ephemeral and chunked to stay within Discord's message length limit for large rosters.
Notes
Testing
yarn tsc— clean.yarn test:ci(eqnotify matcher suite) — 11 tests pass.🤖 Generated with Claude Code