← Apps

Sidekick · Telegram bot

Sidekick Bot

A Telegram bot that acts as the admin remote-control for the apps on this server. Talk to it the way you'd text a colleague — it understands plain English and works out which tool to run.

Open @NaseefSidekickBot on Telegram

Getting started

Access is invite-only. You'll get a one-time link that looks like this:

https://t.me/NaseefSidekickBot?start=inv_aB12cdEF34
  1. Tap the link on your phone — Telegram opens a chat with the bot.
  2. Tap Start. The bot greets you, activates your account, and tells you which features were granted.
  3. 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.

Tools everyone gets

Available to anyone who messages the bot, even guests without an invite.

🌊 Today's swim conditions oivaru_today

Reports the OiVaru forecast for the Hulhumalé channel — current strength score, suggested swim windows, and headline conditions.

Try saying:

  • "how's the water today?"
  • "is it safe to swim this morning?"
  • "oivaru forecast"

⏰ Reminders set_reminder

Schedules a one-shot DM at a specific time. The bot resolves natural-language times to UTC for you.

Try saying:

  • "remind me in 10 minutes to drink water"
  • "remind me tomorrow at 7am to check the pool reservations"
  • "ping me at 3pm — call mum"

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

CommandWhat it does
/startOnboarding. Use /start inv_<token> the first time you open an invite link.
/helpShows quick-action buttons for the tools you have access to.
/resetClears 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".