# Vendelieu Telegram Bot Telegram Bot

> Add Ktnip Parameter Strategy

- Skill: `tomevault-io/vendelieu-telegram-bot-telegram-bot` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/vendelieu-telegram-bot-telegram-bot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/vendelieu-telegram-bot-telegram-bot/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/vendelieu-telegram-bot-telegram-bot

---


# Add Ktnip Parameter Strategy

## Workflow

### 1. Add ParameterResolutionStrategy

- In [ParameterResolutionStrategy.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/dto/ParameterResolutionStrategy.kt)
- Add new `data class` extending `ParameterResolutionStrategy`
- Include `typeName`, `isNullable`; add strategy-specific fields (e.g. `parameterName`, `updateTypeSimpleName`)

```kotlin
data class MyParam(
    override val typeName: TypeName,
    override val isNullable: Boolean,
    val myField: String,
) : ParameterResolutionStrategy()
```

### 2. Add TypeConstant (if new type)

- In [TypeConstants.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/utils/TypeConstants.kt)
- Add `val myTypeClass: TypeName = MyType::class.asTypeName()`

### 3. Update ParameterResolver

- In [ParameterResolver.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/codegen/ParameterResolver.kt)
- Add branch in `resolve()` when block:
  - Match `typeName` (use TypeConstants or `in TypeMapper.getAllTypedUpdateTypes()` for typed updates)
  - Return new strategy instance
  - Handle `@ParamMapping` for parameter name if from parameters map

### 4. Update InvocationCodeGenerator

- In [InvocationCodeGenerator.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/codegen/InvocationCodeGenerator.kt)
- Add branch in `generateParameterResolution()` when block
- Generate CodeBlock: `CodeBlock.of("val param%L = ...\n", parameterIndex, ...)`
- Add imports via `fileBuilder.addImport(...)` if needed
- Use `nullabilityMark` for `!!` when non-null

### 5. Update generateInvocationCode (if needed)

- If strategy affects `isBotNeeded`, `isUpdateNeeded`, `isParametersNeeded`, `isUserNeeded`: add to the `strategies.any { ... }` checks

## Reference

- [ParameterResolutionStrategy.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/dto/ParameterResolutionStrategy.kt)
- [ParameterResolver.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/codegen/ParameterResolver.kt)
- [InvocationCodeGenerator.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/codegen/InvocationCodeGenerator.kt)
- [TypeMapper.kt](ktnip/src/jvmMain/kotlin/eu/vendeli/ktnip/codegen/TypeMapper.kt) - for TypedUpdate: add to updateTypeMap

---
> Source: [vendelieu/telegram-bot](https://github.com/vendelieu/telegram-bot) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-23 -->

