Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@lildiary/vk-bot

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lildiary/vk-bot

🤖 VK bot framework for Node.js, based on Bots Long Poll API, Promises, EventEmmiter and TypeScript

  • 2.6.14
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
9
increased by80%
Maintainers
1
Weekly downloads
 
Created
Source

@lildiary/vk-bot

🤖 Scalable VK bot framework for Node.js, based on Bots Long Poll API and Callback API. Based on node-vk-bot-api

Install

$ npm i @lildiary/vk-bot

Simple example

import { VkBot } from "@lildiary/vk-bot";

const bot = new VkBot("TOKEN");

bot.command("/start", ctx => {
  ctx.reply("Hello!");
});

bot.once("startPoll", () => {
  console.log("Long polling started");
});
bot.startPolling();

Examples

There's a few simple examples.

Tests

$ npm test

Methods

constructor(settings)

Create bot.

// Simple usage
const bot = new VkBot("TOKEN");

// Advanced usage
const bot = new VkBot({
  token: process.env.TOKEN,
  group_id: process.env.GROUP_ID,
  execute_timeout: process.env.EXECUTE_TIMEOUT, // in ms   (50 by default)
  polling_timeout: process.env.POLLING_TIMEOUT // in secs (25 by default),
  v: '5.103', // Vk version, we do not recomend to change it
  pollingVersion: 3  // Vk Polling version, we do not recommend to change it
});

.use(...middlewares)

Add simple middleware.

bot.use((ctx, next) => {
  ctx.message.timestamp = new Date().getTime();

  next();
});

.command(triggers, ...middlewares)

Add middlewares with triggers for message_new event.

bot.command("start", ctx => {
  ctx.reply("Hello!").then(() => {
    console.log("The message is successfuly sent");
  });
});

.event(triggers, ...middlewares)

Add middlewares with triggers for selected events.

bot.event("message_edit", ctx => {
  ctx.reply("Your message was editted");
});

.noCommand(...middlewares)

Add reserved middlewares without triggers.

bot.noCommand(ctx => {
  ctx.reply("No commands for you.");
});

.sendMessage(userId, message, attachment, keyboard, sticker)

Send message to user.

// Simple usage
bot.sendMessage(145003487, "Hello!", "photo1_1");

// Multiple recipients
bot.sendMessage([145003487, 145003488], "Hello!", "photo1_1");

// Advanced usage
bot.sendMessage(145003487, {
  message: "Hello!",
  lat: 59.939095,
  lng: 30.315868
});

// Send image
const file = fs.readFileSync('C:/Users/M4k5y/Projects/lilDiary/Services/bot/logo.png');
bot.sendMessage(145003487, 'Look at my images!', file); // file is a png image Buffer 

.startPolling(ts)

Start polling ts is timestamp of the last event you can get events after ts is not required

bot.startPolling(ts);

.on(event, handler)

Set event listener, useful for saving last ts to DataBase

bot.on("poll", ts => {
  console.log(`Poll is done, ts: ${ts}`);
});

bot.on("error", err => {
  console.log(err);
});

bot.startPolling();

events

"startPoll" - emits when polling starts "poll" - when poll ends, returns ts "error" - emmits error

.once(event, handler)

Set event listener which excecutes once

bot.once("startPoll", ts => {
  console.log("Bot started");
});
bot.startPolling();

Context Methods

.reply(message, attachment, markup, sticker)

Helper method for reply to the current user.

bot.command("start", ctx => {
  ctx.reply("Hello!");
});

Markup

Keyboards

  • Markup.keyboard(buttons, options): Create keyboard
  • Markup.button(label, color, payload): Create custom button
  • Markup.oneTime(): Set oneTime to keyboard
  • Markup.inline(): Send keyboard with the message
Simple usage
ctx.reply(
  "Select your sport",
  null,
  Markup.keyboard(["Football", "Basketball"]).inline()
);
Advanced usage
ctx.reply(
  "How are you doing?",
  null,
  Markup.keyboard([
    [Markup.button("Normally", "primary")],
    [Markup.button("Fine", "positive"), Markup.button("Bad", "negative")]
  ])
);

.keyboard(buttons, options)

Create keyboard with optional settings.

/*

  Each string has maximum 2 columns.

  | one   | two   |
  | three | four  |
  | five  | six   |

 */

Markup.keyboard(["one", "two", "three", "four", "five", "six"], { columns: 2 });
/*

  By default, columns count for each string is 4.

  | one | two | three |

 */

Markup.keyboard(["one", "two", "three"]);

.button(label, color, payload)

Create custom button.

Markup.button("Start", "positive", {
  foo: "bar"
});

.oneTime()

Helper method for create one time keyboard.

Markup.keyboard(["Start", "Help"]).oneTime();

.inline()

Send keyboard in message box

Markup.keyboard(["test", "Help"]).inline();

Sessions

Store anything for current user in local memory.

Usage

import { VkBot } from "@lildiary/vk-bot";
import Session from "@lildiary/vk-bot/lib/session";

const bot = new VkBot(process.env.TOKEN);
const session = new Session();

bot.use(session.middleware());

bot.on(ctx => {
  ctx.session.counter = ctx.session.counter || 0;
  ctx.session.counter++;

  ctx.reply(`You wrote ${ctx.session.counter} messages.`);
});

bot.startPolling();

API

Options
  • key: Context property name (default: session)
  • getSessionKey: Getter for session key
Default getSessionKey(ctx)
const getSessionKey = ctx => {
  const userId = ctx.message.from_id || ctx.message.user_id;

  return `${userId}:${userId}`;
};

Stage

Scene manager.

import { VkBot, Scene, Session, Stage } from "@lildiary/vk-bot";

const bot = new VkBot(process.env.TOKEN);
const scene = new Scene(
  "meet",
  ctx => {
    ctx.scene.next();
    ctx.reply("How old are you?");
  },
  ctx => {
    ctx.session.age = +ctx.message.text;

    ctx.scene.next();
    ctx.reply("What is your name?");
  },
  ctx => {
    ctx.session.name = ctx.message.text;

    ctx.scene.leave();
    ctx.reply(
      `Nice to meet you, ${ctx.session.name} (${ctx.session.age} years old)`
    );
  }
);
const session = new Session();
const stage = new Stage(scene);

bot.use(session.middleware());
bot.use(stage.middleware());

bot.command("/meet", ctx => {
  ctx.scene.enter("meet");
});

bot.startPolling();

API

Stage
  • constructor(...scenes): Register scenes
Scene
  • constructor(name, ...middlewares): Create scene
  • .command(triggers, ...middlewares): Create commands for scene
Context
ctx.scene.enter(name, [step]) // Enter in scene
ctx.scene.leave()             // Leave from scene
ctx.scene.next()              // Go to the next step in scene
ctx.scene.step                // Getter for step in scene
ctx.scene.step=               // Setter for step in scene

License

MIT.

Keywords

FAQs

Package last updated on 05 Dec 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc