recime-bot-runtime
Version:
This runtime is intended to run inside a micro-service container with platform specific integration and module interpreter.
116 lines (115 loc) • 4.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var request = require("request");
var IndividualMessageThreshold = 1;
var Viber = /** @class */ (function () {
function Viber(bot) {
this.bot = bot;
}
Viber.prototype.send = function (message, filter) {
var _this = this;
return this.sendBroadcast(message, filter).then(function (res) {
if (res.status === 0) {
return [
{
message_token: res.message_token,
failed_list: res.failed_list
}
];
}
else {
throw res;
}
}).catch(function (ex) {
// can not send broadcast.
console.error('broadcast', ex);
if (ex.status === 19) {
if (filter && filter.length < IndividualMessageThreshold) {
var response = filter.map(function (id) { return function () {
return _this.sendToReceiver(message, id);
}; });
return response
.reduce(function (a, b) {
return a.then(function (messages) {
return b().then(function (message) {
if (message.status === 0) {
messages.push({
message_token: message.message_token
});
}
return messages;
});
});
}, Promise.resolve([]));
}
else {
return Promise.resolve([]);
}
}
else {
// we tried and failed.
console.log('broadcast', ex);
return Promise.resolve([]);
}
});
};
Viber.prototype.sendBroadcast = function (message, filter) {
var _this = this;
message.broadcast_list = filter;
return new Promise(function (resolve, reject) {
request({
json: true,
method: "POST",
url: "https://chatapi.viber.com/pa/broadcast_message",
headers: {
"X-Viber-Auth-Token": process.env.RECIME_VIBER_ACCESS_TOKEN || _this.bot.config.RECIME_VIBER_ACCESS_TOKEN
},
body: message
}, function (err, response, body) {
if (err) {
console.error('broadcast', err);
return reject(err);
}
if (body && body.length > 0) {
if (body[0].status !== 'ok') {
return reject({
code: body[0].status,
message: body[0].status_message
});
}
}
resolve(body);
});
});
};
Viber.prototype.sendToReceiver = function (message, receiver) {
var _this = this;
message.receiver = receiver;
return new Promise(function (resolve, reject) {
request({
json: true,
method: "POST",
url: "https://chatapi.viber.com/pa/send_message",
headers: {
"X-Viber-Auth-Token": process.env.RECIME_VIBER_ACCESS_TOKEN || _this.bot.config.RECIME_VIBER_ACCESS_TOKEN
},
body: message
}, function (err, response, body) {
if (err) {
return reject(err);
}
if (body && body.length > 0) {
if (body[0].status !== 'ok') {
return reject({
code: body[0].status,
message: body[0].status_message
});
}
}
resolve(body);
});
});
};
return Viber;
}());
exports.Viber = Viber;