agentleFS
serejarisserejaris/ris-claude-code/skills/tg-bot-ops/SKILL.md

tg-bot-ops

Skill243 starsChanged 3 months agoMITView on GitHub

Use when operating, debugging, deploying, or monitoring a Telegram bot or Telegram-to-agent gateway. Triggers on "telegram bot down", "bot not responding", "debug bot", "check webhook", "polling vs webhook", "restart bot", "deploy bot", "bot logs", "agent gateway", "Telegram Bot API error", "send test message", "бот не отвечает", "проверь бота", "логи бота", "перезапусти бота". Covers health checks, logs, webhook/polling diagnostics, environment validation, safe restart/deploy checklists, Bot API smoke tests, forum topic delivery, privacy mode, gateway routing, and incident notes.

  • Reads credentials

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 9 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill when the real question is whether a Telegram bot is receiving updates, processing them in the intended runtime, and sending …

    line 8
  2. Distinctive:

    Default to read-only diagnostics.

    line 14
  3. Very specific:

    Do not print tokens, .env values, connection strings, raw logs, private DMs, payment payloads, session files, or full user records.

    line 15
  4. Very specific:

    Use placeholders in notes and examples: <TELEGRAM_BOT_TOKEN>, <TELEGRAM_USER_ID>, <CHAT_ID>, <TOPIC_ID>, <WEBHOOK_URL>.

    line 17
  5. Distinctive:

    Do not send Telegram messages, restart production services, change webhooks, edit BotFather settings, or deploy until the user has …

    line 19
  6. Distinctive:

    If any real secret appears in the repo, logs, or prompt, stop and tell the user it must be rotated before public release.

    line 22
  7. Distinctive:

    If the repo or runtime is unclear, identify:

    line 27
  8. Distinctive:

    update mode: webhook, polling, or unknown.

    line 31
  9. Distinctive:

    When the bot is a gateway from Telegram into an agent runtime, read references/hermes-gateway.md.

    line 57
  10. Distinctive:

    Do not paste the token-bearing URL into notes or issues.

    line 89
  11. Distinctive:

    Before restarting or deploying:

    line 111
  12. Very specific:

    run post-restart getMe, webhook/polling, and one visible smoke test.

    line 117

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Telegram Bot Ops

Use this skill when the real question is whether a Telegram bot is receiving updates, processing them in the intended runtime, and sending visible responses to the right chat, user, or forum topic.

Public Safety

  • Default to read-only diagnostics.
  • Do not print tokens, .env values, connection strings, raw logs, private DMs, payment payloads, session files, or full user records.
  • Use placeholders in notes and examples: <TELEGRAM_BOT_TOKEN>, <TELEGRAM_USER_ID>, <CHAT_ID>, <TOPIC_ID>, <WEBHOOK_URL>.
  • Do not send Telegram messages, restart production services, change webhooks, edit BotFather settings, or deploy until the user has authorized that exact action.
  • If any real secret appears in the repo, logs, or prompt, stop and tell the user it must be rotated before public release.

Intake

If the repo or runtime is unclear, identify:

  • bot repo and language/runtime;
  • deployment target: local, Docker, VPS/systemd, Railway, Render, Fly, Vercel, or other;
  • update mode: webhook, polling, or unknown;
  • env source for TELEGRAM_BOT_TOKEN;
  • expected symptom, chat surface, and timestamp;
  • whether production restart/deploy is allowed.

Diagnostic Flow

  1. Repo and runtime — inspect entrypoints, process manager, deploy files, and current git state.
  2. Environment — verify required env var names exist without printing values.
  3. Update intake — classify runtime: HTTP Bot API webhook, HTTP Bot API polling, MTProto bot session, or MTProto user session.
  4. Bot API identity — for Bot API-token runtimes, run getMe using a masked token path.
  5. Webhook/polling mode — for Bot API-token runtimes, run getWebhookInfo and inspect runtime logs.
  6. Single update owner — resolve 409 Conflict by reading the error text: webhook conflict means webhook/deleteWebhook path; competing getUpdates means find the polling owner.
  7. Telegram delivery — use a fresh nonce for Bot API or Telethon/user-session E2E when user-visible behavior matters.
  8. Handler/runtime — prove the runtime received and processed the update.
  9. Outbound response — prove the bot sent to the expected chat/topic.
  10. Incident note — report symptom, evidence, root cause, fix, and residual risk.

Telegram-To-Agent Gateways

When the bot is a gateway from Telegram into an agent runtime, read references/hermes-gateway.md. The reference is Hermes-compatible but intentionally generic: bot handle, host, service name, home directory, chat ids, topic ids, env paths, and logs must be placeholders or redacted.

Bot API vs Telethon / MTProto

  • Bot API is Telegram's HTTP interface for bot tokens: getUpdates, webhooks, sendMessage, getMe, callbacks, payments, and join requests.
  • Telethon is an MTProto client. It can be a bot-account runtime with start(bot_token=...) or a user-session E2E harness for what a Telegram user sees.
  • Pick one primary intake per bot token/account: Bot API webhook, Bot API polling, MTProto bot session, or MTProto user session. Do not mix without a clear deduplication plan.

Webhook And Polling Checks

Safe read-only checks should avoid putting the token-bearing URL in shell history, process listings, or copied logs. Prefer a tiny local helper:

import json, os, urllib.request

token = os.environ["TELEGRAM_BOT_TOKEN"]
for method in ("getMe", "getWebhookInfo"):
    with urllib.request.urlopen(f"https://api.telegram.org/bot{token}/{method}") as response:
        data = json.load(response)
    print(method, {"ok": data.get("ok"), "result_keys": sorted((data.get("result") or {}).keys())})

Do not paste the token-bearing URL into notes or issues. In reports, write:

getWebhookInfo: webhook_url=<set|empty>, pending_update_count=<n>, last_error=<redacted>

Direct getUpdates diagnostics can consume pending updates. Use it only with a fresh nonce, short timeout, known update owner, and restore plan.

Forum Topics And Privacy

  • Non-General forum topics require preserving message_thread_id.
  • General topic is normally sent like an ordinary supergroup message: omit message_thread_id. Preserve message_thread_id for non-General topics.
  • With privacy mode enabled, bots see targeted commands, replies to the bot, inline messages via the bot, service messages, private chats, and channel messages where they are a member. Admin bots can receive all group messages.
  • Disabling privacy or removing/re-adding a bot affects group visibility and requires explicit user authorization.

Restart / Deploy Gate

Before restarting or deploying:

  • identify the exact production owner/process;
  • capture current status and rollback command;
  • state expected downtime or risk;
  • confirm the user authorized the action;
  • run post-restart getMe, webhook/polling, and one visible smoke test.

Output Format

Answer with:

  1. Status — not checked, local only, runtime checked, verified in Telegram, or blocked.
  2. Evidence — commands/logs checked, with secrets redacted.
  3. Finding — the failing layer or confirmed healthy layer.
  4. Action — what changed or the next safe step.
  5. Public safety — note if any secret, user data, or private payload was found.

Anti-Patterns

  • Claiming "bot works" from unit tests only.
  • Printing raw bot tokens, .env, logs, user messages, payment payloads, or DB rows.
  • Changing webhook/polling mode without knowing the current production owner.
  • Running a local polling process with a production token while production is active.
  • Ignoring message_thread_id when the bot lives in Telegram forum topics.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.