1 | "use strict";
|
2 | var __extends = (this && this.__extends) || (function () {
|
3 | var extendStatics = Object.setPrototypeOf ||
|
4 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
5 | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
6 | return function (d, b) {
|
7 | extendStatics(d, b);
|
8 | function __() { this.constructor = d; }
|
9 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
10 | };
|
11 | })();
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | var request = require("request");
|
14 | var channel_1 = require("./channel");
|
15 | var logger_1 = require("./logger");
|
16 | var Telegram = (function (_super) {
|
17 | __extends(Telegram, _super);
|
18 | function Telegram(bot) {
|
19 | return _super.call(this, { bot: bot, log: new logger_1.TelegramLogger(bot) }) || this;
|
20 | }
|
21 | Telegram.prototype.execute = function (body, parameters, handler) {
|
22 | var _this = this;
|
23 | var payload = (body["callback_query"] || body);
|
24 | return new Promise(function (resolve, reject) {
|
25 | _this.context.log.incoming(body);
|
26 |
|
27 | if (payload.data || (payload.message && payload.message.text)) {
|
28 | handler(_this.context.bot, payload, "telegram", function (messages) {
|
29 | resolve(_this.send({
|
30 | messages: messages,
|
31 | sender: payload.message.chat.id
|
32 | }));
|
33 | }, function (err) {
|
34 | reject(err);
|
35 | });
|
36 | }
|
37 | else {
|
38 | resolve();
|
39 | }
|
40 | });
|
41 | };
|
42 | Telegram.prototype.send = function (body) {
|
43 | var _this = this;
|
44 | return new Promise(function (resolve) {
|
45 | var response = (body.messages || []).map(function (message) { return function () {
|
46 | return new Promise(function (resolve, reject) {
|
47 | var supportedMethods = [
|
48 | "message",
|
49 | "photo",
|
50 | "audio",
|
51 | "document",
|
52 | "location",
|
53 | "venue",
|
54 | "contact"
|
55 | ];
|
56 | var method = "sendMessage";
|
57 | if (message.type &&
|
58 | supportedMethods.indexOf(message.type.toLowerCase()) >= 0) {
|
59 | method = message.type.toLowerCase();
|
60 | method = "send" + method
|
61 | .substr(0, 1)
|
62 | .toUpperCase() + method.substr(1, method.length - 1);
|
63 | }
|
64 | var uri = "https://api.telegram.org/bot" + (process.env
|
65 | .RECIME_TELEGRAM_ACCESS_TOKEN ||
|
66 | _this.context.bot.config
|
67 | .RECIME_TELEGRAM_ACCESS_TOKEN) + "/" + method;
|
68 | var options = {
|
69 | uri: uri,
|
70 | method: "POST",
|
71 | json: message.payload || message
|
72 | };
|
73 | options.json.chat_id = body.sender;
|
74 | request(options, function (err, response, result) {
|
75 | _this.context.log.outgoing(options, result);
|
76 | if (!err && response.statusCode === 200) {
|
77 | resolve();
|
78 | }
|
79 | else {
|
80 | if (result && result.ok === "false") {
|
81 | reject(result);
|
82 | }
|
83 | else if (err) {
|
84 | console.error(err);
|
85 | reject(err);
|
86 | }
|
87 | }
|
88 | });
|
89 | });
|
90 | }; });
|
91 | return response
|
92 | .reduce(function (a, b) {
|
93 | return a.then(function (messages) {
|
94 | return b().then(function (message) {
|
95 | return;
|
96 | });
|
97 | });
|
98 | }, Promise.resolve())
|
99 | .then(function () {
|
100 | resolve({
|
101 | succcess: true
|
102 | });
|
103 | });
|
104 | });
|
105 | };
|
106 | return Telegram;
|
107 | }(channel_1.Channel));
|
108 | exports.Telegram = Telegram;
|