npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

icq-bot

v2.1.45

Published

ICQ-BOT

Downloads

445

Readme

icq-bot

codecov Build Status Known Vulnerabilities

Interface for working with ICQ bots for NodeJS / TypeScript. In this package, I (the developer) tried to get rid of all the dependencies as much as possible and made the most similar code and interface to the version of "bot-python" from pip from mail.ru

All server response interfaces and entities are available for working with TypeScrip and are ready for export.

Testing the project is carried out using the mocha framework.

There is also a description of the project in Russian in README.md available after downloading.

Constraint

Introduction

The library supports Bot API 1.0 interface and compatible with NodeJS version 13.10.1

Registration

To create your own bot, you need to register in ICQ and write a Metabot chat

/newbot

Follow the instructions below.

Metobot will be able to answer you if you add it to your contact list or start a dialogue yourself.

Installation

Install using npm:

npm install icq-bot -s

Pay attention to the current major version of the bot

Usage

Initialization for JS project

const ICQ = requier ("icq-bot").default;
const TOKEN = "XXX.XXX.XXX:XXX"
const bot = new ICQ.Bot(TOKEN);
`` ``
where XXX.XXX.XXX:XXX is the token that issued the meta bot in the dialog

The class constructor supports two parameters
`` `typescript

const options = {
    apiUrlBase: string,
    name: string,
    version: string,
    timeoutS: number,
    pollTimeS: number
};

new ICQ.Bot (TOKEN, options);

Where:

  • apiUrlBase * - Base reference to the API. default: https://api.icq.net/bot/v1
  • name * - bot name
  • version * - bot version (used in requests in the header in the User-Agent parameter)
  • timeoutS * - Response time. not used anywhere.
  • pollTimeS * - time of maximally resolved request

Sending messages through the API

const chatId = "XXX";
bot.sendText (charID, "TEXT HERE .."). then (response => {console.log (response.ok)});

where XXX is the chat number

How to use pooling

First you need to create a handler. You can use the following handlers (Handlers): ICQ.Handler. *:

  • HelpCommand - user sent help command
  • Message - the user sent a message
  • NewChatMembers - the user has joined the general chat
  • LeftChatMembers - user left the chat
  • PinnedMessage - user pinned a chat entry
  • UnPinnedMessage - user unpin the chat entry
  • EditedMessage - user edited post
  • DeletedMessage - user deleted the message
  • Command - the user sent a command to which team is the first word
  • StartCommand - the user sent the start command
  • FeedbackCommand - the user sent the command "feedback text" and in response the administrator (specified in the handler parameters) receives a message with the chat number and text
  • UnknownCommand - All commands not processed by other handlers
  • BotButtonCommandHandler - the user clicked on the button with the command

The handler must be placed in an instance of the dipecher class in an instance of the bot class. To do this, in the previously created bot, you must call the getDispatcher() method which will return the current dispatcher.

Next, call the addHanler (handler: BaseHandler) method and place one of the handlers created above. The example shows the Message handler

let handler = new ICQ.Handler.Message (null, (bot, event) => {});
bot.getDispatcher (). addHandler (handler);
bot.startPolling ();

How to use filters for handlers

You can use the following filters: ICQ.Filters. *:

  • message * - the handler filters only messages with text
  • command * - filters only messages with the prefix of the "/" or "."
  • file * - the handler filters only sending files
  • image * - only sending image files
  • video * - only send video files
  • audio * - only sending files with sound extensions
  • media * - filters image files, video and audio
  • sticker * - sticker sent
  • url * - only links in messages except for sending files
  • regexp - regular expression filter
  • mention - messages mentioning you
  • forward * - only a message of type Forward (Forwarded message from another chat)
  • reply * - only messages with type Reply (Quote message)
  • sender - only messages from a specific user

Все фильтры с * возвращают уже созданные объекты. Все остальные возвращают классы.

  • new ICQ.Filters.regexp(pattern: RegExp)
  • new ICQ.Filters.mention(userId: Number)
  • new ICQ.Filters.sender(userId: Number)

Также доступен класс FilterComposite с тремя статическими методами:

  • FilterComposite.or(filter, filter)
  • FilterComposite.and(filter, filter)
  • FilterComposite.not (filter) На вход он принемает любые фильтры, которые будут пременяться согласно выбранного правила обработки.
let handler = new ICQ.Handler.Message(ICQ.Filter.url, (bot, event) => { 
   // code here...
});
bot.getDispatcher().addHandler(handler);
bot.startPolling(); 

Обратите внимание, что обработчики будут вызывать функцию обратного вызова каждый раз когда они подходят фильтру. Если у вас 2 обработчика, например ICQ.Handler.Message(null,... и ICQ.Handler.Message(ICQ.Filter.url,... то на сообщение со ссылкой будут вызваны оба обработчика, а на сообщение без ссылки только один обработчик.

Создание кнопок

Кнопки вынесены в отдельный класс ICQButton

let buttonOk = new ICQ.Button("Ok", "1319184")
let buttonOpenWeb = new ICQ.Button("Ok", null, "https://fake-mm.ru")
  • text - Текст, который будет отображен на кнопке. Допустимо использовать \n для того, чтобы текст был на несколько строк
  • callbackData - Данные, которые будут отправлены боту в момент нажатия на кнопку
  • url - который необходимо открыть по нажатию на кнопку

Vse fil'try s * vozvrashchayut uzhe sozdannyye ob"yekty. Vse ostal'nyye vozvrashchayut klassy.

  • new ICQ.Filters.regexp(pattern: RegExp)
  • new ICQ.Filters.mention(userId: Number)
  • new ICQ.Filters.sender(userId: Number)

Takzhe dostupen klass FilterComposite s tremya staticheskimi metodami:

  • FilterComposite.or(filter, filter)
  • FilterComposite.and(filter, filter)
  • FilterComposite.not (filter) Na vkhod on prinemayet lyubyye fil'try, kotoryye budut premenyat'sya soglasno vybrannogo pravila obrabotki.
let handler = new ICQ.Handler.Message(ICQ.Filter.url, (bot, event) => { 
   // code here...
});
bot.getDispatcher().addHandler(handler);
bot.startPolling(); 

Obratite vnimaniye, chto obrabotchiki budut vyzyvat' funktsiyu obratnogo vyzova kazhdyy raz kogda oni podkhodyat fil'tru. Yesli u vas 2 obrabotchika, naprimer ICQ.Handler.Message(null,... i ICQ.Handler.Message(ICQ.Filter.url,... to na soobshcheniye so ssylkoy budut vyzvany oba obrabotchika, a na soobshcheniye bez ssylki tol'ko odin obrabotchik.

Sozdaniye knopok

Knopki vyneseny v otdel'nyy klass ICQButton

let buttonOk = new ICQ.Button("Ok", "1319184")
let buttonOpenWeb = new ICQ.Button("Ok", null, "https://fake-mm.ru")
  • text - Tekst, kotoryy budet otobrazhen na knopke. Dopustimo ispol'zovat' \n dlya togo, chtoby tekst byl na neskol'ko strok
  • callbackData - Dannyye, kotoryye budut otpravleny botu v moment nazhatiya na knopku
  • url - kotoryy neobkhodimo otkryt' po nazhatiyu na knopku Развернуть 1460/5000 All filters with * return already created objects. All others return classes.
  • new ICQ.Filters.regexp (pattern: RegExp)
  • new ICQ.Filters.mention (userId: Number)
  • new ICQ.Filters.sender (userId: Number)

The FilterComposite class is also available with three static methods:

  • FilterComposite.or (filter, filter)
  • FilterComposite.and (filter, filter)
  • FilterComposite.not (filter) At the input, it accepts any filters that will be changed according to the selected processing rule.
let handler = new ICQ.Handler.Message (ICQ.Filter.url, (bot, event) => {
   // code here ...
});
bot.getDispatcher (). addHandler (handler);
bot.startPolling ();

Note that handlers will call the callback function every time they match the filter. If you have 2 handlers, for example ICQ.Handler.Message (null, ... and ICQ.Handler.Message (ICQ.Filter.url, ...), then both handlers will be called to the message with the link, and only the message without the link one handler.

Creating buttons

Buttons moved to a separate ICQButton class

let buttonOk = new ICQ.Button ("Ok", "1319184")
let buttonOpenWeb = new ICQ.Button ("Ok", null, "https://fake-mm.ru")
  • text - The text to be displayed on the button. It is permissible to use ** \ n ** so that the text is on several lines
  • callbackData - Data that will be sent to the bot when the button is clicked
  • url - which must be opened by clicking on the button

Sample code

Simple bot

Purpose:

  • We write bot any message
  • We get the answer "Hello!"
  • Delete your message from everyone
  • We receive in response the message "Why!"

Execution

Commands in the bash terminal

# Create a directory
mkdir testBot
# Go to it
cd ./testBot
# Create a default npm project
npm init --force
# Install icq-bot dependency
npm i icq-bot -s

Next, create and paste the code below with your token in index.js.

  • file index.js
const ICQ = require('icq-bot').default;
 
const bot = new ICQ.Bot(ВАШ_ТОКЕН_БОТА);
 
const handlerNewMessage = new ICQ.Handler.Message(null, (bot, event) => { 
    const chatId = event.fromChatId; 
    console.log(`New Message event.fromChatID = ${chatId}`);  
    bot.sendText(chatId, "Привет!");
});
 
const handlerDeleteMessage = new ICQ.Handler.DeletedMessage(null, (bot, event) => {  
    const chatId = event.fromChatId; 
    console.log(`Deleted Message event.fromChatID = ${chatId}`);  
    bot.sendText(chatId, "Зачем!");
});
  
bot.getDispatcher().addHandler(handlerNewMessage);
bot.getDispatcher().addHandler(handlerDeleteMessage);
 
bot.startPolling();
 

Then it remains to launch our bot

node index.js