setup-bot-handlers | Skill Performance & Reviews | TopRankSkills

TopRank Skills

Home / Skills / tools / setup-bot-handlers

setup-bot-handlers

maintained by vendelieu

star 244 account_tree 18 verified_user MIT License
bolt View GitHub

name: setup-bot-handlers description: [Bot developer] Sets up bot handlers using DSL or annotations. Use when configuring command handlers, input handlers, common handlers, update handlers, or fallback handlers for the telegram-bot library.

Setup Bot Handlers

Two Approaches

  • DSL: bot.setFunctionality { ... } — define handlers inline
  • Annotations: @CommandHandler, @InputHandler, etc. — KSP generates activities; use with bot.handleUpdates() (loads handlers via META-INF)

DSL Handlers

Inside bot.setFunctionality { }:

Handler Purpose
onCommand("/start") { } Commands (e.g. /start)
onInput("id") { } Single-step input; route via bot.inputListener[user] = "id"
inputChain("id") { }.andThen { } Multi-step input chain
common("text") { } or common(Regex("...")) { } Text/regex match (lower priority than commands)
onUpdate(UpdateType.X) { } All updates of given type
whenNotHandled { } Fallback for unprocessed updates

Typed Update Handlers

Use typed wrappers for ActivityCtx<XxxUpdate>:

  • onMessage { }MessageUpdate
  • onCallbackQuery { }CallbackQueryUpdate
  • onInlineQuery { }InlineQueryUpdate
  • onEditedMessage { }, onChannelPost { }, onChatMember { }, etc.

Input Listener

Route the next user message to an input handler or chain:

bot.inputListener[user] = "conversation"
// or
bot.inputListener.set(user) { "conversation-2step" }

Annotation Handlers

Annotation Purpose
@CommandHandler(["/start"]) Command handler
@CommandHandler.CallbackQuery(["/data"]) Callback query with optional autoAnswer
@InputHandler(["id"]) Input handler
@CommonHandler.Text(["value"]) or @CommonHandler.Regex("...") Text/regex match
@UpdateHandler([UpdateType.MESSAGE, ...]) Update type handler
@UnprocessedHandler Fallback

Guards

Add pre-processing checks:

  • DSL: guard = UserPresentGuard::class (or DefaultGuard::class)
  • Annotation: @Guard(UserPresentGuard::class) or @Guard(guard = UserPresentGuard::class)

Supported by: CommandHandler, CommandHandler.CallbackQuery, InputHandler.

Rate Limits

  • DSL: rateLimits = RateLimits.NOT_LIMITED or custom
  • Annotation: @RateLimits(period = 60_000, rate = 5) — 5 requests per 60 seconds
  • Default: no limit

Supported by: CommandHandler, CallbackQuery, InputHandler, CommonHandler.

ArgParser

Custom argument parsing for commands and callback data:

  • Annotation: @ArgParser(argParser = CustomArgParser::class)
  • Supported by: CommandHandler, CallbackQuery, CommonHandler
  • Default: DefaultArgParser

Annotation Reference

Annotation Parameters Default
@CommandHandler value (commands), scope (UpdateType[]) scope: MESSAGE
@CommandHandler.CallbackQuery value (callback data prefixes), autoAnswer (bool) autoAnswer: false
@InputHandler value (input identifiers)
@CommonHandler.Text value, filters, priority, scope filters: [], priority: 0, scope: MESSAGE
@CommonHandler.Regex value (pattern), options, filters, priority, scope options: [], filters: [], priority: 0, scope: MESSAGE
@UpdateHandler type (UpdateType[])
@UnprocessedHandler
@Guard guard (KClass) DefaultGuard
@ArgParser argParser (KClass) DefaultArgParser
@RateLimits period (ms), rate (requests) 0, 0

Reference

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!

Skill Details

GitHub Stars 244
GitHub Forks 18
Created Mar 2026
Last Updated 3个月前
tools tools system admin

Related Skills

docker-expert
chevron_right
telnyx-network
chevron_right
plex

plex

openclaw
star 2.4k
chevron_right
discord-governance
chevron_right
hetzner-provisioner
chevron_right

Build your own?

Join 12,000+ developers contributing to the Claude ecosystem.