recime-bot-runtime
Version:
This runtime is intended to run inside a micro-service container with platform specific integration and module interpreter.
100 lines (99 loc) • 4.62 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var request = require("request");
var channel_1 = require("./channel");
var logger_1 = require("./logger");
var Telegram = /** @class */ (function (_super) {
__extends(Telegram, _super);
function Telegram(bot) {
return _super.call(this, { bot: bot, log: new logger_1.TelegramLogger(bot) }) || this;
}
Telegram.prototype.execute = function (body, parameters, handler) {
var _this = this;
var payload = (body["callback_query"] || body);
return new Promise(function (resolve, reject) {
_this.context.log.incoming(body);
// ignore group add / remove.
if (payload.data || (payload.message && payload.message.text)) {
handler(_this.context.bot, payload, "telegram", function (messages) {
var response = (messages || []).map(function (message) { return function () {
return new Promise(function (resolve, reject) {
var supportedMethods = [
"message",
"photo",
"audio",
"document",
"location",
"venue",
"contact"
];
var method = "sendMessage";
if (message.type &&
supportedMethods.indexOf(message.type.toLowerCase()) >= 0) {
method = message.type.toLowerCase();
method = "send" + method
.substr(0, 1)
.toUpperCase() + method.substr(1, method.length - 1);
}
var uri = "https://api.telegram.org/bot" + (process.env
.RECIME_TELEGRAM_ACCESS_TOKEN ||
_this.context.bot.config
.RECIME_TELEGRAM_ACCESS_TOKEN) + "/" + method;
var options = {
uri: uri,
method: "POST",
json: message.payload || message
};
options.json.chat_id = payload.message.chat.id;
request(options, function (err, response, result) {
_this.context.log.outgoing(options, result);
if (!err && response.statusCode === 200) {
resolve();
}
else {
if (result && result.ok === "false") {
reject(result);
}
else if (err) {
console.error(err);
reject(err);
}
}
});
});
}; });
return response
.reduce(function (a, b) {
return a.then(function (messages) {
return b().then(function (message) {
return;
});
});
}, Promise.resolve())
.then(function () {
resolve({
succcess: true
});
});
}, function (err) {
reject(err);
});
}
else {
resolve();
}
});
};
return Telegram;
}(channel_1.Channel));
exports.Telegram = Telegram;