Token导航 LogoToken导航TokenDH.com
研究检索敏感数据github未标认证来源可访问许可证需确认审计异常

telegramTelegram Bot 开发

Agent Skill

telegram 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

474

周安装

19

GitHub Stars

55

下载量

154
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:telegram(Telegram Bot 开发)
来源仓库:https://github.com/joelhooks/joelclaw
仓库路径:skills/telegram
安装命令:
npx skills add https://github.com/joelhooks/joelclaw --skill telegram
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/joelhooks/joelclaw --skill telegram

简介

telegram 用于查找、检索和筛选相关信息。

  • 适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词快速定位候选结果。
  • 通过 npx skills add 命令从指定仓库安装并使用。
  • 建议确认权限范围和维护状态,注意是否触发联网或文件读写。
  • 可结合来源仓库和 README 进一步核验具体用法。

SKILL.md

Telegram Channel Skill

Operate the joelclaw Telegram channel — the primary mobile interface between Joel and the gateway agent. Built on grammy (Bot API wrapper), supports text, media, reactions, replies, inline buttons, callbacks, and streaming.

Architecture

Joel (Telegram app)
  → Bot API (long polling via grammy)
    → telegram.ts channel adapter
      → enrichPromptWithVaultContext()
        → command-queue → pi session
          → outbound router → telegram.ts send → Bot API → Joel

Key files:

  • packages/gateway/src/channels/telegram.ts — channel adapter (inbound + outbound)
  • packages/gateway/src/telegram-stream.ts — streaming UX (progressive text updates)
  • packages/gateway/src/outbound/router.ts — response routing
  • packages/gateway/src/channels/types.tsChannel interface

SDK: grammy@1.40.0 — Bot instance at module scope, exposed via getBot().

Multi-instance poll ownership (2026-03-05): Telegram long polling now uses a Redis lease per bot token hash.

  • Owner key: joelclaw:gateway:telegram:poll-owner:<tokenHash>
  • Status key: joelclaw:gateway:telegram:poll-status:<tokenHash>
  • Only owner polls getUpdates; non-owners stay passive/send-only and retry lease acquisition with backoff.

Conflict guard still applies for non-cooperative pollers: telegram.channel.start_failed (with conflict metadata) + telegram.channel.retry_scheduled + telegram.channel.polling_recovered.

Capabilities

Sending Messages

// Via channel adapter
await telegramChannel.send("telegram:7718912466", "Hello", { format: "html" });

// Direct grammy API (from telegram-stream or daemon)
const bot = getBot();
await bot.api.sendMessage(chatId, text, { parse_mode: "HTML" });
  • Max message length: 4096 chars (Telegram API limit)
  • Chunking: TelegramConverter.chunk() for HTML-aware splitting, chunkMessage() for raw text
  • Format: markdown→HTML via TelegramConverter.convert(), with plain text fallback on validation failure
  • Buttons: InlineButton[][]inline_keyboard reply markup

Reactions (ADR-0162)

// grammy API
await bot.api.setMessageReaction(chatId, messageId, [
  { type: "emoji", emoji: "👍" }
]);

Telegram supports a fixed set of emoji reactions. Common ones: 👍 👎 ❤️ 🔥 🎉 🤔 👀 ✅ ❌ 🤯 💯

Agent convention: Include <<react:EMOJI>> at the start of a response. The outbound router strips it and calls setMessageReaction before sending text.

Replies

// grammy API — reply to a specific message
await bot.api.sendMessage(chatId, text, {
  reply_parameters: { message_id: targetMessageId }
});

Already wired in the adapter via RichSendOptions.replyTo. The agent uses <<reply:MSG_ID>> directive.

Media

Supports photo, video, audio, voice, and document sending/receiving:

// Send
await telegramChannel.sendMedia(chatId, "/path/to/file.jpg", { caption: "Look at this" });

// Receive — handled by bot.on("message:photo") etc.
// Downloads via Bot API getFile → local /tmp/joelclaw-media/
// Emits media/received Inngest event for pipeline processing

File size limit: 20MB download via Bot API (larger files need direct Telegram API).

Streaming (ADR-0160)

Progressive text updates with cursor:

import { begin, pushDelta, finish, abort } from "./telegram-stream";

// On prompt dispatch
begin({ chatId, bot, replyTo });

// On each text_delta event
pushDelta(delta);

// On message_end
await finish(fullText);
  • Plain text during streaming (no parse_mode) — avoids broken HTML on partial content
  • HTML formatting only on finish() — final edit with parse_mode: "HTML"
  • Throttled edits: 800ms minimum between API calls
  • Cursor: appended during streaming, removed on finish
  • initialSendPromise awaited in finish() to prevent race conditions

Inline Buttons & Callbacks (ADR-0070)

// Send message with buttons
await sendTelegramMessage(chatId, "Choose:", {
  buttons: [
    [{ text: "✅ Approve", action: "approve:item123" }],
    [{ text: "❌ Reject", action: "reject:item123" }],
  ]
});

// Callback handler fires telegram/callback.received Inngest event
// Then edits message to show action taken + removes buttons

Callback data max: 64 bytes. Format: action:context.

Commands

  • /stop — abort current turn without killing the daemon.
  • /esc — alias for /stop.
  • /kill — hard stop: disables launchd service + kills process. Emergency use only.

Configuration

Currently via environment variables (migrating to ~/.joelclaw/channels.toml per ADR-0162):

Env VarPurpose
TELEGRAM_BOT_TOKENGrammy bot token
TELEGRAM_USER_IDJoel's Telegram user ID (only authorized user)

Security

  • Single-user lockdown — middleware drops all messages from users other than TELEGRAM_USER_ID
  • No token in configchannels.toml references agent-secrets key names, not raw tokens
  • Media downloads to /tmp/joelclaw-media/ with UUID filenames (no path traversal)

Troubleshooting

Bot not receiving messages

  1. Check gateway is running: cat /tmp/joelclaw/gateway.pid && ps aux | grep daemon.ts
  2. Check Telegram polling started: grep "telegram.*started" /tmp/joelclaw/gateway.log
  3. Verify token: curl https://api.telegram.org/bot<TOKEN>/getMe
  4. Check polling errors in stderr: rg "telegram.channel.start_failed|failed to start polling|getUpdates" /tmp/joelclaw/gateway.err
  5. Check ownership lifecycle telemetry:

- joelclaw otel search "telegram.channel.poll_owner" --hours 1 - joelclaw otel search "telegram.channel.retry_scheduled" --hours 1

If you see repeated 409 conflicts, another bot process is polling the same token. Telegram phone/desktop apps are not Bot API pollers and do not cause getUpdates contention.

Messages arriving but no response

  1. Check command queue: grep "command-queue\|enqueue" /tmp/joelclaw/gateway.log | tail -10
  2. Check pi session health: grep "session\|prompt" /tmp/joelclaw/gateway.log | tail -10
  3. Check outbound routing: grep "outbound\|response ready" /tmp/joelclaw/gateway.log | tail -10

Streaming not working

  1. Verify text_delta events: grep "text_delta" /tmp/joelclaw/gateway.log | tail -5
  2. Check telegram-stream lifecycle: grep "telegram-stream" /tmp/joelclaw/gateway.log | tail -10
  3. Common issue: model does tool calls before text → no deltas until after tools complete
  4. Race condition fix: initialSendPromise in finish() (commit 175c6ca)

HTML formatting broken

  1. Check converter output: TelegramConverter.convert(text) + .validate(result)
  2. Fallback: adapter auto-strips HTML and sends plain text if validation fails
  3. Streaming path sends plain text (no parse_mode), only finish() adds HTML

Related ADRs

  • ADR-0042 — Media download pipeline
  • ADR-0070 — Inline buttons and callbacks
  • ADR-0160 — Telegram streaming UX
  • ADR-0162 — Reactions, replies, and channel configuration

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.89%
按下载量换算55

Claude

32.5%
按下载量换算50

Cursor

18.44%
按下载量换算28

Gemini CLI

10.05%
按下载量换算15

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

未通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills