UNPKG

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
"use strict"; 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;