The arguments plugin lets you parse & validate arguments of commands / inline query with ease.
- Joi validation support
- Arguments remapping
- Inline query / Message / Channel posts support
You can find documentation here and examples here and try now here
npm i @opengram/arguments
yarn add @opengram/arguments
pnpm add @opengram/arguments
const { Opengram } = require('opengram')
const bot = new Opengram(process.env.BOT_TOKEN)
const Joi = require('joi')
const arguments = require('@opengram/arguments')
// Create middleware instance
const sumArgs = arguments({
mapping: ['first', 'second'], // First argument to "first" property, second to "second" property
errorHandler: (err, ctx) => ctx.reply(`Invalid arguments: ${err.message}`), // Error handler for validation errors
// Validation schema
schema: Joi.object({
first: Joi
.number()
.integer()
.required(),
second: Joi
.number()
.integer()
.required()
})
})
bot.command('sum', sumArgs, ctx => {
// Destructuring assignment from safe, validated object, with converted to number args
const { first, second } = ctx.state.args.result
// Send sum result
return ctx.replyWithHTML(`<b>Result:</b> ${first + second}`)
})
bot.launch()
flowchart TB
U("Incoming update") --> M("Upstream middlewares")
M --> F("Filter by given update types")
F --> E("Has command entity?")
E -- No --> N("Nothing to do, run next")
E -- Yes --> Parsing --> HV("Need mapping?")
HV -- No --> K
HV -- Yes --> Mapping --> NV("Need validation?")
NV -- No --> K
NV -- Yes --> VC("Validate / cast") --> ISV("Valid?")
ISV -- Yes --> K
ISV -- No --> ER("Error handler")
K("Add result to <code>ctx.state</code> and run next") --> DM("Downstream middlewares")