SaveText.Ru

Без имени
  1. var config = require("./config");
  2.  
  3. config.version = require('./package.json').version;
  4. config.revision = require('child_process')
  5.         .execSync('git rev-parse --short HEAD')
  6.         .toString().trim();
  7. var util = require('util');//для форматирования строки %s
  8. var express = {}; try { express = require('express'); } catch (e) { console.log("run `npm update`//" + e); throw new Error(''); }
  9. const bodyParser = require('body-parser');//json & html... parser
  10. const app = express();
  11. const glo = require('./glo');//GlobalHelpers
  12. const dbs = require('./dbs');//connection and schemas
  13. var stg = require('./socketTradeGate');
  14. var WAValidator = require('wallet-address-validator');
  15.  
  16. console.log('index.js ver: ' + config.version + ' rev: #' + config.revision);
  17.  
  18. var startTime = Math.floor(new Date() / 1000);
  19. var dbc = dbs.dbc;
  20.  
  21. function tgRouter(req1, res, next, dbc) {
  22.         try {
  23.                 var reqb = JSON.parse(JSON.stringify(req1.body));
  24.                 var reqp = JSON.parse(JSON.stringify(req1.params));
  25.                 var req = { params: reqp, body: reqb };
  26.                 var from_id = undefined;
  27.                 var chat_id = undefined;
  28.                 var text = undefined;
  29.                 var additionalText = undefined;
  30.                 var data = undefined;
  31.                 try {
  32.                         var flag = false;
  33.                         if (reqb.message) {
  34.                                 flag = true;
  35.                                 from_id = reqb.message.from.id;
  36.                                 try {
  37.                                         chat_id = reqb.message.chat.id;
  38.                                 } catch (e) { }
  39.                                 if (reqb.message.text) {
  40.                                         text = reqb.message.text.trim();
  41.                                 }
  42.                         }
  43.  
  44.                         if (reqb.callback_query) {
  45.                                 console.log('cb47:' + reqb.callback_query.from.id + ':' + reqb.callback_query.data);
  46.                                 //cb47:{"update_id":218082286,"callback_query":{"id":"1759093143282226515","from":{"id":409570788,"is_bot":false,"first_name":"Mik","last_name":"Aniko","username":"GosTco","language_code":"ru"},"inline_message_id":"AgAAAPzjIADkjWkYH1IOOmT4Ze0","chat_instance":"-7466449107570912117","data":"/ut_Q56YGVLP9L26"}}
  47.                                 // var a = {
  48.                                 //      "params": {
  49.                                 //              "id": "600120108:AAFYowe7zHN0YyphvZ8ShSh2vcg-MsxxZfc"
  50.                                 //      },
  51.                                 //      "body": {
  52.                                 //                      "update_id": 216376003,
  53.                                 //                      "callback_query": {
  54.                                 //                              "id": "2541858449096438858",
  55.                                 //                              "from": {
  56.                                 //                                      "id": 591822538, "is_bot": false, "first_name": "миша",
  57.                                 //                                      "last_name": "большой", "language_code": "ru"
  58.                                 //                              },
  59.                                 //                              "message": {
  60.                                 //                                      "message_id": 823434,
  61.                                 //                                      "from": { "id": 600120108, "is_bot": true, "first_name": "", "username": "_bot" },
  62.                                 //                                      "chat": { "id": 591822538, "first_name": "миша", "last_name": "большой", "type": "private" }, "date": 1535255597, "text": "VISAn 4890 4945 0718 5759nn✳️ Вы покупаете /BTC BitCoin.n🔃 Переключиться на покупку /GST ГостКоин?nn⚠️ n⚠️ Минимум 1 ₽. ⚠️ Максимум 2157 ₽.n курс: 518107.94n в наличии: 0.05568766 btc n ≈ 28800 р.nnРеквизит будет актуален ещё 60 минутn (до 26.08 07:53:12 МСК)", "entities": [{ "offset": 27, "length": 4, "type": "bold" }, { "offset": 33, "length": 19, "type": "bold" }, { "offset": 70, "length": 4, "type": "bot_command" }, { "offset": 112, "length": 4, "type": "bot_command" }, { "offset": 128, "length": 188, "type": "code" }]
  63.                                 //                              }, "chat_instance": "-1250635539320557158", "data": "/ok_pay_4014"
  64.                                 //                      }
  65.                                 //              }
  66.                                 // }
  67.                                 flag = true;
  68.                                 from_id = reqb.callback_query.from.id;
  69.                                 try {
  70.                                         chat_id = reqb.callback_query.message.chat.id;
  71.                                 } catch (e) { }
  72.                                 if (!chat_id) { chat_id = from_id; }
  73.                                 text = reqb.callback_query.data;
  74.                                 //if (chat_id < 0 && from_id !== chat_id) {
  75.                                 //console.log('PRE ANSWER: ' + from_id);
  76.                                 dbc.tguch.findOne({ 'chat_id': from_id }, (err, u) => {
  77.                                         //console.log(JSON.stringify(u));
  78.                                         if (u === null) {
  79.                                                 //console.log('NO USER:' + from_id);
  80.                                                 glo.tg.answerCallbackQuery(reqp.id, {
  81.                                                         callback_query_id: reqb.callback_query.id,
  82.                                                         url: 't.me/' + glo.telegramUserName + '?start=g'
  83.                                                 });
  84.                                                 console.log('GOTO START=g:' + from_id);
  85.                                         } else {
  86.                                                 glo.tg.answerCallbackQuery(reqp.id, { callback_query_id: reqb.callback_query.id });
  87.                                         }
  88.                                 })
  89.                                 //} else {
  90.                                 //      glo.tg.answerCallbackQuery(reqp.id, { callback_query_id: reqb.callback_query.id });
  91.                                 //}
  92.                         }
  93.                         if (reqb.inline_query) {
  94.                                 //var tmp = {
  95.                                 //      "update_id": 218078770,
  96.                                 //      "inline_query": {
  97.                                 //              "id": "1759093140111914926",
  98.                                 //              "from": {
  99.                                 //                      "id": 409570788,
  100.                                 //                      "is_bot": false, "first_name": "Mik", "last_name": "Aniko", "username": "GosTco", "language_code": "ru"
  101.                                 //              },
  102.                                 //              "query": "/bal", "offset": ""
  103.                                 //      }
  104.                                 //}
  105.                                 from_id = reqb.inline_query.from.id;
  106.                                 text = reqb.inline_query.query;
  107.                                 //if (text.length > 0 && text.indexOf('т') === 0) {
  108.                                 console.log('inline query: ' + from_id + ' ' + text);
  109.                                 var formData = {
  110.                                         inline_query_id: reqb.inline_query.id,
  111.                                         results: [],
  112.                                         cache_time: 0,
  113.                                         is_personal: true
  114.                                 }
  115.                                 var cursor = dbc.talon.find({ chat_id: from_id }).sort('-amount').sort('-dt').limit(20).cursor();
  116.                                 var i = 0;
  117.                                 cursor.on('data', function (talon) {//перебираем все по очереди
  118.                                         i += 1;
  119.                                         var oneRes = {
  120.                                                 type: 'article',
  121.                                                 id: i,
  122.                                                 //mpeg4_file_id: stg.last_gst_animation_file_id,
  123.                                                 title: talon.amount + ' ₽ (' + ((talon.amount / config.gstFixedLo) * (1 - config.talon_cmsn)).toFixed(2) + 'GST) (' + glo.getDateTime(new Date(talon.dt), true, true) + ')' + (talon.o === undefined ? '' : '//' + talon.o.toFixed(2)),
  124.                                                 caption: 'Caption',
  125.                                                 //parse_mode:
  126.                                                 input_message_content: {
  127.                                                         message_text: '<code>' + talon.amount.toFixed(0) + '</code> <b>₽</b> (<code>' + (talon.amount / config.gstFixedLo).toFixed(2) + '</code> <b>GST</b>)(<i>' + glo.getDateTime(new Date(talon.dt), true, true) + '</i>)n<a href="https://t.me/socketTradeGate/2974">видеообзор</a>',
  128.                                                         parse_mode: 'HTML',//,
  129.                                                         disable_web_page_preview: true
  130.                                                 },
  131.                                                 reply_markup: { inline_keyboard: [[{ text: '💰 Использовать', url: 't.me/' + glo.telegramUserName + '?start=talon' + talon.secret }]] }
  132.                                                 //reply_markup: { inline_keyboard: [[{ text: '1. @' + glo.telegramUserName, url: 't.me/' + glo.telegramUserName + '?start=' + from_id }, { text: '2. 💰 Использовать', callback_data: '' + talon.secret }]] }
  133.                                         };
  134.                                         formData.results.push(oneRes);
  135.                                 });
  136.                                 cursor.on('error', function (err) {
  137.                                         glo.e('index123', err);
  138.                                 })
  139.                                 cursor.on('close', function () {// Called when done
  140.                                         glo.tg.answerInlineQuery(reqp.id, formData, (err, body) => {
  141.                                                 //console.log(err);
  142.                                                 //console.log(body);
  143.                                         });
  144.                                         res.status(200).send("ok");
  145.                                 });
  146.                                 //}
  147.                                 return true;
  148.                         }
  149.                         if (!flag) { console.log('URO :' + JSON.stringify(req)); }
  150.                         //URO :{"params":{"id":"600120108:AAFYowe7zHN0YyphvZ8ShSh2vcg-MsxxZfc"},"body":{"update_id":217265147,"channel_post":{"message_id":400,"chat":{"id":-1001376011950,"title":"Все сделки","type":"channel"},"date":1545865030,"text":"📈 10 х 1 @ 3821.74n🏝 409570788","entities":[{"offset":3,"length":2,"type":"code"},{"offset":12,"length":7,"type":"code"},{"offset":23,"length":9,"type":"code"}]}}}
  151.                         //edit?
  152.                 } catch (e) {
  153.                         glo.infA(undefined, "<code>ERROR 127:" + e + '</code>');
  154.                         console.log('not msg:' + JSON.stringify(req));
  155.                 };
  156.                 try { res.status(200).send("ok"); } catch (e) { glo.e("index 200 110", e); }
  157.                 if ((stg.xRatem !== undefined && stg.xRatem > 0) || chat_id > 0) {// курс битка известен
  158.                         try {
  159.                                 if (!chat_id) {
  160.                                         console.log('edit?');
  161.                                 } else {
  162.                                         var now = Math.floor(new Date() / 1000);
  163.                                         if (chat_id > 0) {// диалоги
  164.                                                 stg.dialogHandler(req, res, chat_id, from_id, text);
  165.                                         } else {// конференции и каналы
  166.                                                 //sniff glo.infA(undefined, "<code>ERROR 153:" + JSON.stringify(req) + '</code>');
  167.  
  168.                                                 if (req.body.callback_query) {
  169.                                                         stg.dialogHandler(req, res, chat_id, from_id, text);
  170.                                                 } else if (req.body.message) {
  171.                                                         if (req.body.message.forward_from_chat === undefined) {//antistamer repost from other chat
  172.                                                                 stg.dialogHandler(req, res, chat_id, from_id, text);
  173.                                                         }
  174.                                                         //var textLow = '';
  175.                                                         //try {
  176.                                                         //      textLow = text.toLowerCase();
  177.                                                         //} catch (e) {
  178.                                                         //      //glo.infA(undefined, "<code>ERROR 153:" + e + '</code>');
  179.                                                         //      //добавление бота в группу: index.js 155 notext:
  180.                                                         //      //{
  181.                                                         //      //      "params": { "id": "600120108:AAG53Roe_wLeG8eo8etKWiVuulk6LJuq0Ys" },
  182.                                                         //      //      "body": {
  183.                                                         //      //              "update_id": 230463995, "message":
  184.                                                         //      //                      {
  185.                                                         //      //                              "message_id": 9, "from": { "id": 409570788, "is_bot": false, "first_name": "Mik", "last_name": "Aniko", "username": "GosTco", "language_code": "ru" },
  186.                                                         //      //                              "chat": { "id": -1001465545442, "title": "test rou", "type": "supergroup" }, "date": 1575893332,
  187.                                                         //      //                              "new_chat_participant": { "id": 600120108, "is_bot": true, "first_name": "Q", "username": "qbtc_bot" },
  188.                                                         //      //                              "new_chat_member": { "id": 600120108, "is_bot": true, "first_name": "Q", "username": "qbtc_bot" },
  189.                                                         //      //                              "new_chat_members": [{ "id": 600120108, "is_bot": true, "first_name": "Q", "username": "qbtc_bot" }]
  190.                                                         //      //                      }
  191.                                                         //      //      }
  192.                                                         //      //}
  193.                                                         //      console.log('index.js 155 notext:' + JSON.stringify(req));
  194.                                                         //}
  195.                                                         //console.log(reqb.message.from.is_bot ? "isbot" : "human");
  196.  
  197.                                                         //if (reqb.callback_query) {
  198.                                                         //      stg.dialogHandler(req, res, chat_id, from_id, text);
  199.                                                         //} else if (reqb.message.new_chat_member !== undefined) {
  200.                                                         //      console.log('new member');
  201.                                                         //      var message_id = reqb.message.message_id;
  202.                                                         //      console.log(message_id);
  203.                                                         //      glo.tg.deleteTelegramMessage(reqp.id, chat_id, message_id, function (err, body) {
  204.                                                         //              //console.log(body);
  205.                                                         //              body = JSON.parse(body);
  206.                                                         //              if (body.ok === true && stg.lastSpamId > 0) {
  207.                                                         //                      glo.tg.deleteTelegramMessage(reqp.id, stg.lastSpamChatId, stg.lastSpamId, function () {
  208.                                                         //                              var buyMessage = '';
  209.                                                         //                              if (chat_id === config.GOST_chat_id) {
  210.                                                         //                                      var UR = (config.gstFixedLo / (stg.xRate / stg.xRate_XBTUSD));
  211.                                                         //                                      var GSTvsUSD = '$<code>' + UR.toFixed(2) + '</code>';
  212.                                                         //                                      var GSTvsRUB = '<code>' + config.gstFixedLo.toFixed(2) + '</code>₽';
  213.                                                         //                                      buyMessage = '<code>1</code> GST = ' + GSTvsUSD + ' = ' + GSTvsRUB + 'n';
  214.                                                         //                              } else {
  215.                                                         //                                      buyMessage = 'купить: ' + parseFloat(stg.inst.BTC.toFixed(8)) + ' BTC = ' + (parseInt((stg.inst.BTC + config.btcCmsn) * stg.xRatem * 100) / 100) + ' ₽ n(курс: <b>' + stg.xRatem.toFixed(2) + ')</b>';
  216.                                                         //                              }
  217.                                                         //
  218.                                                         //                              dbc.tguch.findOne({ 'chat_id': reqb.message.new_chat_member.id }, (err, user) => {
  219.                                                         //                                      if (!user) {
  220.                                                         //                                              glo.tg.sendTelegramMessage(reqp.id, chat_id, 'Привет ' +
  221.                                                         //                                                      (reqb.message.new_chat_member.first_name ? '<b>' + reqb.message.new_chat_member.first_name + '</b>' : '') + ' ' +
  222.                                                         //                                                      (reqb.message.new_chat_member.last_name ? '<b>' + reqb.message.new_chat_member.last_name + '</b>' : '') +
  223.                                                         //                                                      ' (' + /* юзернейм лучше не показывать, а то мошенники не дремлют (reqb.message.new_chat_member.username ? '@' + reqb.message.new_chat_member.username : '')*/ ' ' + glo.emo(reqb.message.new_chat_member.id) + ' ' + reqb.message.new_chat_member.id + ') !n' +
  224.                                                         //                                                      //buyMessage +
  225.                                                         //                                                      ' @' + glo.telegramUserName + ' <code>Версия: ' + config.version + 'n✊️ Не доверяйте обычным пользователям(могут представляться админами или даже ботами), предлагающим любые услуги в ЛС.n💩 Это мошенники! Сразу жалуйтесь на спам! Очистим телеграм от "грязи"!', function (err, body) {
  226.                                                         //                                                              //glo.msgDebug(body);
  227.                                                         //                                                              body = JSON.parse(body);
  228.                                                         //                                                              stg.lastSpamId = body.result.message_id;
  229.                                                         //                                                              stg.lastSpamChatId = chat_id;
  230.                                                         //                                                      }
  231.                                                         //                                                      //, JSON.stringify({ inline_keyboard: [[{ text: 'BTC', callback_data: '/pub_btc' }, { text: 'GST', callback_data: '/pub_gst' }]] })
  232.                                                         //                                              );
  233.                                                         //                                      } else {
  234.                                                         //                                              glo.tg.sendTelegramMessage(reqp.id, chat_id, 'Привет ' +
  235.                                                         //                                                      (reqb.message.new_chat_member.first_name ? '<b>' + reqb.message.new_chat_member.first_name + '</b>' : '') + ' ' +
  236.                                                         //                                                      (reqb.message.new_chat_member.last_name ? '<b>' + reqb.message.new_chat_member.last_name + '</b>' : '') +
  237.                                                         //                                                      ' (' + /* юзернейм лучше не показывать, а то мошенники не дремлют (reqb.message.new_chat_member.username ? '@' + reqb.message.new_chat_member.username : '')*/ ' ' + glo.emo(reqb.message.new_chat_member.id) + ' ' + reqb.message.new_chat_member.id + ') !n' +
  238.                                                         //                                                      buyMessage +
  239.                                                         //                                                      ' @' + glo.telegramUserName + ' <code>Версия: ' + config.version + 'nДавно не виделись;) Ссылка на админа есть в профиле бота.', function (err, body) {
  240.                                                         //                                                              //glo.msgDebug(body);
  241.                                                         //                                                              body = JSON.parse(body);
  242.                                                         //                                                              stg.lastSpamId = body.result.message_id;
  243.                                                         //                                                              stg.lastSpamChatId = chat_id;
  244.                                                         //                                                      }
  245.                                                         //                                                      //, JSON.stringify({ inline_keyboard: [[{ text: 'BTC', callback_data: '/pub_btc' }, { text: 'GST', callback_data: '/pub_gst' }]] })
  246.                                                         //                                              );
  247.                                                         //                                      }
  248.                                                         //                              })
  249.                                                         //                      });
  250.                                                         //              }
  251.                                                         //      });
  252.                                                         //      return true;
  253.                                                         //} else if (reqb.message.from.is_bot === false && stg.xRatem && stg.xRatem > 0 && stg.inst.BTC && stg.inst.BTC > config.zeroBtcLimit && text) {
  254.                                                         //      if (textLow.indexOf('купить на') === 0) {
  255.                                                         //              //stg.anyWallet(function () {
  256.                                                         //              try {
  257.                                                         //                      var values = text.split(' ');
  258.                                                         //                      var value = parseFloat(values[values.length - 1].trim().replace(/,/g, '.'));
  259.                                                         //
  260.                                                         //                      var newMessage = newMessage = 'купить: <code>' + (value / stg.xRatem).toFixed(8) + '</code> <b>BTC</b> = <code>' + (parseInt(((value / stg.xRatem) + config.btcCmsn) * stg.xRatem * 100) / 100) + '</code> ₽n(курс: <code>' + stg.xRatem.toFixed(2) + '</code>)';
  261.                                                         //                      dbc.tguch.findOne({ 'chat_id': from_id }, (err, user) => {
  262.                                                         //                              if (user) {
  263.                                                         //                                      if (user.bitType === 'gst') {
  264.                                                         //                                              newMessage = 'купить: <code>' + (value / config.gstFixedHi).toFixed(8) + '</code> <b>GST</b> = <code>' + (parseInt(((value / config.gstFixedHi) + config.gstCmsn) * config.gstFixedHi * 100) / 100) + '</code> ₽n(курс: <code>' + config.gstFixedHi.toFixed(2) + '</code>)';
  265.                                                         //                                      }
  266.                                                         //                                      glo.tg.sendTelegramMessage(reqp.id, from_id, newMessage, function (err, body) {/*glo.msgDebug(body);body = JSON.parse(body);stg.lastSpamId = body.result.message_id;*/ });
  267.                                                         //                              }
  268.                                                         //                              //if (stg.lastSpamId > 0) {glo.tg.deleteTelegramMessage(reqp.id, stg.lastSpamChatId, stg.lastSpamId);}
  269.                                                         //                              glo.tg.sendTelegramMessage(reqp.id, chat_id, newMessage, function (err, body) {
  270.                                                         //                                      try {
  271.                                                         //                                              body = JSON.parse(body);
  272.                                                         //                                              stg.lastSpamId = body.result.message_id;
  273.                                                         //                                              stg.lastSpamChatId = chat_id;
  274.                                                         //
  275.                                                         //                                              var messageId = body.result.message_id;
  276.                                                         //                                              setTimeout(() => {
  277.                                                         //                                                      glo.tg.deleteTelegramMessage(req.params.id, chat_id, messageId);
  278.                                                         //                                              }, 3600000);
  279.                                                         //                                      } catch (e) {
  280.                                                         //                                              glo.infA(undefined, "<code>ERROR 247:" + e + '</code>');
  281.                                                         //                                      }
  282.                                                         //                              });
  283.                                                         //                              //glo.tg.deleteTelegramMessage(reqp.id, chat_id, reqb.message.message_id, function (err, body) {/*console.log(body);*/});
  284.                                                         //                      })
  285.                                                         //              } catch (e) { glo.e("ERROR 185", e); }
  286.                                                         //              //});
  287.                                                         //              return true;
  288.                                                         //      } else if (textLow.indexOf('купить') === 0) {
  289.                                                         //              //anyWallet(function () {
  290.                                                         //              try {
  291.                                                         //                      var values = text.split(' ');
  292.                                                         //                      var value = parseFloat(values[values.length - 1].replace(/,/g, '.').trim());
  293.                                                         //                      if (value) {
  294.                                                         //                              var newMessage = 'купить: <code>' + parseFloat(value.toFixed(8)) + '</code> BTC = <code>' + (parseInt((value + config.btcCmsn) * stg.xRatem * 100) / 100) + '</code> ₽n(курс: <b>' + stg.xRatem.toFixed(2) + '</b>)';
  295.                                                         //                              dbc.tguch.findOne({ 'chat_id': from_id }, (err, user) => {
  296.                                                         //                                      if (user) {
  297.                                                         //                                              if (user.bitType === 'gst') {
  298.                                                         //                                                      newMessage = 'купить: <code>' + parseFloat(value.toFixed(8)) + '</code> <b>GST</b> = <code>' + (parseInt((value + config.gstCmsn) * config.gstFixedHi * 100) / 100) + '</code> ₽n(курс: <code>' + config.gstFixedHi.toFixed(2) + '</code>)';
  299.                                                         //                                              }
  300.                                                         //                                              glo.tg.sendTelegramMessage(reqp.id, from_id, newMessage, function (err, body) { });
  301.                                                         //                                      }
  302.                                                         //                                      glo.tg.sendTelegramMessage(reqp.id, chat_id, newMessage, function (err, body) {
  303.                                                         //                                              try {
  304.                                                         //                                                      body = JSON.parse(body);
  305.                                                         //                                                      stg.lastSpamId = body.result.message_id;
  306.                                                         //                                                      stg.lastSpamChatId = chat_id;
  307.                                                         //                                                      var messageId = body.result.message_id;
  308.                                                         //                                                      setTimeout(() => {
  309.                                                         //                                                              glo.tg.deleteTelegramMessage(req.params.id, chat_id, messageId);
  310.                                                         //                                                      }, 3600000);
  311.                                                         //                                              } catch (e) { glo.e("index pub buy autodelete:", e); }
  312.                                                         //                                      });
  313.                                                         //                              });
  314.                                                         //                      }
  315.                                                         //              } catch (e) { glo.infA("ERROR 297:", e); }
  316.                                                         //              //});
  317.                                                         //              return true;
  318.                                                         //      } else if (textLow.indexOf('продать') === 0) {
  319.                                                         //              try {
  320.                                                         //                      var values = text.split(' ');
  321.                                                         //                      var value = parseFloat(values[values.length - 1].replace(/,/g, '.'));
  322.                                                         //                      var s = 10;
  323.                                                         //                      var m = 10;
  324.                                                         //                      var rs = '';
  325.                                                         //
  326.                                                         //                      var req_params_id = reqp.id;
  327.                                                         //                      if (value >= 0.00001) {
  328.                                                         //                              stg.getLower(function (s, m, rs) {
  329.                                                         //                                      if (s - m >= value) {
  330.                                                         //                                              dbc.tguch.findOne({ 'chat_id': from_id }, (err, user) => {
  331.                                                         //                                                      var newMessage = 'продать: <code>' + parseFloat(value.toFixed(8)) + '</code> BTC = <code>' + (parseInt((value) * stg.xRatemB * 100) / 100) + '</code> ₽n(курс: <b>' + stg.xRatemB.toFixed(2) + ')</b>n подробности по команде /o';
  332.                                                         //                                                      if (user) {
  333.                                                         //                                                              if (user.bitType === 'gst') {
  334.                                                         //                                                                      newMessage = 'продать: <code>' + parseFloat(value.toFixed(8)) + '</code> GST = <code>' + (parseInt((value) * config.gstFixedLo * 100) / 100) + '</code> ₽n(курс: <b>' + config.gstFixedLo.toFixed(2) + '</b>)n подробности по команде /o';
  335.                                                         //                                                              }
  336.                                                         //                                                              glo.tg.sendTelegramMessage(reqp.id, from_id, newMessage, function (err, body) { });
  337.                                                         //                                                      }
  338.                                                         //                                                      glo.tg.sendTelegramMessage(reqp.id, chat_id, newMessage, function (err, body) {
  339.                                                         //                                                              try {
  340.                                                         //                                                                      body = JSON.parse(body);
  341.                                                         //                                                                      stg.lastSpamId = body.result.message_id;
  342.                                                         //                                                                      stg.lastSpamChatId = chat_id;
  343.                                                         //                                                                      var messageId = body.result.message_id;
  344.                                                         //                                                                      setTimeout(() => {
  345.                                                         //                                                                              glo.tg.deleteTelegramMessage(req.params.id, chat_id, messageId);
  346.                                                         //                                                                      }, 3600000);
  347.                                                         //                                                              } catch (e) { glo.e('index pub sell chat_id', e); }
  348.                                                         //                                                      });
  349.                                                         //                                              });
  350.                                                         //                                      }
  351.                                                         //                              }, s, m, rs);
  352.                                                         //                      }
  353.                                                         //              } catch (e) { glo.e('index pub sell btc', e); }
  354.                                                         //              return;
  355.                                                         //      } else if (textLow.indexOf('/bots') === 0 || text === 'bots') {
  356.                                                         //              console.log('call_bots:' + from_id + ' chat_id:' + chat_id);
  357.                                                         //              if (stg.lastSpam < now - 60) {
  358.                                                         //                      stg.lastSpam = now;
  359.                                                         //                      if (stg.lastSpamId > 0) {
  360.                                                         //                              glo.tg.deleteTelegramMessage(reqp.id, stg.lastSpamChatId, stg.lastSpamId);
  361.                                                         //                      }
  362.                                                         //                      if (!config.allBots) { config.allBots = []; }
  363.                                                         //                      var buyMessage = '';
  364.                                                         //                      if (chat_id === config.GOST_chat_id) {
  365.                                                         //                              buyMessage = '📈 1 GST = <code>' + (parseInt(config.gstFixedHi * 100) / 100) + '</code> ₽n' +
  366.                                                         //                                      '📉 1 GST = <code>' + config.gstFixedLo.toFixed(2) + '</code> ₽ n';
  367.                                                         //                      } else {
  368.                                                         //                              buyMessage = 'купить: ' + parseFloat(stg.inst.BTC.toFixed(8)) + ' BTC = ' + (parseInt((stg.inst.BTC + config.btcCmsn) * stg.xRatem * 100) / 100) + ' ₽n(курс: <b>' + stg.xRatem.toFixed(2) + ')</b>n';
  369.                                                         //                      }
  370.                                                         //                      glo.tg.sendTelegramMessage(reqp.id, chat_id, buyMessage + config.allBots.slice(0, 12).join('n'), function (err, body) {
  371.                                                         //                              try {
  372.                                                         //                                      body = JSON.parse(body);
  373.                                                         //                                      stg.lastSpamId = body.result.message_id;
  374.                                                         //                                      stg.lastSpamChatId = chat_id;
  375.                                                         //                              } catch (e) { glo.e("ERROR 342:", e); }
  376.                                                         //                      });
  377.                                                         //                      glo.tg.sendTelegramMessage(reqp.id, from_id, buyMessage + config.allBots.join('n'), (err, body) => { });
  378.                                                         //              }
  379.                                                         //              glo.tg.deleteTelegramMessage(reqp.id, chat_id, reqb.message.message_id, (err, body) => { });
  380.                                                         //              //} else if (reqb.message.from.is_bot === true && textLow.indexOf('продать') !== 0 && textLow.indexOf('купить') !== 0) {
  381.                                                         //              //console.log(JSON.stringify(req));
  382.                                                         //              return;
  383.                                                         //      } else {
  384.                                                         //              try {
  385.                                                         //                      var value = parseFloat(text.replace(/,/g, '.').trim());
  386.                                                         //                      //#TODO #AddonsCallMain пройтись по .main у аддонов. тогда запросы состаящие только из чисел в конфе пройдут.
  387.                                                         //                      if (value > 100) {//buy by fiat
  388.                                                         //                              //anyWallet(function () {
  389.                                                         //                              try {//купить на...
  390.                                                         //                                      //value /= stg.xRatem;
  391.                                                         //                                      var newMessage = newMessage = 'купить: <code>' + (value / stg.xRatem).toFixed(8) + '</code> <b>BTC</b> = <code>' + (parseInt(((value / stg.xRatem) + config.btcCmsn) * stg.xRatem * 100) / 100) + '</code> ₽n(курс: <code>' + stg.xRatem.toFixed(2) + '</code>)';
  392.                                                         //                                      dbc.tguch.findOne({ 'chat_id': from_id }, (err, user) => {
  393.                                                         //                                              if (user) {
  394.                                                         //                                                      if (user.bitType === 'gst') {
  395.                                                         //                                                              newMessage = 'купить: <code>' + (value / config.gstFixedHi).toFixed(8) + '</code> <b>GST</b> = <code>' + (parseInt(((value / config.gstFixedHi) + config.gstCmsn) * config.gstFixedHi * 100) / 100) + '</code> ₽n(курс: <code>' + config.gstFixedHi.toFixed(0) + '</code>)';
  396.                                                         //                                                      }
  397.                                                         //                                                      glo.tg.sendTelegramMessage(reqp.id, from_id, newMessage, function (err, body) { });
  398.                                                         //                                              }
  399.                                                         //                                              glo.tg.sendTelegramMessage(reqp.id, chat_id, newMessage, function (err, body) {
  400.                                                         //                                                      try {
  401.                                                         //                                                              body = JSON.parse(body);
  402.                                                         //                                                              if (body.result) {
  403.                                                         //                                                                      //stg.lastSpamId = body.result.message_id;
  404.                                                         //                                                                      stg.lastSpamChatId = chat_id;
  405.                                                         //                                                                      var messageId = body.result.message_id;
  406.                                                         //                                                                      setTimeout(() => {
  407.                                                         //                                                                              glo.tg.deleteTelegramMessage(req.params.id, chat_id, messageId);
  408.                                                         //                                                                      }, 3600000);
  409.                                                         //                                                              }
  410.                                                         //                                                      } catch (e) { glo.e("ERROR 311:", e); }
  411.                                                         //                                              });
  412.                                                         //                                      })
  413.                                                         //                              } catch (e) { glo.e("ERROR 368:", e); }
  414.                                                         //                              //})
  415.                                                         //                      } else if (value < 1) {//buy crypto
  416.                                                         //                              //anyWallet(function () {
  417.                                                         //                              try {//купить
  418.                                                         //                                      var newMessage = 'купить: <code>' + parseFloat(value.toFixed(8)) + '</code> BTC = <code>' + (parseInt((value + config.btcCmsn) * stg.xRatem * 100) / 100) + '</code> ₽n(курс: <b>' + stg.xRatem.toFixed(2) + '</b>)';
  419.                                                         //                                      dbc.tguch.findOne({ 'chat_id': from_id }, (err, user) => {
  420.                                                         //                                              if (user) {
  421.                                                         //                                                      if (user.bitType === 'gst') {
  422.                                                         //                                                              newMessage = 'купить: <code>' + parseFloat(value.toFixed(8)) + '</code> <b>GST</b> = <code>' + (parseInt((value + config.gstCmsn) * config.gstFixedHi * 100) / 100) + '</code> ₽n(курс: <code>' + config.gstFixedHi.toFixed(0) + '</code>)';
  423.                                                         //                                                      }
  424.                                                         //                                                      glo.tg.sendTelegramMessage(reqp.id, from_id, newMessage, function (err, body) { });
  425.                                                         //                                              }
  426.                                                         //                                              glo.tg.sendTelegramMessage(reqp.id, chat_id, newMessage, function (err, body) {
  427.                                                         //                                                      try {
  428.                                                         //                                                              body = JSON.parse(body);
  429.                                                         //                                                              stg.lastSpamId = body.result.message_id;
  430.                                                         //                                                              stg.lastSpamChatId = chat_id;
  431.                                                         //                                                              var messageId = body.result.message_id;
  432.                                                         //                                                              setTimeout(() => {
  433.                                                         //                                                                      glo.tg.deleteTelegramMessage(req.params.id, chat_id, messageId);
  434.                                                         //                                                              }, 3600000);
  435.                                                         //                                                      } catch (e) { glo.e("index pub buy autodelete:", e); }
  436.                                                         //                                              });
  437.                                                         //                                      });
  438.                                                         //                              } catch (e) { glo.e("ERROR 339:", e); }
  439.                                                         //                              //}
  440.                                                         //                              //})
  441.                                                         //                      } else {
  442.                                                         //                              //var timeout = 500;
  443.                                                         //                              //if ((chat_id !== config.GOST_chat_id) && (from_id !== 409570788) && (textLow.indexOf('@') > 0 || (textLow.indexOf('/') > 0) || (textLow.indexOf('.me/') > 0) || (textLow.indexOf('.ru') > 0) || (textLow.indexOf('.net') > 0) || (textLow.indexOf('.com') > 0) || (textLow.indexOf('hydra') > 0) || (textLow.indexOf('nvspc') > 0) || (textLow.indexOf('спайс') > 0))) {
  444.                                                         //                              //      try {
  445.                                                         //                              //              setTimeout(function () {
  446.                                                         //                              //                      glo.tg.deleteTelegramMessage(reqp.id, chat_id, reqb.message.message_id, function (err, body) {
  447.                                                         //                              //                              console.log(chat_id + ':' + textLow);
  448.                                                         //                              //                      });
  449.                                                         //                              //              }, timeout);
  450.                                                         //                              //      } catch (e) { glo.e('ERROR 351:', e); };
  451.                                                         //                              //}
  452.                                                         //                      }
  453.                                                         //              } catch (e) { glo.e("ERROR 413:", e); }
  454.                                                         //      }
  455.                                                         //      //запросы состоящие только из чисел в конфе не пройдут.. #AddonsCallMain выше
  456.                                                         //      stg.dialogHandler(req, res, chat_id, from_id, text);
  457.                                                         //} else {
  458.                                                         //      stg.dialogHandler(req, res, chat_id, from_id, text);
  459.                                                         //}
  460.                                                 }
  461.                                         }
  462.                                 }
  463.                         } catch (e) { glo.e("ERROR 363:", e); }
  464.                 } else { glo.tg.sendTelegramMessage(reqp.id, chat_id, "Повторите попытку через пару минут.") }// курс битка неизвестен
  465.         } catch (e) {
  466.                 glo.e('index 365', e);
  467.                 try { res.status(200).send(""); } catch (e) { glo.e("index ERROR 366", e); }
  468.         }
  469. }
  470. function somethingFromTelegramRefresh(req, user, chat_id, from_id, text, cb, reply_buttons) {
  471.         dbc.tguch.findById({ _id: user._id }, function (err, doc) {
  472.                 stg.somethingFromTelegram(req, doc, chat_id, from_id, text, cb, reply_buttons);
  473.         })
  474. }
  475. stg.somethingFromTelegramRefresh = somethingFromTelegramRefresh;
  476. function somethingFromTelegram(req, user, chat_id, from_id, text, cb, reply_buttons) {
  477.         var now = Math.floor(new Date() / 1000);
  478.         if ((req.body.message || req.body.callback_query)) {//сообщение или колбек
  479.  
  480.                 if (req.body.message) {
  481.                         //console.log('index.js sft 378:req.body.message=' + JSON.stringify(req.body.message));
  482.                         if (config.listenAll) {
  483.                                 try {
  484.                                         if (req.body.message.from) {
  485.                                                 glo.infA(req.body.message.from.id, glo.tg.a(req.body.message.from.id) + ' <code>@</code> <code>' + req.body.message.chat.id + '</code>:n<code>' + req.body.message.text + '</code>');
  486.                                         } else {
  487.                                                 glo.e('ind 385:', JSON.stringify(req.body.message));
  488.                                         }
  489.                                 } catch (e) { glo.e('err index 393:', e) }
  490.                         }
  491.                 }
  492.                 //index.js sft 378:req.body.message={"message_id":4507453,"from":{"id":361775588,"is_bot":false,"first_name":"♚♕MaYeStRo♧♧","username":"MAyEsTrO_N_1","language_code":"ru"},"chat":{"id":361775588,"first_name":"♚♕MaYeStRo♧♧","username":"MAyEsTrO_N_1","type":"private"},"date":1552891269,"forward_from_chat":{"id":-1001304706732,"title":"VODIY REP QO'SHIN","username":"REPPERLARKANALI","type":"channel"},"forward_from_message_id":9226,"forward_signature":"♚♕MaYeStRo♧♧","forward_date":1552890666,"video":{"duration":50,"width":640,"height":640,"mime_type":"video/mp4","thumb":{"file_id":"AAQCABNQMAgOAATo1iXqG2GV4F8fAAIC","file_size":978,"width":320,"height":320},"file_id":"BAADAgAD6AEAApkceUgfOk1-RGAmgwI","file_size":4977095},"caption":"MaYeStRo😘😁[email protected]","caption_entities":[{"offs"t":14,"length":16,"type":"mention"}]}
  493.                 //var r = {
  494.                 //      "message_id": 124736,
  495.                 //      "from": {
  496.                 //              "id": 409570788, "is_bot": false, "first_name": "Mik", "last_name": "Aniko", "username": "GosTco", "language_code": "ru"
  497.                 //      },
  498.                 //      "chat": {
  499.                 //              "id": -1001120608398, "title": "GOSTCoin RU", "username": "gostcoin_ru", "type": "supergroup"
  500.                 //      }, "date": 1553034631, "text": "."
  501.                 //}
  502.                 try {
  503.                         //if (text) {
  504.                         var textLower = '';
  505.                         if (text !== undefined) {
  506.                                 textLower = text.toLowerCase();
  507.                         } else {
  508.                                 text = '';
  509.                         }
  510.                         //if (req.body.message.date - user.lastMessage <= config.minFloodTime) {
  511.                         //      user.fastMessagesCounter += 1;
  512.                         //}
  513.                         //else {
  514.                         //      user.fastMessagesCounter = 0;
  515.                         //}
  516.                         //user.lastMessage = req.body.message.date;
  517.                         var update_id = req.body.update_id
  518.                         dbc.tguch.findOneAndUpdate({ _id: user._id }, { lastMessageId: update_id }, { new: true }, function (err, user) {
  519.                                 stg.getUserSimpleReply(user, (user) => {
  520.                                         //if (user.fastMessagesCounter < config.maxFloodLimit) {
  521.                                         if (true || chat_id > 0 || config.demo || req.body.callback_query || config.chat_commands.indexOf(textLower) >= 0) {//конференция//последний рубеж
  522.                                                 // @r4sas [04.04.18 17:11] "бот для лички только если что"
  523.                                                 //} else {// личный диалог
  524.                                                 var tg_token = req.params.id;
  525.                                                 if (tg_token !== config.tgbotAPI) { // если запрос пришел на вебхук, но не для config.tgbotAPI, то даем пользователю адрес на правильного бота (удобно при "переезде" бота на новый Username)
  526.                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, '@' + glo.telegramUserName, function (err, body) {
  527.                                                                 glo.msgDebug(body);
  528.                                                         });
  529.                                                 } else {
  530.                                                         var msg_id;
  531.                                                         if (req.body.callback_query && req.body.callback_query.message) {
  532.                                                                 msg_id = req.body.callback_query.message.message_id;
  533.                                                         }
  534.                                                         var user_id = chat_id;
  535.                                                         var is_bot = req.body.message ? req.body.message.from.is_bot : false;
  536.                                                         try {
  537.                                                                 //if (!is_bot) { //сообщение от человека // другого не дано
  538.                                                                 // else { //не авторизован для "личного" сервиса
  539.                                                                 //                                                                              if (config.tgbotChange) { // "бот-обменник"
  540.                                                                 if (['/rb', '/mb'].indexOf(textLower) < 0 && !req.body.callback_query) {//ignoreList
  541.                                                                         glo.msgDebug('i533:' + user_id + ":" + text);
  542.                                                                 }
  543.                                                                 if (config.listenAll) {//транслировать все сообщения от пользователей админу
  544.                                                                         glo.infA(undefined, '🎼<code>' + glo.emo(from_id) + ' ' + from_id + ' :' + text + '</code>');
  545.                                                                 }
  546.  
  547.                                                                 var bitType = user.bitType; // btc или gst режим бота для конкретного пользователя
  548.                                                                 if (bitType !== 'btc' && bitType !== 'gst') bitType = 'btc';
  549.  
  550.                                                                 var rateS, rateB, marginS, marginB;
  551.                                                                 var unibal = 0; //количество монет у пользователя на балансе в выбранном режиме /btc /gst ...
  552.                                                                 var unimarkup = undefined;
  553.                                                                 if (bitType === 'btc') {
  554.                                                                         rateS = stg.xRatem;
  555.                                                                         rateB = stg.xRatemB;
  556.                                                                         marginS = config.rateMargin;
  557.                                                                         marginB = config.rateBMargin;
  558.                                                                         unibal = glo.floor8(user.btc);
  559.                                                                 } else if (bitType === 'gst') {
  560.                                                                         rateS = config.gstFixedHi;
  561.                                                                         rateB = config.gstFixedLo;
  562.                                                                         marginS = config.rateMargin_GST;
  563.                                                                         marginB = config.rateBMargin_GST;
  564.                                                                         unibal = glo.floor8(user.gst);
  565.                                                                 }
  566.                                                                 //unimarkup = glo.tg.genMainMarkup(bitType, user.mini);
  567.  
  568.                                                                 if (user_id === config.admin_id || user.isadmin === 1) { // админка
  569.                                                                         if (user.isadmin !== 1 && user.chat_id > 0) { // если еще не админ, но в конфиге config.admin_id совпадает с user_id
  570.                                                                                 dbc.tguch.findOneAndUpdate({ _id: user._id }, { isadmin: 1 }, () => { })// сделать пользователя админом
  571.                                                                         }
  572.                                                                         if (textLower === '👻') {
  573.                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id,
  574.                                                                                         'напиши 👻👻', function (err, body) { /*console.log(JSON.stringify(JSON.parse(body)));*/ })
  575.                                                                                 return;
  576.                                                                         } else if (textLower === '👻👻') {
  577.                                                                                 throw new Error('PRIZRAK');
  578.                                                                         }
  579.                                                                 }
  580.                                                                 if (user.isadmin || (/*stg.inst.BTC*/config.stg_btc >= config.zeroBtcLimit && config.gstFixedHi !== undefined && stg.xRatem !== undefined)) {
  581.                                                                         var cloned_addons = config.addons.slice();
  582.                                                                         var one_addon = cloned_addons.pop();
  583.                                                                         var result = false;
  584.                                                                         if (user.isadmin || user.gst >= config.mininvestgst * 0.9) {
  585.                                                                                 while (one_addon) {
  586.                                                                                         if (one_addon.addon.main) result = one_addon.addon.main(config, glo, dbc, stg, req, user, tg_token, chat_id, from_id, bitType, text, textLower, cb, marginS, marginB, rateS, rateB, reply_buttons);
  587.                                                                                         if (result) return;
  588.                                                                                         one_addon = cloned_addons.pop();
  589.                                                                                 };
  590.  
  591.                                                                                 if (chat_id > 0) {
  592.                                                                                         if (0 === textLower.indexOf('/o_') || 0 === textLower.indexOf('/о_')) {// пользовательский вывод на киви
  593.                                                                                                 try {
  594.                                                                                                         if (bitType === 'btc') {
  595.                                                                                                                 if (rateB && rateB > 0) {
  596.                                                                                                                         var myFields = text.split("_");
  597.                                                                                                                         var myDest = myFields[1].trim(),
  598.                                                                                                                                 myAmo = parseFloat(myFields[2]),
  599.                                                                                                                                 myCo = "";
  600.                                                                                                                         try {
  601.                                                                                                                                 myCo = myFields[3];
  602.                                                                                                                         } catch (e) {
  603.                                                                                                                                 glo.infA(undefined, "<code>ERROR 1675:" + e + '</code>');
  604.                                                                                                                         };
  605.                                                                                                                         if (myDest !== '79123456789') {//example number
  606.                                                                                                                                 if (myAmo >= config.o_min) {
  607.                                                                                                                                         var curBalTest = unibal * rateB;
  608.                                                                                                                                         if (myAmo <= curBalTest || user.isadmin === 1) {
  609.                                                                                                                                                 function allowSafeOut() {
  610.                                                                                                                                                         stg.safeOut(tg_token, user, 0, myDest, myAmo, myCo, unibal, bitType, rateB, function (id) {
  611.                                                                                                                                                                 if (id && id > 0) {
  612.                                                                                                                                                                         var bitAmo = glo.floor8(myAmo / rateB);
  613.                                                                                                                                                                         var newStatItem = {
  614.                                                                                                                                                                                 bitType: bitType,
  615.                                                                                                                                                                                 amount: bitAmo,
  616.                                                                                                                                                                                 dt: Math.floor(new Date() / 1000)//Local_Unix_Time_In_Seconds
  617.                                                                                                                                                                         }
  618.                                                                                                                                                                         var statData = new dbc.mstat(newStatItem);
  619.                                                                                                                                                                         statData.save();
  620.                                                                                                                                                                         if (bitType === 'gst') {
  621.                                                                                                                                                                                 //var automar = 0.02 * bitAmo / 1000;
  622.                                                                                                                                                                                 if (chat_id > 0) {
  623.                                                                                                                                                                                         stg.gstAutoMarDown(bitAmo / 2);
  624.                                                                                                                                                                                         stg.somethingFromTelegram(req, user, chat_id, from_id, 'gstrub');
  625.                                                                                                                                                                                 }
  626.                                                                                                                                                                         }
  627.                                                                                                                                                                         //stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bal');
  628.                                                                                                                                                                         //ДИВИДЕНДЫ РЕФЕРЕРУ
  629.                                                                                                                                                                         if (user.referer && user.referer > 0) {
  630.                                                                                                                                                                                 dbc.tguch.findOne({ 'chat_id': user.referer }, function (err, docReferer) {
  631.                                                                                                                                                                                         if (!err && docReferer) {
  632.                                                                                                                                                                                                 var unibalRef;
  633.                                                                                                                                                                                                 var refDivi = glo.floor8(bitAmo * 0.01);
  634.  
  635.                                                                                                                                                                                                 var modification = {};
  636.                                                                                                                                                                                                 if (bitType === 'btc') {
  637.                                                                                                                                                                                                         modification = { '$inc': { 'btc': refDivi } }
  638.                                                                                                                                                                                                 } else if (bitType === 'gst') {
  639.                                                                                                                                                                                                         modification = { '$inc': { 'gst': refDivi } }
  640.                                                                                                                                                                                                 }
  641.                                                                                                                                                                                                 dbc.tguch.findOneAndUpdate({ '_id': docReferer._id }, modification, { 'new': true }, function (err, user) {
  642.                                                                                                                                                                                                         if (!err) {
  643.                                                                                                                                                                                                                 glo.informAdmins('<code>' + user.chat_id + '</code> за продажу <code>' + user.chat_id + '</code>n(+<code>' + refDivi.toFixed(8) + '</code> =<code>' + user[bitType].pF() + '</code> ' + bitType.toUpperCase() + ')', function () { }, tg_token, user.chat_id);
  644.                                                                                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, user.chat_id, '👍 ' + glo.emo(chat_id) + ' ' + user.chat_id + ' реферальские за продажу n(+<code>' + refDivi.toFixed(8) + '</code> ' + bitType.toUpperCase() + ')n На балансе: <code>' + user[bitType].toFixed(8) + '</code> ' + bitType.toUpperCase(), function (err, body) { });
  645.                                                                                                                                                                                                         }
  646.                                                                                                                                                                                                 });
  647.                                                                                                                                                                                         }
  648.                                                                                                                                                                                 })
  649.                                                                                                                                                                         }
  650.                                                                                                                                                                 }
  651.                                                                                                                                                         });
  652.                                                                                                                                                 }
  653.                                                                                                                                                 if (bitType === 'gst') {
  654.                                                                                                                                                         //stg.getAvaGst(function (avaBal) {
  655.                                                                                                                                                         //      if (avaBal >= myAmo / rateB) {
  656.                                                                                                                                                         //              allowSafeOut();
  657.                                                                                                                                                         //      } else {
  658.                                                                                                                                                         //              glo.tg.sendTelegramMessage(tg_token, chat_id, 'Не хватает баланса. Или открыта сделка: /mb', function (err, body) { })
  659.                                                                                                                                                         //      }
  660.                                                                                                                                                         //}, user);
  661.                                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Переключись на биток', function (err, body) { })
  662.                                                                                                                                                 } else {
  663.                                                                                                                                                         allowSafeOut();
  664.                                                                                                                                                 }
  665.                                                                                                                                         } else {
  666.                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'На Вашем счету недостаточно средств.', function (err, body) {
  667.                                                                                                                                                         stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bal');
  668.                                                                                                                                                 });
  669.                                                                                                                                         }
  670.                                                                                                                                 } else {
  671.                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Минимальная сумма вывода: <b>' + config.o_min + '</b> р.', function (err, body) { });
  672.                                                                                                                                 }
  673.                                                                                                                         } else {
  674.                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Отправляется... ' + myAmo + ' р. на киви 79123456789n Шутка 🙃n Номер 79123456789 дан для примера.n Вместо него напишите нужный номер Qiwi: n<code>/o_номеркиви_' + myAmo + '</code>', function (err, body) {
  675.                                                                                                                                         stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bal');
  676.                                                                                                                                 });
  677.                                                                                                                         }
  678.                                                                                                                 } else {
  679.                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Курс неизвестен ... повторите попытку через пару минут: /start', function (err, body) { });
  680.                                                                                                                 }
  681.                                                                                                         } else {
  682.                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Переключись на /bal_btc', function (err, body) { });
  683.                                                                                                         }
  684.                                                                                                         return;
  685.                                                                                                 } catch (e) { glo.infA(undefined, "<code>ERROR 1746:" + e + '</code>'); }
  686.                                                                                         } else if ((0 === textLower.indexOf('/oc_') || 0 === textLower.indexOf('/ос_')) && (chat_id > 0)) {// пользовательский вывод на карту
  687.                                                                                                 try {
  688.                                                                                                         if (bitType === 'btc') {
  689.                                                                                                                 if (rateB && rateB > 0) {
  690.                                                                                                                         var myFields = text.split("_");
  691.                                                                                                                         var myDest = myFields[1].trim(),
  692.                                                                                                                                 myAmo = parseFloat(myFields[2]),
  693.                                                                                                                                 myCo = "";
  694.                                                                                                                         try {
  695.                                                                                                                                 myCo = myFields[3];
  696.                                                                                                                         } catch (e) { glo.infA(undefined, "<code>ERROR 1756:" + e + '</code>'); };
  697.                                                                                                                         if (myDest !== '1111222233334444')//example number
  698.                                                                                                                         {
  699.                                                                                                                                 if (myAmo >= config.minCard || user.isadmin) {
  700.                                                                                                                                         if (myAmo <= config.maxCard) {
  701.                                                                                                                                                 var curBalTest = unibal * rateB;
  702.                                                                                                                                                 if (myAmo <= curBalTest || user.isadmin === 1) {
  703.                                                                                                                                                         stg.safeOut(tg_token, user, 1, myDest, myAmo, myCo, unibal, bitType, rateB, function (id) {
  704.                                                                                                                                                                 //stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bal');
  705.                                                                                                                                                                 if (id && id > 0) {
  706.                                                                                                                                                                         var bitAmo = glo.floor8(myAmo / rateB);
  707.                                                                                                                                                                         var newStatItem = {
  708.                                                                                                                                                                                 bitType: bitType,
  709.                                                                                                                                                                                 amount: bitAmo,
  710.                                                                                                                                                                                 dt: Math.floor(new Date() / 1000)//Local_Unix_Time_In_Seconds
  711.                                                                                                                                                                         }
  712.                                                                                                                                                                         var statData = new dbc.mstat(newStatItem);
  713.                                                                                                                                                                         statData.save();
  714.                                                                                                                                                                         if (bitType === 'gst') {
  715.                                                                                                                                                                                 if (chat_id > 0) {
  716.                                                                                                                                                                                         stg.gstAutoMarDown(bitAmo / 2);
  717.                                                                                                                                                                                         stg.somethingFromTelegram(req, user, chat_id, from_id, 'gstrub');
  718.                                                                                                                                                                                 }
  719.                                                                                                                                                                         }
  720.                                                                                                                                                                 }
  721.                                                                                                                                                         });
  722.                                                                                                                                                 } else {
  723.                                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'На Вашем счету недостаточно средств /bal', function (err, body) { });
  724.                                                                                                                                                 }
  725.                                                                                                                                         } else {
  726.                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Максимальная сумма вывода на карту: <b>' + config.maxCard + '</b> р.', function (err, body) { });
  727.                                                                                                                                         }
  728.                                                                                                                                 } else {
  729.                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Минимальная сумма вывода на карту: <b>' + config.minCard + '</b> р.', function (err, body) { });
  730.                                                                                                                                 }
  731.                                                                                                                         } else {
  732.                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Отправляется... ' + myAmo + ' р. на карту 1111222233334444n Шутка 🙃n Номер 1111222233334444 дан для примера. Вместо него напишите нужный номер карты: n<code>/o_номеркарты_' + myAmo + '</code>', function (err, body) { });
  733.                                                                                                                         }
  734.                                                                                                                 } else {
  735.                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Курс неизвестен ... повторите попытку через пару минут: /start', function (err, body) { });
  736.                                                                                                                 }
  737.                                                                                                                 return;
  738.                                                                                                         } else {
  739.                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Переключись на /bal_btc', function (err, body) { });
  740.                                                                                                         }
  741.                                                                                                 }
  742.                                                                                                 catch (e) { glo.infA(undefined, "<code>ERROR 1783:" + e + '</code>'); }
  743.                                                                                         } else if (0 === textLower.indexOf('/om_') && chat_id > 0) {// пользовательский вывод на мобильный
  744.                                                                                                 try {
  745.                                                                                                         if (bitType === 'btc') {
  746.                                                                                                                 if (rateB && rateB > 0) {
  747.                                                                                                                         var myFields = text.split("_");
  748.                                                                                                                         var myDest = myFields[1].trim(),
  749.                                                                                                                                 myAmo = parseFloat(myFields[2]),
  750.                                                                                                                                 myCo = "";
  751.                                                                                                                         try {
  752.                                                                                                                                 myCo = myFields[3];
  753.                                                                                                                         } catch (e) { glo.infA(undefined, "<code>ERROR 1793:" + e + '</code>'); };
  754.                                                                                                                         if (myDest !== '79123456789') {//example number
  755.                                                                                                                                 if (myAmo >= config.minMobile || user.isadmin) {
  756.                                                                                                                                         if (myAmo <= config.maxMobile) {
  757.                                                                                                                                                 var curBalTest = unibal * rateB;
  758.                                                                                                                                                 if (myAmo <= curBalTest || user.isadmin === 1) {
  759.                                                                                                                                                         stg.safeOut(tg_token, user, 2, myDest, myAmo, myCo, unibal, bitType, rateB, function (id) {
  760.                                                                                                                                                                 //stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bal');
  761.                                                                                                                                                                 if (id && id > 0) {
  762.                                                                                                                                                                         var bitAmo = glo.floor8(myAmo / rateB);
  763.                                                                                                                                                                         var newStatItem = {
  764.                                                                                                                                                                                 bitType: bitType,
  765.                                                                                                                                                                                 amount: bitAmo,
  766.                                                                                                                                                                                 dt: Math.floor(new Date() / 1000)//Local_Unix_Time_In_Seconds
  767.                                                                                                                                                                         }
  768.                                                                                                                                                                         var statData = new dbc.mstat(newStatItem);
  769.                                                                                                                                                                         statData.save();
  770.                                                                                                                                                                         if (bitType === 'gst') {
  771.                                                                                                                                                                                 if (chat_id > 0) {
  772.                                                                                                                                                                                         stg.gstAutoMarDown(bitAmo / 2);
  773.                                                                                                                                                                                         stg.somethingFromTelegram(req, user, chat_id, from_id, 'gstrub');
  774.                                                                                                                                                                                 }
  775.                                                                                                                                                                         }
  776.                                                                                                                                                                 }
  777.                                                                                                                                                         });
  778.                                                                                                                                                 } else {
  779.                                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'На Вашем счету недостаточно средств /bal', function (err, body) { });
  780.                                                                                                                                                 }
  781.                                                                                                                                         } else {
  782.                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Максимальная сумма вывода на мобильный телефон: <b>' + config.maxMobile + '</b> р.', function (err, body) { });
  783.                                                                                                                                         }
  784.                                                                                                                                 } else {
  785.                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Минимальная сумма вывода на мобильный телефон: <b>' + config.minMobile + '</b> р.', function (err, body) { });
  786.                                                                                                                                 }
  787.                                                                                                                         } else {
  788.                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Отправляется... ' + myAmo + ' р. на баланс мобильного телефона 79123456789', function (err, body) {
  789.                                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Шутка 🙃', function (err, body) {
  790.                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер 79123456789 дан для примера. Вместо него напишите нужный номер мобильного телефона: n<code>/om_номертелефона_' + myAmo + '</code>', function (err, body) { });
  791.                                                                                                                                         });
  792.                                                                                                                                 });
  793.                                                                                                                         }
  794.                                                                                                                 } else {
  795.                                                                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Курс неизвестен ... повторите попытку через пару минут: /start', function (err, body) { });
  796.                                                                                                                 }
  797.                                                                                                                 return;
  798.                                                                                                         } else {
  799.                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Переключись на /bal_btc', function (err, body) { });
  800.                                                                                                         }
  801.                                                                                                 } catch (e) { glo.infA(undefined, "<code>ERROR 1822:" + e + '</code>'); }
  802.                                                                                         } else if (textLower === '/o' || textLower === '/щ' || text.indexOf(config.menu_sell_command_mini) === 0 || textLower === 'снять' || textLower === 'продать') {// ассортимент готовых сумм
  803.                                                                                                 try {
  804.                                                                                                         if (bitType === 'btc') {
  805.                                                                                                                 var s = 100;
  806.                                                                                                                 var m = 100;
  807.                                                                                                                 var rs = '';
  808.                                                                                                                 var messageId = 0;
  809.                                                                                                                 if (req.body.callback_query && req.body.callback_query.message) {
  810.                                                                                                                         messageId = req.body.callback_query.message.message_id;
  811.                                                                                                                 }
  812.                                                                                                                 if (chat_id > 0) {
  813.                                                                                                                         if (rateS && rateS > 0) {
  814.                                                                                                                                 var realCmsn = glo.floor3(bitType === 'gst' ? config.rateBMargin_GST : config.rateBMargin).toFixed(3);
  815.                                                                                                                                 stg.getMax(function (maxBalance, totBalance) {
  816.                                                                                                                                         var uniBalAsRub = glo.floor2(unibal * rateB);
  817.                                                                                                                                         if (maxBalance > uniBalAsRub) {
  818.                                                                                                                                                 maxBalance = parseInt(uniBalAsRub);
  819.                                                                                                                                         }
  820.                                                                                                                                         glo.tg.sendOrEdit(messageId, tg_token, chat_id, 'Готовая сумма к отправке: <code>' + maxBalance + '</code> р.nСуммарно: <code>' + totBalance + '</code> р.n Для вывода используйте команду:n' +
  821.                                                                                                                                                 'на киви:n/o_79123456789_' + maxBalance + 'n' +
  822.                                                                                                                                                 'на карту:n/oc_1111222233334444_' + maxBalance + 'n' +
  823.                                                                                                                                                 'на мобильный(сотовая связь):n/om_79123456789_' + maxBalance + 'n' +
  824.                                                                                                                                                 'Курс на продажу: <code>' + rateB + '</code> {' + (realCmsn > 0 ? '+' : '') + realCmsn + '}nна Вашем балансе = <code>' + glo.floor8(unibal).toFixed(8) + '</code> ' + bitType.toUpperCase() + ' ≈ <code>' + uniBalAsRub + '</code> р.', function (err, body) {
  825.                                                                                                                                                         if (config.bals_chat_id && config.bals_chat_id !== 0) {
  826.                                                                                                                                                                 glo.tg.sendTelegramMessage(tg_token, config.bals_chat_id, glo.emo(chat_id) + ' ' + glo.tg.a(chat_id) + ' /o <code>' + glo.floor8(unibal).pF() + '</code> ' + bitType.toUpperCase() + ' ≈ <code>' + uniBalAsRub + '</code> р.', function () { });
  827.                                                                                                                                                         } else {
  828.                                                                                                                                                                 glo.informAdmins(glo.tg.a(chat_id) + ' /o <code>' + glo.floor8(unibal).pF() + '</code> ' + bitType.toUpperCase() + ' ≈ <code>' + uniBalAsRub + '</code> р.', function () { }, tg_token, user.chat_id);
  829.                                                                                                                                                         }
  830.  
  831.                                                                                                                                                 }, config.menu_bal_kbd);
  832.                                                                                                                                 }, function () {
  833.                                                                                                                                         var btnsln = undefined;
  834.                                                                                                                                         if (bitType === 'gst') {
  835.                                                                                                                                                 //var popravka = (stg.xRatem_gst - stg.xRatemB_gst) / 4;
  836.                                                                                                                                                 if (config.gstFixedHi > 0 && config.gstFixedLo > 0) {
  837.                                                                                                                                                         var fixedBtcHigherRate = stg.xRatem;//config.gstFixedHi; //stg.xRatem;
  838.                                                                                                                                                         var fixedGstLowerRate = config.gstFixedLo; //stg.xRatemB_gst + popravka;
  839.                                                                                                                                                         var gstAsRub = 1 * fixedGstLowerRate;
  840.                                                                                                                                                         var gstAsBtc = gstAsRub / fixedBtcHigherRate;
  841.                                                                                                                                                         btnsln = [{ text: '1 GST 🔀 ' + (fixedGstLowerRate / fixedBtcHigherRate).toFixed(8) + ' BTC', callback_data: '/sg_1' }]
  842.                                                                                                                                                 }
  843.                                                                                                                                         }
  844.                                                                                                                                         stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, '/bots', function () { }, btnsln);
  845.                                                                                                                                 });
  846.                                                                                                                         } else {
  847.                                                                                                                                 glo.tg.sendOrEdit(messageId, tg_token, chat_id, 'торги приостановлены. узнаем курс. повторите попытку через 5 минут. /o', function (err, body) {
  848.                                                                                                                                         glo.informAdmins(glo.emo(chat_id) + ' ' + chat_id + ': /o (' + glo.floor8(unibal) + bitType + ' ≈ неизвестно)', function () { }, tg_token);
  849.                                                                                                                                 }, config.menu_bal_kbd);
  850.                                                                                                                         }
  851.                                                                                                                 } else {
  852.                                                                                                                         glo.tg.sendOrEdit(messageId, tg_token, chat_id, 'вывод доступен в Личных Сообщениях', function (err, body) { }, config.menu_bal_kbd);
  853.                                                                                                                 }
  854.                                                                                                         } else {
  855.                                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Переключись на /bal_btc', function (err, body) { });
  856.                                                                                                         }
  857.                                                                                                 } catch (e) { glo.infA(undefined, "<code>ERROR 1868:" + e + '</code>'); }
  858.                                                                                                 return;
  859.                                                                                         }
  860.                                                                                 }
  861.                                                                                 if (chat_id > 0) {
  862.                                                                                         if (glo.isFloat(text) || glo.isInt(text)) {
  863.                                                                                                 stg.setUSR(user._id, 'talk wait calc', {}, () => {
  864.                                                                                                         stg.somethingFromTelegramRefresh(req, user, chat_id, from_id, text);
  865.                                                                                                 });
  866.                                                                                         } else {
  867.                                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, config.err404text,
  868.                                                                                                         (err, body) => {
  869.                                                                                                                 try {
  870.                                                                                                                         body = JSON.parse(body);
  871.                                                                                                                         var messageId = body.result.message_id;
  872.                                                                                                                         stg.setUSR(user._id, '', { 'deleting_msg_flag': true }, () => { });
  873.                                                                                                                         setTimeout(() => {
  874.                                                                                                                                 stg.getUserSimpleReply(user, (user) => {
  875.                                                                                                                                         if (user.simpr.deleting_msg_flag) {
  876.                                                                                                                                                 glo.tg.deleteTelegramMessage(tg_token, chat_id, messageId);
  877.                                                                                                                                         }
  878.                                                                                                                                 })
  879.                                                                                                                         }, 30000);
  880.                                                                                                                 } catch (e) { glo.e("index ERR 1160:", e + body); }
  881.                                                                                                         }, JSON.stringify({ inline_keyboard: [[{ text: 'Баланс', callback_data: '/bal' }, { text: 'Купить', callback_data: '/buy' }]] }));
  882.                                                                                                 stg.setUSR(user._id, '', {}, () => { });
  883.                                                                                         }
  884.                                                                                 }
  885.                                                                                 if (config.sms_chat_id && config.sms_chat_id !== 0) {
  886.                                                                                         if (chat_id > 0) {
  887.                                                                                                 glo.tg.sendTelegramMessage(tg_token, config.sms_chat_id, glo.emo(chat_id) + ' ' + glo.tg.a(chat_id) + ':<code>' + text + '</code>', () => { });
  888.                                                                                         } else {
  889.                                                                                                 glo.tg.sendTelegramMessage(tg_token, config.sms_chat_id, glo.emo(from_id) + ' ' + glo.tg.a(from_id) + '(' + chat_id + '):<code>' + text + '</code>', () => { });
  890.                                                                                         }
  891.                                                                                 } else {
  892.                                                                                         if (text.length > 0) {
  893.                                                                                                 glo.informAdmins(glo.tg.a(chat_id) + ' 🤔:<code>' + text + '</code>', function () { }, tg_token, user.chat_id);
  894.                                                                                         }
  895.                                                                                 }
  896.  
  897.                                                                         } else {
  898.                                                                                 if (!config.allBotsD) { config.allBotsD = []; }
  899.                                                                                 var botsText = 'Крупнейшие соседние боты:n' + config.allBotsD.join('n');
  900.                                                                                 botsText += 'n<code>          </code><a href="https://t.me/BTC_CHANGE_BOT?start=' + config.banker_id + '">ручной обмен</a>n' +
  901.                                                                                         '<code>1</code> кГ = <code>1000</code> GST';
  902.                                                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, "Подождите пока бот разгрузится.nМинимальный порог баланса: " + config.mininvestgst + ' GSTn' + botsText);
  903.                                                                         }
  904.                                                                 } else {
  905.                                                                         glo.tg.sendTelegramMessage(tg_token, chat_id, "Попробуйте через 5 минут.");
  906.                                                                         return;
  907.                                                                 }
  908.                                                                 //                                                                              }
  909.                                                                 //}
  910.                                                                 //}
  911.                                                         } catch (e) {
  912.                                                                 if (e.message === 'PRIZRAK') { throw e; }
  913.                                                                 glo.infA(undefined, "<code>ERROR 2638:" + e + 'n' + JSON.stringify(req.body) + '</code>');
  914.                                                         }
  915.                                                 }
  916.                                         } else {
  917.                                                 console.log('ignore index 1282:' + text);
  918.                                         }
  919.                                 })
  920.                         });
  921.                         //}
  922.                 } catch (e) {
  923.                         glo.infA(undefined, "<code>ERROR 2645:" + e + '</code>');
  924.                         if (e.message === 'PRIZRAK') { throw e; }
  925.                 }
  926.         } else {//не текстовое сообщение
  927.                 glo.e('НЛО:', JSON.stringify(req.body));
  928.         }
  929. }
  930.  
  931. stg.somethingFromTelegram = somethingFromTelegram;
  932. //// подгрузка всех аддонов
  933. var glob = require('glob'), path = require('path'); config.addons = [];
  934. var files = glob.sync('./addons/**/*.js');
  935. var filesLoaded = 0;
  936. glo.process = process;
  937. var filesLoadedString = '';
  938. files.forEach(function (file) {
  939.         var addon_path = path.resolve(file);
  940.         //console.log('loaded: ' + file);
  941.         var addon_name = addon_path.split('/');
  942.         addon_name = addon_name[addon_name.length - 1].split('.')[0]
  943.         var r508 = require(file); config.addons.push({ 'name': addon_name, 'addon': r508 });
  944.         if (r508.init !== undefined) r508.init(config, glo, dbc, stg);//инициализация аддона, если она есть
  945.         filesLoaded += 1;
  946.         if (filesLoaded === files.length) {
  947.                 config.addons.reverse();
  948.                 filesLoadedString += addon_name;
  949.                 console.log('loaded addons:' + filesLoadedString);
  950.         } else {
  951.                 filesLoadedString += addon_name + ', ';
  952.         }
  953. });
  954. //glob.glob("./addons/**/*.js", function (err, matches) { if (err) throw err;
  955. //      matches = matches.map(function (match) {// use matches
  956. //              config.addons.push(require(path.resolve(match)));return;});});
  957. //// подгрузка аддонов
  958.  
  959. if (config.ngrokEnabled) {
  960.         glo.requestAPI({ url: config.NgrokAddr + '/api/tunnels/' + config.NgrokTunnelName }, function (err, resp) {
  961.                 if (err) { console.error("can't access " + config.NgrokAddr + '/api/tunnels/' + config.NgrokTunnelName); }
  962.                 else {
  963.                         var jo = JSON.parse(resp);
  964.                         var NgrokHookUrl = jo.public_url;//адрес который выдал ngrok
  965.                         firstRun(NgrokHookUrl);
  966.                 }
  967.         }, undefined);
  968. } else {
  969.         firstRun(config.staticHookUrl)
  970. }
  971. function firstRun(hookUrl) {
  972.         dbc.tguch.countDocuments({ 'chat_id': 0 }, function (err, c) {
  973.                 if (0 === c) {
  974.                         var item = {
  975.                                 chat_id: 0,
  976.                                 iid: 0
  977.                         };
  978.                         var data = new dbc.tguch(item);
  979.                         data.save(function () {
  980.                                 mainFun(hookUrl);
  981.                         });
  982.                 } else {
  983.                         mainFun(hookUrl);
  984.                 }
  985.         });
  986. }
  987. function mainFun(hookUrl) {
  988.         //glo.requestAPI({ url: "http://api.foxtools.ru/v2/Http" }, function (err, resp) {console.log(resp);}, config.workingProxy);//just test UA
  989.         //glo.requestAPI({ url: "http://api.foxtools.ru/v2/GeoIp" }, function (err, resp) {console.log(resp);}, config.workingProxy);//just test IP
  990.  
  991.         dbc.tguch.findOne({ 'chat_id': 0 }, function (err, doc) {
  992.                 if (!config.iid || config.iid < doc.iid) {
  993.                         stg.inst.iid = doc.iid;
  994.                         stg.upconf('iid', doc.iid);
  995.                 }
  996.  
  997.  
  998.                 //if (config.TradeGateEnabled) {
  999.                 //      stg.inst.iid = config.iid;
  1000.                 //      if (stg.inst.iid === undefined) { stg.inst.iid = 0; }
  1001.                 //      setTimeout(stg.startParentClient, 1000, dbc);
  1002.                 //}
  1003.                 app.use(bodyParser.urlencoded({ extended: true }));
  1004.                 app.use(bodyParser.json());
  1005.                 //app.use(express.multipart());
  1006.                 app.get('/', function (req, res, next) {
  1007.                         glo.msgDebug("req");
  1008.                         res.status(200).send("/what do you want? I'm not a site. I'm https://t.me/" + glo.telegramUserName + " bot.");
  1009.                 });
  1010.                 //app.post('/api/getnum', function (req, res, next) {
  1011.                 //      console.log(req.body);
  1012.                 //      if (req.body && req.body.k && req.body.k.length === 32) {
  1013.                 //              if (req.body.tgid) {
  1014.                 //                      var apiKey = glo.sanitize(req.body.k);
  1015.                 //                      var tgID = parseInt(req.body.tgid);
  1016.                 //
  1017.                 //                      dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1018.                 //                              if (!err && doc) {
  1019.                 //                                      var now = Math.floor(new Date() / 1000);
  1020.                 //                                      var wi = undefined;
  1021.                 //
  1022.                 //                                      function getSimpleNum(chat_id, res, scb, fcb) {
  1023.                 //                                              var now = Math.floor(new Date() / 1000);
  1024.                 //                                              var maxShownMoment = now - config.leaseTime * 60 * 60;
  1025.                 //                                              var maxFoxUserMoment = now - 60;
  1026.                 //                                              dbc.qw.findOneAndUpdate({
  1027.                 //                                                      $and: [
  1028.                 //                                                              { 'wActive': 1 },
  1029.                 //                                                              { 'wBalance': { $lte: config.maxBal - 500 } },
  1030.                 //                                                              {
  1031.                 //                                                                      $or: [
  1032.                 //                                                                              { 'wForUser': chat_id, 'wShown': { $gt: maxShownMoment } },
  1033.                 //                                                                              { 'wForUserDT': { $lte: maxFoxUserMoment }, 'wShown': { $lt: maxShownMoment } },
  1034.                 //                                                                              { 'wForUserDT': null }]
  1035.                 //                                                              }, {
  1036.                 //                                                                      $or: [
  1037.                 //                                                                              { 'wIdent': 0, 'wTotal': { $lte: config.maxOborot }, 'wCurCmsn': 0 },
  1038.                 //                                                                              { 'wIdent': 1, 'wTotal': { $lte: config.maxOborotStd } },
  1039.                 //                                                                              { 'wIdent': 2, 'wTotal': { $lte: config.maxOborotPro } }
  1040.                 //                                                                      ]
  1041.                 //                                                              }
  1042.                 //                                                      ]
  1043.                 //                                              }, { wForUser: chat_id, wForUserDT: now }, { sort: { wProxyChanges: 1, wi: 1, wShown: 1 }, returnNewDocument: true },
  1044.                 //                                                      function (err, docWal) {
  1045.                 //                                                              if (!err) {
  1046.                 //                                                                      if (docWal) {
  1047.                 //                                                                              if (docWal.wLastOK < now - 60 * 60 * 60 && config.readyQiwi > 0 && docWal.wBalance >= 5) {
  1048.                 //                                                                                      stg.burnQiwi(docWal, function (id) {
  1049.                 //                                                                                              if (id) {
  1050.                 //                                                                                                      scb(chat_id, res, docWal);
  1051.                 //                                                                                              } else {
  1052.                 //                                                                                                      fcb(chat_id, res, "bad wallet");
  1053.                 //                                                                                              }
  1054.                 //                                                                                      })
  1055.                 //                                                                              } else {
  1056.                 //                                                                                      scb(chat_id, res, docWal);
  1057.                 //                                                                              }
  1058.                 //                                                                      } else {
  1059.                 //                                                                              fcb(chat_id, res, "no");
  1060.                 //                                                                      }
  1061.                 //                                                              } else {
  1062.                 //                                                                      fcb(chat_id, res, "no. try again");
  1063.                 //                                                              }
  1064.                 //                                                      })
  1065.                 //                                      }
  1066.                 //
  1067.                 //                                      function lazyChackBalance(chat_id, res, wallet, scb, fcb) {
  1068.                 //                                              if (wallet.wShown !== undefined && wallet.wShown > now - 60) {
  1069.                 //                                                      console.log('just shown. just show');
  1070.                 //                                                      scb(chat_id, res, wallet);
  1071.                 //                                              } else {
  1072.                 //                                                      console.log('check balance before show.');
  1073.                 //                                                      stg.getQiwiBalance(wallet, true, function (wallet) {
  1074.                 //                                                              scb(chat_id, res, wallet);
  1075.                 //                                                      }, function () {
  1076.                 //                                                              glo.informAdmins('не загружается баланс /w_' + wallet.wi + ' : ' + wallet.wBalance, function () { }, config.tgbotAPI);
  1077.                 //                                                              dbc.qw.findOneAndUpdate({ _id: wallet._id }, { wActive: 0 }, { new: true }, (err, wallet) => { })
  1078.                 //                                                      });
  1079.                 //                                              }
  1080.                 //                                      }
  1081.                 //                                      function failedCb(chat_id, res, msg) {
  1082.                 //                                              glo.informAdmins("/getnum:" + msg, function () { }, config.tgbotAPI, chat_id);
  1083.                 //                                              res.status(200).send("{"ok":0,"msg":"" + msg + ""}");
  1084.                 //                                      }
  1085.                 //
  1086.                 //                                      getSimpleNum(tgID, res, function (chat_id, res, wallet) {
  1087.                 //                                              lazyChackBalance(chat_id, res, wallet, function (chat_id, res, wallet) {
  1088.                 //                                                      wallet.wShown = Math.floor(new Date() / 1000);
  1089.                 //                                                      dbc.qw.findByIdAndUpdate({ _id: wallet._id }, { wShown: wallet.wShown })
  1090.                 //
  1091.                 //                                                      glo.informAdmins("/getnum: /w_" + wallet.wi + " &lt;-&gt; " + chat_id, function () { }, config.tgbotAPI, chat_id);
  1092.                 //                                                      res.status(200).send("{"ok":1,"r":"" + wallet.wCard + "","qw":"" + wallet.wLogin + "","wi":" + wallet.wi + "}");
  1093.                 //                                              }, failedCb);
  1094.                 //                                      }, failedCb);
  1095.                 //                              } else {
  1096.                 //                                      res.status(200).send("{"ok":0,"msg":"wrong api"}");
  1097.                 //                              }
  1098.                 //                      })
  1099.                 //              } else {
  1100.                 //                      res.status(200).send("{"ok":0,"msg":"tgid expected"}");
  1101.                 //              }
  1102.                 //      } else {
  1103.                 //              res.status(200).send("{"ok":0,"msg":"k expected"}");
  1104.                 //      }
  1105.                 //})
  1106.                 app.post('/api/checkpay', function (req, res, next) {//проверка оплаты через апи бота
  1107.                         console.log(req.body);
  1108.                         if (req.body && req.body.k && req.body.k.length === 32) {
  1109.                                 var apiKey = glo.sanitize(req.body.k);
  1110.                                 var wi = parseInt(req.body.wi);
  1111.                                 dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1112.                                         if (!err && doc) {
  1113.                                                 glo.wiFinder(wi, function (wallet) {
  1114.                                                         var oldQiBal = wallet.wBalance;
  1115.                                                         stg.getQiwiBalance(wallet, true, function (wallet) {
  1116.                                                                 glo.informAdmins(wallet.wForUser + ' ПОСЛЕ /w_' + wallet.wi + ' : ' + wallet.wBalance, function () { }, config.tgbotAPI, wallet.wForUser);
  1117.                                                                 var addedR = glo.floor2(wallet.wBalance - oldQiBal);
  1118.                                                                 res.status(200).send("{"ok":1,"a":" + addedR.toFixed(2) + ","tgid":" + wallet.wForUser + "}");
  1119.                                                         }, function () {
  1120.                                                                 res.status(200).send("{"ok":0,"msg":"cant find wallet"}");
  1121.                                                         });
  1122.                                                 })
  1123.                                         } else {
  1124.                                                 res.status(200).send("{"ok":0,"msg":"wrong api"}");
  1125.                                         }
  1126.                                 })
  1127.                         } else {
  1128.                                 res.status(200).send("{"ok":0,"msg":"k parameter expected"}");
  1129.                         }
  1130.                 })
  1131.                 app.post('/api/outqiwi', function (req, res, next) {//запрос фиатного вывода через апи
  1132.                         console.log(req.body);
  1133.                         if (req.body && req.body.k && req.body.k.length === 32) {
  1134.                                 var apiKey = glo.sanitize(req.body.k);
  1135.                                 var destination = req.body.d;
  1136.                                 var amount = parseFloat(req.body.a);
  1137.                                 var comment = req.body.c;
  1138.                                 dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1139.                                         if (!err && doc) {
  1140.                                                 stg.safeOut(config.tgbotAPI, doc, 0, destination, amount, comment, doc.btc, 'btc', stg.xRatemB, function (id) {
  1141.                                                         if (id) {
  1142.                                                                 res.status(200).send("{"ok":1,"tr":"" + id + ""}");
  1143.                                                         } else {
  1144.                                                                 res.status(200).send("{"ok":0}");
  1145.                                                         }
  1146.                                                 });
  1147.                                         } else {
  1148.                                                 res.status(200).send("{"ok":0,"msg":"wrong api"}");
  1149.                                         }
  1150.                                 })
  1151.                         } else {
  1152.                                 res.status(200).send("{"ok":0,"msg":"k parameter expected"}");
  1153.                         }
  1154.                 })
  1155.                 app.post('/api/resetweekrally', function (req, res, next) {//сброс еженедельной гонки и раздача призов
  1156.                         console.log(req.body);
  1157.                         if (req.body && req.body.k && req.body.k.length === 32) {
  1158.                                 var apiKey = glo.sanitize(req.body.k);
  1159.                                 //var destination = req.body.d;
  1160.                                 //var amount = parseFloat(req.body.a);
  1161.                                 //var comment = req.body.c;
  1162.                                 dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1163.                                         var test = true;
  1164.                                         res.status(200).send("{"ok":1}");
  1165.                                         glo.informAdmins("executed /resetweekrally", function () { }, config.tgbotAPI, doc.chat_id);
  1166.                                         var topReferers = '';
  1167.                                         var cursor = dbc.tguch
  1168.                                                 .find({ '$or': [{ 'totalWonGSTWeek': { '$gt': 10 } }, { 'totalWonGSTWeek': { '$lte': -10 } }] })
  1169.                                                 .sort({ 'totalWonGSTWeek': -1, 'chat_id': 1 }).limit(50).cursor();
  1170.                                         var i = 0;
  1171.                                         var medal = '';
  1172.                                         cursor.on('data', function (r) {
  1173.                                                 i += 1;
  1174.                                                 var update = undefined;
  1175.                                                 var win = '';
  1176.                                                 switch (i) {
  1177.                                                         case 1: medal = '🥇'; win = '<b>ПРИЗ 500 GST</b>'; update = { '$inc': { 'gst': 500 } }; break;
  1178.                                                         case 2: medal = '🥈'; win = '<b>ПРИЗ 250 GST</b>'; update = { '$inc': { 'gst': 250 } }; break;
  1179.                                                         case 3: medal = '🥉'; win = '<b>ПРИЗ 100 GST</b>'; update = { '$inc': { 'gst': 100 } }; break;
  1180.                                                         case 4: medal = '🎁'; win = '<b>ПРИЗ 90 GST</b>'; update = { '$inc': { 'gst': 90 } }; break;
  1181.                                                         case 5: medal = '🎁'; win = '<b>ПРИЗ 80 GST</b>'; update = { '$inc': { 'gst': 80 } }; break;
  1182.                                                         case 6: medal = '🎁'; win = '<b>ПРИЗ 70 GST</b>'; update = { '$inc': { 'gst': 70 } }; break;
  1183.                                                         case 7: medal = '🎁'; win = '<b>ПРИЗ 60 GST</b>'; update = { '$inc': { 'gst': 60 } }; break;
  1184.                                                         case 8: medal = '🎁'; win = '<b>ПРИЗ 50 GST</b>'; update = { '$inc': { 'gst': 50 } }; break;
  1185.                                                         case 9: medal = '🎁'; win = '<b>ПРИЗ 40 GST</b>'; update = { '$inc': { 'gst': 40 } }; break;
  1186.                                                         case 10: medal = '🎁'; win = '<b>ПРИЗ 30 GST</b>'; update = { '$inc': { 'gst': 30 } }; break;
  1187.                                                         default: medal = '🎁'; win = '<b>ПРИЗ 10 GST</b>'; update = { '$inc': { 'gst': 10 } }; break;
  1188.                                                 }
  1189.                                                 if (r) {
  1190.                                                         var i1 = i;
  1191.                                                         dbc.tguch.findByIdAndUpdate(r._id, update, { new: true }, function (err, user) {
  1192.                                                                 glo.tg.sendTelegramMessage(config.tgbotAPI, user.chat_id, 'Вы заняли <b>' + i1 + '</b> место в еженедельной гонке.n' + win + 'n/BTR - Гонка Трейдеров', function (err, body) { })
  1193.                                                         });
  1194.                                                         topReferers += '' + glo.emo(r.chat_id) + medal + ' <a href="tg://user?id=' + r.chat_id + '">' + r.chat_id + '</a> ' + win + 'n';
  1195.                                                 } else {
  1196.                                                         console.log('nodoc');
  1197.                                                 }
  1198.                                         })
  1199.                                         cursor.on('close', function () {
  1200.                                                 if (config.chat_id_weekrally !== undefined) {
  1201.                                                         glo.tg.sendTelegramMessage(config.tgbotAPI, config.chat_id_weekrally, topReferers, function (err, body) { });
  1202.                                                 }
  1203.                                                 glo.informAdmins(topReferers, function () { }, config.tgbotAPI);
  1204.                                                 try {
  1205.                                                         dbc.tguch.updateMany({},
  1206.                                                                 { $set: { "totalDiviGSTWeek": 0, 'totalWonGSTWeek': 0 } }, function (err, numAffected) {
  1207.                                                                         glo.informAdmins('reseted: ' + JSON.stringify(numAffected), function () { }, config.tgbotAPI);
  1208.                                                                 })
  1209.                                                 } catch (e) { glo.infA(undefined, "<code>ERROR 2933:" + e + '</code>'); }
  1210.                                         })
  1211.                                 })
  1212.                         } else {
  1213.                                 res.status(200).send("{"ok":0,"msg":"k parameter expected"}");
  1214.                         }
  1215.                 })
  1216.                 app.post('/api/resetmonthqiwi', function (req, res, next) {//сброс месячного оборота киви кошельков
  1217.                         console.log(req.body);
  1218.                         if (req.body && req.body.k && req.body.k.length === 32) {
  1219.                                 var apiKey = glo.sanitize(req.body.k);
  1220.                                 dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1221.                                         try {
  1222.                                                 res.status(200).send("{"ok":1}");
  1223.                                                 dbc.qw.updateMany({},
  1224.                                                         { $set: { "wTotal": 0 } }
  1225.                                                         , callback);
  1226.                                                 function callback(err, numAffected) {
  1227.                                                         glo.informAdmins('reseted: ' + JSON.stringify(numAffected), function () { }, config.tgbotAPI);
  1228.                                                 }
  1229.                                         } catch (e) { glo.infA(undefined, "<code>ERROR 2953:" + e + '</code>'); }
  1230.                                 })
  1231.                         } else {
  1232.                                 res.status(200).send("{"ok":0,"msg":"k parameter expected"}");
  1233.                         }
  1234.                 })
  1235.                 app.post('/api/sendallbal', function (req, res, next) {//рассылка всех балансов
  1236.                         if (req.body && req.body.k && req.body.k.length === 32) {
  1237.                                 var apiKey = glo.sanitize(req.body.k);
  1238.                                 //var destination = req.body.d;
  1239.                                 //var amount = parseFloat(req.body.a);
  1240.                                 //var comment = req.body.c;
  1241.                                 dbc.tguch.findOne({ isadmin: 1, api2: apiKey }, function (err, doc) {
  1242.                                         try {
  1243.                                                 res.status(200).send("{"ok":1}");
  1244.                                                 stg.sendAllBalances();
  1245.                                         } catch (e) { glo.infA(undefined, "<code>ERROR 2969:" + e + '</code>'); }
  1246.                                 })
  1247.                         } else {
  1248.                                 res.status(200).send("{"ok":0,"msg":"k parameter expected"}");
  1249.                         }
  1250.                 })
  1251.                 app.post('/notify', function (req, res, next) {//оповещение указанного апи
  1252.                         glo.msgDebug("/notify");
  1253.                         var apiKey = glo.sanitize(req.body.api);
  1254.                         var cursor = dbc.tguch.find({ api: apiKey }).cursor();
  1255.                         cursor.on('data', function (user) {//перебираем
  1256.                                 glo.msgDebug("tgapi:" + config.tgbotAPI + " chat_id:" + user.chat_id + " msg:" + req.body.msg);
  1257.                                 glo.tg.sendTelegramMessage(config.tgbotAPI, user.chat_id, req.body.msg, function (err, body) {
  1258.                                         glo.msgDebug(body);
  1259.                                 })
  1260.                         });
  1261.                         cursor.on('error', function (err) {
  1262.                                 console.error(err);
  1263.                         })
  1264.                         cursor.on('close', function () {
  1265.                                 res.status(200).send("Notify(s) sended");
  1266.                         });
  1267.                 });
  1268.                 // app.post('/chunip', function (req, res, next) {//check unique of proxy hash //0 bad 1 good
  1269.                 //      try {
  1270.                 //              //console.log('/check proxy hash');
  1271.                 //              var proxyHash = '';
  1272.                 //              if (req.body && glo.validMD5.test(req.body.w) && glo.validMD5.test(req.body.p)) {
  1273.                 //                      var chw = req.body.w,
  1274.                 //                              chp = req.body.p;
  1275.  
  1276.                 //                      dbc.unip.findOne({ proxyHash: chp }, function (err, doc) {
  1277.                 //                              if (doc) {
  1278.                 //                                      if (doc.itemHash === chw) {
  1279.                 //                                              res.status(200).send('{"ok":1}');
  1280.                 //                                              //glo.informAdmins('⛓ chunip 1 #' + chp, function () { }, config.tgbotAPI);
  1281.                 //                                      } else {
  1282.                 //                                              res.status(200).send('{"ok":0}');
  1283.                 //                                              //glo.informAdmins('⛓ chunip 0 #' + chw + ' #' + chp, function () { }, config.tgbotAPI);
  1284.                 //                                      }
  1285.                 //                              } else {
  1286.                 //                                      var newunip = {
  1287.                 //                                              dt: Math.floor(new Date() / 1000),
  1288.                 //                                              itemHash: chw,
  1289.                 //                                              proxyHash: chp
  1290.                 //                                      }
  1291.                 //                                      var data = new dbc.unip(newunip);
  1292.                 //                                      data.s ave();
  1293.                 //                                      res.status(200).send('{"ok":1}');
  1294.                 //                                      //glo.informAdmins('⛓ chunip 1 #' + chw + ' #' + chp, function () { }, config.tgbotAPI);
  1295.                 //                              }
  1296.                 //                      })
  1297.                 //              } else {
  1298.                 //                      res.status(200).send('{"ok":-1}');
  1299.                 //                      //glo.informAdmins('⛓ chunip -1 ', function () { }, config.tgbotAPI);
  1300.                 //              }
  1301.                 //      } catch (e) {
  1302.                 //              glo.infA(undefined, "<code>ERROR 3025:" + e + '</code>');
  1303.                 //              res.status(200).send('{"ok":-2}');
  1304.                 //              //glo.informAdmins('⛓ chunip -2 ', function () { }, config.tgbotAPI);
  1305.                 //      }
  1306.                 // });
  1307.                 app.get('/api/ticker', function (req, res, next) {//курс по запросу
  1308.                         try {
  1309.                                 var GSTvsUSD = (config.gstFixedLo / (stg.xRate / stg.xRate_XBTUSD)).toFixed(2);
  1310.                                 var GSTvsRUB = config.gstFixedLo.toFixed(2);
  1311.                                 var BTCvsRUB = stg.xRate.toFixed(2);
  1312.                                 var BTCvsUSD = stg.xRate_XBTUSD.toFixed(2);
  1313.                                 //stg.getMax(function (maxBalance, totBalance) {
  1314.                                 res.status(200).send('{"data":{"GSTUSD":' + GSTvsUSD + ',"GSTRUB":' + GSTvsRUB + ',"BTCUSD":' + BTCvsUSD + ',"BTCRUB":' + BTCvsRUB  /*',"DASHUSD":' + stg.xRate_DASHUSD.toFixed(2) + ',"AQR":' + maxBalance + ',"TQR":' + totBalance*/ + '}}');
  1315.                                 //})
  1316.                                 console.log('/api/ticker');
  1317.                         } catch (e) {
  1318.                                 glo.infA(undefined, "<code>ERROR 3039:" + e + '</code>');
  1319.                                 res.status(200).send('{}');
  1320.                                 console.log('/API/TICKER!ERROR');
  1321.                         }
  1322.                 });
  1323.                 for (var i = 0; i < config.addons.length; i++) {//
  1324.                         if (config.addons[i].addon.exports_api) {
  1325.                                 config.addons[i].addon.exports_api(config, glo, dbc, stg, app);//подгрузка api методов из аддонов
  1326.                         }
  1327.                 }
  1328.  
  1329.                 //подтверждение владения доменом ngrok для payeer мерчанта. требуется домен второго уровня.
  1330.                 //app.get("/" + config.payeerFileName, function (req, res, next) {
  1331.                 //      res.status(200).send(config.payeerFileContent);
  1332.                 //      glo.msgDebug("/" + config.payeerFileName);
  1333.                 //});
  1334.  
  1335.                 //для телеграм хука
  1336.                 app.post('/webhook/:id', function (req, res, next) {
  1337.                         var antiflood = false;
  1338.                         if (req.body.message) {
  1339.                                 if (config.banned.indexOf(req.body.message.from.id)) {
  1340.                                         tgRouter(req, res, next, dbc);
  1341.                                 } else {
  1342.                                         res.status(200).send();
  1343.                                 }
  1344.                         } else if (req.body.callback_query) {
  1345.                                 if (config.banned.indexOf(req.body.callback_query.from.id)) {
  1346.                                         tgRouter(req, res, next, dbc);
  1347.                                 } else {
  1348.                                         res.status(200).send();
  1349.                                 }
  1350.                         } else if (req.body.inline_query) {
  1351.                                 if (config.banned.indexOf(req.body.inline_query.from.id)) {
  1352.                                         tgRouter(req, res, next, dbc);
  1353.                                 } else {
  1354.                                         res.status(200).send();
  1355.                                 }
  1356.                         } else if (req.body.channel_post) {
  1357.                                 //{"update_id":230695430,"channel_post":{"message_id":6,"chat":{"id":-1001212095003,"title":"логи rou","type":"channel"},"date":1578645709,"text":"."}}
  1358.                                 var text = req.body.channel_post.text;
  1359.                                 var chat_id = req.body.channel_post.chat.id;
  1360.                                 if (text === '/getgroupid') {
  1361.                                         glo.tg.sendTelegramMessage(config.tgbotAPI, chat_id, '<code>' + chat_id + '</code>', (err, body) => { });
  1362.                                 }
  1363.                                 res.status(200).send();
  1364.                         } else {
  1365.                                 tgRouter(req, res, next, dbc);
  1366.                                 console.log('index.js sft 1725:req.body=' + JSON.stringify(req.body));
  1367.                                 //glo.infA(undefined, '<code>' + JSON.stringify(req.body) + '</code>');
  1368.                                 next();
  1369.                         }
  1370.                 });
  1371.  
  1372.                 //For own https
  1373.                 if (!config.ngrokEnabled && config.httpsBackEnd && config.hookUrl && config.hookPort) {
  1374.                         const https = require('https');//npm install --save https
  1375.                         var fs = require('fs');//доступ к файловой системе.
  1376.                         var options = {
  1377.                                 key: fs.readFileSync('cer/private.key'),
  1378.                                 cert: fs.readFileSync('cer/public.pem'),
  1379.                                 //ca: fs.readFileSync('certificates/ca_bundle.crt')
  1380.                         };
  1381.                         setTimeout(() => {
  1382.                                 https.createServer(options, app).listen(config.hookPort); console.log('Listening: https://0.0.0.0:' + config.hookPort);
  1383.                         }, 10000);
  1384.                         glo.tg.setWebhook(config.hookUrl, config.tgbotAPI, function () {
  1385.                                 console.log("WEBHOOK_WAS_SET");
  1386.                         }, 'cer/public.pem');
  1387.                 } else {
  1388.                         glo.tg.setWebhook(hookUrl, config.tgbotAPI, function () {
  1389.                                 console.log("WEBHOOK_WAS_SET");
  1390.                         });
  1391.                 }
  1392.                 console.log('Wait 10 second before listening 127.0.0.1:' + config.backendPort);
  1393.                 setTimeout(function () {
  1394.                         app.listen(config.backendPort, 'localhost', () => {
  1395.                                 console.log('Listening: http://localhost:' + config.backendPort);
  1396.                         }).on('error', () => {
  1397.                                 console.log('Бот уже запущен в другом окне. попробуй одно из следующего:n1. отключиться от этого экрана ctrl+a,d отобразить список всех экранов screen -list подключиться к нужному экрану screen -x НАЗВАНИЕЭКРАНАnИЛИnввести reboot и пройтись по инструкции запуска.')
  1398.                                 glo.process.exit(0);
  1399.                         });
  1400.                 }, 10000);
  1401.         });
  1402. }
  1403.  

Share with your friends:

Print