mirror of
https://github.com/valentineus/iii-for-vk.git
synced 2025-04-28 01:41:25 +03:00
Release of version 0.0.2.
This commit is contained in:
parent
a078043572
commit
0c300e7735
2
.gitignore
vendored
2
.gitignore
vendored
@ -58,4 +58,4 @@ typings/
|
||||
.env
|
||||
|
||||
# Compiled files
|
||||
lib/
|
||||
/lib
|
||||
|
@ -58,7 +58,7 @@ typings/
|
||||
.env
|
||||
|
||||
# Source
|
||||
src/
|
||||
/src/
|
||||
|
||||
# Example of use
|
||||
example.js
|
||||
/example.js
|
||||
|
@ -1,4 +1,9 @@
|
||||
# Description of releases
|
||||
## 0.0.2 (05-06-2017)
|
||||
|
||||
Fix:
|
||||
- Fixed exclusion files.
|
||||
|
||||
## 0.0.1 (05-06-2017)
|
||||
|
||||
Release.
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "iii-for-vk",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.2",
|
||||
"description": "Simple automatic reply to incoming messages.",
|
||||
"homepage": "https://github.com/valentineus/iii-for-vk",
|
||||
"main": "lib/core.js",
|
||||
|
185
src/lib/core.js
Normal file
185
src/lib/core.js
Normal file
@ -0,0 +1,185 @@
|
||||
/**
|
||||
* @project iii-for-vk
|
||||
* @author Valentin Popov <info@valentineus.link>
|
||||
* @license See LICENSE.md file included in this distribution.
|
||||
*/
|
||||
import urlParseLax from 'url-parse-lax';
|
||||
import queryString from 'querystring';
|
||||
import iiiClient from 'iii-client';
|
||||
import EventEmitter from 'events';
|
||||
import inherits from 'inherits';
|
||||
import https from 'https';
|
||||
import SDK from 'vksdk';
|
||||
|
||||
inherits(Bot, EventEmitter);
|
||||
module.exports = Bot;
|
||||
|
||||
/**
|
||||
* Class representing a Bot.
|
||||
* @class
|
||||
*/
|
||||
function Bot(opts) {
|
||||
opts = opts || {};
|
||||
var self = this;
|
||||
|
||||
self.uuid = opts.uuid;
|
||||
self.token = opts.token;
|
||||
self.appID = opts.appID;
|
||||
self.appSecret = opts.appSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initial initialization of all systems and services.
|
||||
* @param {requestCallback} callback - The callback that handles the response.
|
||||
*/
|
||||
Bot.prototype.init = function(callback) {
|
||||
var self = this;
|
||||
|
||||
// Initialize the connection to the social network
|
||||
self._vk = new SDK({
|
||||
appId: self.appID,
|
||||
appSecret: self.appSecret,
|
||||
https: true,
|
||||
secure: true
|
||||
});
|
||||
|
||||
// Setting the user's token
|
||||
self._vk.setToken(self.token);
|
||||
|
||||
// Starting services
|
||||
self._eventLoop();
|
||||
// Connecting filters
|
||||
self._filterMessages();
|
||||
|
||||
// Connecting to the bot server
|
||||
iiiClient.connect(self.uuid, (raw) => callback(raw.cuid));
|
||||
};
|
||||
|
||||
/**
|
||||
* Receive a message by its ID.
|
||||
* @param {Number} id - The message ID.
|
||||
* @param {requestCallback} callback - The callback that handles the response.
|
||||
*/
|
||||
Bot.prototype.getMessageByID = function(id, callback) {
|
||||
id = id || false;
|
||||
var self = this;
|
||||
|
||||
self._vk.request('messages.getById', {
|
||||
message_ids: id,
|
||||
preview_length: 0
|
||||
}, (raw) => {
|
||||
if (raw.error) throw new Error(raw.error.error_msg);
|
||||
callback(raw.response.items.shift());
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Simplifies the sending of a message to the user.
|
||||
* The social network API is used.
|
||||
* More information: https://vk.com/dev/messages.send
|
||||
* @param {Object} options - Object with parameters.
|
||||
* @param {Object} options.user_id - User ID.
|
||||
* @param {Object} options.message - Message text.
|
||||
* @param {requestCallback} callback - The callback that handles the response.
|
||||
*/
|
||||
Bot.prototype.sendMessageToVK = function(options) {
|
||||
options = options || {};
|
||||
var self = this;
|
||||
self._vk.request('messages.send', options, () => {});
|
||||
};
|
||||
|
||||
/**
|
||||
* Simplifies sending a message to the bot.
|
||||
* @param {Object} options - Object with parameters.
|
||||
* @param {Object} options.cuid - Session identifier.
|
||||
* @param {Object} options.text - Message text.
|
||||
* @param {requestCallback} callback - The callback that handles the response.
|
||||
*/
|
||||
Bot.prototype.sendMessageToBot = function(options, callback) {
|
||||
options = options || {};
|
||||
iiiClient.send(options, (answer) => callback(answer));
|
||||
};
|
||||
|
||||
/**
|
||||
* The event startup service.
|
||||
*/
|
||||
Bot.prototype._eventLoop = function() {
|
||||
var self = this;
|
||||
|
||||
self._getEvents();
|
||||
self.on('events', (data) => {
|
||||
self._getEvents(data.ts);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Filter events for incoming messages.
|
||||
* @fires: Bot#messages
|
||||
*/
|
||||
Bot.prototype._filterMessages = function() {
|
||||
var self = this;
|
||||
|
||||
self.on('events', function(data) {
|
||||
data.updates.filter(function(item) {
|
||||
if (item[0] == 4) self.emit('messages', item);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Obtaining the Long Poll server address.
|
||||
* @param {requestCallback} callback - The callback that handles the response.
|
||||
*/
|
||||
Bot.prototype._getLongPollServer = function(callback) {
|
||||
var self = this;
|
||||
|
||||
self._vk.request('messages.getLongPollServer', {
|
||||
need_pts: false
|
||||
}, (raw) => {
|
||||
if (raw.error) throw new Error(raw.error.error_msg);
|
||||
callback(raw.response);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Waiting and returning the event.
|
||||
* @fires: Bot#events
|
||||
* @param {String=} [ts] - The ID of the last event.
|
||||
*/
|
||||
Bot.prototype._getEvents = function(ts) {
|
||||
var self = this;
|
||||
|
||||
// Server address request
|
||||
self._getLongPollServer(function(raw) {
|
||||
ts = ts || raw.ts;
|
||||
|
||||
// Analysis of the connection address
|
||||
var url = urlParseLax(raw.server);
|
||||
|
||||
// Details: https://vk.com/dev/using_longpoll
|
||||
var options = queryString.stringify({
|
||||
act: 'a_check',
|
||||
key: raw.key,
|
||||
ts: ts,
|
||||
wait: 25,
|
||||
mode: 2,
|
||||
version: 1
|
||||
});
|
||||
|
||||
// Configuring the connection
|
||||
var query = {
|
||||
hostname: url.hostname,
|
||||
path: url.pathname + '?' + options
|
||||
};
|
||||
|
||||
https.get(query, function(response) {
|
||||
var answer = {};
|
||||
response.setEncoding('utf8');
|
||||
response.on('data', (data) => answer = data);
|
||||
response.on('end', () => {
|
||||
answer = JSON.parse(answer);
|
||||
self.emit('events', answer);
|
||||
});
|
||||
}).on('error', (error) => Error(error));
|
||||
});
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user