Getting started
Access is invite-only. You'll get a one-time link that looks like this:
https://t.me/NaseefSidekickBot?start=inv_aB12cdEF34
- Tap the link on your phone — Telegram opens a chat with the bot.
- Tap Start. The bot greets you, activates your account, and tells you which features were granted.
- Send
/help any time to see the buttons for the tools you can use.
No invite link? Ask Naseef. Random Telegram users who message the bot only see the public tools (forecast + reminders) — everything else needs an explicit grant.
How to talk to it
The bot is powered by an LLM. You don't need to memorise commands — describe what you want and it picks the right tool. Here are equivalent ways to ask the same question:
what's pending?
anything for me to review on mvSwimHub?
show me the swim records waiting for approval
All three trigger the same mvswimhub_pending_list tool.
Tips that consistently work
- Be specific about names. "Aishath broke the 100 fly with 58.92" is easier than "she broke it".
- Speak in short, factual sentences. Long stream-of-thought tends to confuse routing.
- Reference earlier turns naturally. "confirm that meet" or "revoke that token" — the bot remembers what you were just looking at.
- Send a photo or PDF directly. Drop it into the chat with a one-liner like "new base times sheet" — the bot routes attachments to the right tool.
mvSwimHub admin (granted users)
Tools for managing Maldivian National Records, base-time sheets, and the meet calendar. Each one needs an explicit grant — Naseef enables them per user.
📋 List pending updates mvswimhub_pending_list
Shows record updates that the SAM scraper detected (or admins typed in) which haven't been approved or rejected yet.
Try saying:
- "what's pending?"
- "any record updates waiting for me?"
- "show me the unresolved swim updates"
🏆 Browse records mvswimhub_records_list
Reads the current National Records, optionally filtered by course / gender / stroke / distance.
Try saying:
- "show all LC women's records"
- "what's the men's 200 free SC record?"
- "list all butterfly records"
- "records for short course men"
✍️ Propose a new record mvswimhub_propose_record Confirm
Files a Telegram-declared NR break or a calculator base-time override. You'll see a preview comparing the new time against the existing record before it's saved.
Try saying:
- "Aishath broke the LC women 100 fly NR with 58.92 at SAG 2024"
- "new SC men 200 free NR: Mubal 1:48.20, today"
- "set the calculator base time for SC men 50 breast to 28.10 (trial)"
📄 Upload a base-times sheet mvswimhub_upload_sheet
Send the BASE TIMES PDF (or a clean photo of one) — the bot OCRs it, parses the trial-flagged rows, and DMs you the parsed preview with Apply / Cancel buttons.
Try saying:
- 📎 (attach PDF) "new base times sheet"
- 📎 (attach photo) "as of march 2026"
📅 Upload an annual calendar mvswimhub_upload_calendar
Send the SAM annual calendar PDF — the bot extracts each meet (name, dates, course, location) and stages them as tentative for you to confirm.
Try saying:
- 📎 (attach PDF) "2026 calendar"
- 📎 (attach photo) "updated calendar from SAM"
🗓️ List upcoming meets mvswimhub_pending_meets
Shows meets the bot knows about but haven't been confirmed yet. Filter by status if you need.
Try saying:
- "what meets are coming up?"
- "show me tentative meets in the next 90 days"
- "any unconfirmed events?"
✅ Confirm or cancel a meet mvswimhub_resolve_meet Confirm
Mark a single meet as confirmed, cancelled, or postponed. Always look up the meet ID with the previous tool first — never guess.
Try saying:
- "confirm the open water meet at Kulhudhuffushi"
- "cancel the AGM, it's been moved off-calendar"
- "postpone champion of champions to 1–4 July"
✅✅ Resolve multiple meets mvswimhub_resolve_meets Confirm
Same as above, but for a batch — useful when SAM publishes a final season calendar and you want to confirm a category in one go.
Try saying:
- "confirm all international events"
- "cancel everything tagged training camp"
- "confirm meets 41, 42 and 44"
Bot administration (Naseef only)
Manage the bot itself from Telegram — invite new users, grant features, change feature tiers, reload prompts. All mutations show a Confirm / Cancel preview before running.
👥 List users sidekick_list_users
Try saying:
- "who has access?"
- "list bot users"
- "show all users with their grants"
🧩 List features sidekick_list_features
Try saying:
- "what features exist?"
- "list all bot features"
📨 List open invites sidekick_list_invites
Try saying:
- "any open invites?"
- "show all invites including used ones"
➕ Create an invite sidekick_create_invite Confirm
Try saying:
- "invite Aishath with mvswimhub_pending_list and propose_record"
- "create an invite for Hassan, give him pending_meets"
- "invite Maeesha as a viewer, no features"
🚫 Revoke an invite sidekick_revoke_invite Confirm
Try saying:
- "revoke that invite"
- "cancel the invite for Aishath"
🔓 Grant a feature sidekick_grant_feature Confirm
Try saying:
- "give Aishath access to mvswimhub_propose_record"
- "grant mvswimhub_pending_meets to user 5"
🔒 Revoke a feature sidekick_revoke_feature Confirm
Try saying:
- "take away Aishath's propose_record access"
- "revoke pending_meets from user 5"
🎚️ Change a feature's tier sidekick_set_feature_access Confirm
Try saying:
- "make oivaru_today protected"
- "set mvswimhub_records_list back to admin"
♻️ Reload prompts sidekick_reload_prompts
Drops the in-memory prompt caches so the next message re-reads them from disk. Useful after editing prompt files on the host without rebuilding the container.
Try saying:
- "reload prompts"
- "refresh the bot's prompt cache"
The Confirm / Cancel flow
Anything that changes data (proposing a record, confirming a meet, granting a feature) is a two-step action. The bot first replies with a preview and inline buttons:
Aishath broke LC women 100 fly NR with 58.92 at SAG 2024
Sidekick
Setting LC women 100 fly NR
· new: 58.92 by Aishath at SAG 2024
· previous: 59.41 (2022)
✅ Confirm
❌ Cancel
- Tap ✅ Confirm to commit. The audit trail records that you did it.
- Tap ❌ Cancel if anything looks off — nothing is written.
- If you ignore it for ~5 minutes, the buttons expire and you can ask again.
Slash commands
| Command | What it does |
/start | Onboarding. Use /start inv_<token> the first time you open an invite link. |
/help | Shows quick-action buttons for the tools you have access to. |
/reset | Clears your conversation history with the bot. Useful when context gets stale or you want a clean slate. |
Troubleshooting
- The bot says "I don't have a tool for that."
- You probably don't have that feature granted. Send
/help to see what you can use, or ask Naseef to grant it.
- I tapped Confirm but nothing happened.
- Confirmations expire after ~5 minutes. Re-issue the request and tap Confirm again.
- The bot keeps misreading my upload.
- Use a clear, well-lit photo or the original PDF. Avoid screenshots of screenshots.
- It's referencing things I never said.
- Conversation history can drift over long sessions. Send
/reset to start fresh.
- I want to use the bot from a different Telegram account.
- Each invite token can only be claimed once, by one Telegram user ID. Ask Naseef for a fresh invite for the new account.
Privacy & storage
Be aware that:
- Your messages and the bot's replies are stored in a Postgres database on this server, used as conversation context for the LLM.
- Send
/reset to drop your conversation history at any time.
- Attachments (photos, PDFs) are forwarded to Google Gemini for parsing. They aren't kept on disk longer than the parse takes.
- This bot is a personal utility, not a commercial product — there's no privacy policy beyond "Naseef looks after it".