telegram-command-handler
Version:
handle commands like as /command arg1 arg2
95 lines (74 loc) • 3.29 kB
Markdown
`npm i telegram-command-handler`
*depends on [node-telegram-bot-api](https://github.com/yagop/node-telegram-bot-api "node-telegram-bot-api")*
- parse commands with/without bot nickname (like as /command@myBot a b ).
- adding description to the command.
- add own command parser or choose among the ready
- set the chatid and userid of which the command will be processed
### Usage
------------
**1.**
*create new command object*-
```js
new Command(currentBotObject, command, description);
currentBotObject - instance of TelegramBot
command - Object or String
description - *
```
```js
if command is Object - gets
{
name: String command name (without / )
parser: Number of parser (the list is below). Default = 0
chatId: Number id of chat. Default = -1 (off)
userId: Number id of user. Defalut = -1 (off)
}
else gets String command name
```
**List of parsers**:
- Index: 0; Command format: `/command arg1 "arg2 ..."`; Returns `Array [arg1,arg2] with field "=ERRORS" Array []`
- index: 1; Command format: `/command name1=value name2="value ..."`; Returns `Object {name1:value, name2:value, "=ERRORS":[]}`
**warnings**:
- if you do not specify userId AND! chatId, handler will use more efficient function.
- "=ERRORS" array contains invalid fragments of args string.
- object
------------
**2.**
*add listener on command receiving* - `command.on("receive",function(msg, arguments){...})`
msg - normal message object like as in `.on("message")`
Also listener can be added with `command.onReceive(handler)` and removed with `command.offReceive(handler)`
------------
**3.**
*To add own parser* - use `Command.addParser(commandFinder(botName, commandName){}, argsParser(argsString){})` (this is static method)
------------
**4.**
*To get parser* - use `Command.getParser(index)` (this is static method)
- `commandFInder` - function with 2 String args - bot username and command name.
Should return a regular expression that checks whether the command is typed and separates the string with parameters.
Example of return `commandFInder("myBot","command")` when the current command is `/command@myBot arg1 arg2`: `[anything, " arg1 arg2"]`
As you can see, element number 1 should always contain a string of parameters.
- `argsParser` - function with 1 arg - the parameters string that was separated in commandFinder. Should return array, object etc with args.
------------
**5.**
listening to the text begins **asynchronously**. Therefore, in order to simulate sending a command, for example, you should wait to end of execution `command.initialization`!
```js
const BotAPI = require('node-telegram-bot-api');
const Command = require('telegram-command-handler');
const bot = new BotAPI(options.token);//add longpolling, webhook etc
//....
const help = new Command(bot, "help",
`*help*
_Description_: get commands description.
_Usage_: /help [command]
_Examples_:
|+- to get all commands print /help
|+- to get about gettrack - /help gettrack`)
help.on("receive", function(msg, args){
if(!args["=ERRORS"].length)
bot.sendMessage(msg.chat.id, `args: ${args.join(' ')}`);
});
```
- this module uses ES6 futures!