SaveText.Ru

Без имени
  1. var addon = {};
  2. module.exports = addon;
  3. var busy_PopWallet = false;
  4. var walletCleaner = false;
  5. addon.main = function (config, glo, dbc, stg, req, user, tg_token, chat_id, from_id,
  6.     bitType, text, textLower, cb, marginS, marginB, rateS, rateB) {
  7.     if (user.isadmin) {
  8.         var now = Math.floor(new Date() / 1000);
  9.         if (textLower.indexOf('rou_infinite_chat_id') === 0 || textLower.indexOf('config.infinite_rou_chat_id') === 0) {
  10.             text.splitP(parseInt, (c) => {
  11.                 stg.upconf('infinite_rou_chat_id', c);
  12.                 glo.infA(chat_id, 'Бесконечная рулетка в чате = n<code>' + c + '</code>');
  13.             })
  14.             return true;
  15.         } else if (textLower.indexOf('rou_infinite_chat_url') === 0) {
  16.             text.splitP(false, (c) => {
  17.                 stg.upconf('rou_infinite_chat_url', c);
  18.                 glo.infA(chat_id, 'Адрес чата бесконечной рулетки = n<code>' + c + '</code>');
  19.             })
  20.             return true;
  21.         } else if (textLower.indexOf('rou_log_chat_id') === 0 || textLower.indexOf('config.log_rou_chat_id') === 0) {
  22.             text.splitP(parseInt, (c) => {
  23.                 stg.upconf('log_rou_chat_id', c);
  24.                 glo.infA(chat_id, 'Лог ставок и результатов на отдельном канале =n<code>' + c + '</code>');
  25.             })
  26.             return true;
  27.         } else if (textLower.indexOf('rou_bank') === 0 || textLower.indexOf('roubank') === 0) {
  28.             glo.infA(chat_id, 'В банке: <code>' + config.rouBank + '</code> GST');
  29.             return true;
  30.         } else if (textLower.indexOf('rou_set_bank ') === 0) {
  31.             text.splitP(parseFloat, (c) => {
  32.                 stg.upconf('rouBank', c);
  33.                 glo.infA(chat_id, 'В банке: <code>' + c + '</code> GST');
  34.             })
  35.             return true;
  36.         } else if (textLower.indexOf('rou_max ') === 0) {
  37.             text.splitP(parseFloat, (c) => {
  38.                 stg.upconf('rou_max', c);
  39.                 glo.infA(chat_id, 'Максимальная ставка: <code>' + c + '</code> GST');
  40.             })
  41.             return true;
  42.         } else if (textLower.indexOf('rou_max_count ') === 0) {
  43.             text.splitP(parseFloat, (c) => {
  44.                 stg.upconf('rou_max_count', c);
  45.                 glo.infA(chat_id, 'Максимальное количество ставок на один результат: <code>' + c + '</code>');
  46.             })
  47.             return true;
  48.         } else if (textLower.indexOf('rou_min_start ') === 0) {
  49.             text.splitP(parseFloat, (c) => {
  50.                 stg.upconf('rou_min_start', c);
  51.                 glo.infA(chat_id, 'Баланс для запуска рулетки: <code>' + c + '</code> GST');
  52.             })
  53.             return true;
  54.         } else if (textLower.indexOf('rou_set_owner') === 0) {
  55.             // /set_rou_owner chat_id user_id
  56.             var arr = textLower.split(' ')
  57.             if (arr.length === 3) {
  58.                 dbc.grouletteGame.findOneAndUpdate({ 'chat_id': parseInt(arr[1]) }, { 'user_id': parseInt(arr[2]) }, { new: true }, function (err, g) {
  59.                     if (!err && g) {
  60.                         glo.tg.sendTelegramMessage(tg_token, from_id, 'Новый хозяин: ' + g.user_id);
  61.                     }
  62.                 })
  63.             }
  64.             return true;
  65.         } else if (textLower.indexOf('chart_bgcolor') === 0) {
  66.             text.splitP(false, (s) => {
  67.                 stg.upconf('chart_bgcolor', s);
  68.                 glo.infA(chat_id, 'Фон графика:n<code>' + config.chart_bgcolor + '</code>');
  69.             })
  70.             return true;
  71.         } else if (textLower.indexOf('chart_textcolor') === 0) {
  72.             text.splitP(false, (s) => {
  73.                 stg.upconf('chart_textcolor', s);
  74.                 glo.infA(chat_id, 'Фон текста:n<code>' + config.chart_textcolor + '</code>');
  75.             })
  76.             return true;
  77.         } else if (textLower.indexOf('min_to_deals') === 0) {
  78.             text.splitP(parseInt, (s) => {
  79.                 stg.upconf('DEALS_min_to_log', s);
  80.                 glo.infA(chat_id, 'Мин.сумма для публикации на канал СДЕЛКИ:n<code>' + s + '</code>₽');
  81.             })
  82.             return true;
  83.         } else if (textLower.indexOf('max_to_deals') === 0) {
  84.             text.splitP(parseInt, (s) => {
  85.                 stg.upconf('DEALS_max_to_log', s);
  86.                 glo.infA(chat_id, 'Макс.сумма для публикации на канал СДЕЛКИ:n<code>' + s + '</code>₽');
  87.             })
  88.             return true;
  89.         } else if (textLower === '/stat') {
  90.             var now = Math.floor(new Date() / 1000);
  91.             dbc.tguch.countDocuments({ antispam: { '$ne': 1 } }, function (err, c_all) {
  92.                 dbc.tguch.countDocuments({ lastMessage: { $gte: now - 60 * 60 * 24 * 7 }, antispam: { '$ne': 1 } }, function (err, c_week) {
  93.                     dbc.tguch.countDocuments({ lastMessage: { $gte: now - 60 * 60 * 24 }, antispam: { '$ne': 1 } }, function (err, c_day) {
  94.                         glo.tg.sendTelegramMessage(tg_token, chat_id,
  95.                             'Всего пользователей: ' + c_all + 'n' +
  96.                             'За неделю:' + c_week + 'n' +
  97.                             'За сутки:' + c_day, function (err, body) { })
  98.                     })
  99.                 })
  100.             })
  101.             return true;
  102.         } else if (textLower.indexOf('/mstat') === 0) {
  103.             var days = 7;
  104.             var arr = text.split('_');
  105.             if (arr.length > 1) {
  106.                 days = parseFloat(arr[1]);
  107.             }
  108.             stg.countProfit(function (sum_s, sum_b, m, sum_short, sum_long) {
  109.                 var realProfit = sum_s > 0 && sum_b > 0 ? glo.floor8(sum_s >= sum_b ? sum_b * m : sum_s * m) : 0;
  110.                 var mStat7Day = '<b>' + days + ' дней ' + bitType.toUpperCase() + ' </b>n' +
  111.                     '<code>Я продал: ' + (sum_s).pF() + 'n' +
  112.                     'Я купил : ' + (sum_b).pF() + 'n' +
  113.                     '      = : ' + realProfit.pF();
  114.                 if (sum_short != undefined && sum_long != undefined) {
  115.                     mStat7Day += 'nза шорт :' + sum_short.pF();
  116.                     mStat7Day += 'nза лонг :' + sum_long.pF();
  117.                     mStat7Day += 'n      = :' + (sum_long + sum_short).pF();
  118.                 }
  119.                 mStat7Day += '</code>';
  120.                 glo.tg.sendTelegramMessage(tg_token, chat_id, mStat7Day);
  121.             }, bitType, days, marginB, marginS);
  122.             return true;
  123.         } else if (textLower === 'mininvest') {
  124.             glo.infA(chat_id, 'Порог баланса: <code>' + config.mininvestgst + '</code> GST');
  125.             return true;
  126.         } else if (textLower.indexOf('mininvest ') === 0) {
  127.             text.splitP(parseFloat, (c) => {
  128.                 stg.upconf('mininvestgst', c);
  129.                 glo.infA(chat_id, 'Установлен порог инвесторов: <code>' + c + '</code> GST');
  130.             })
  131.             return true;
  132.         } else if (textLower.indexOf('mininvestdelta ') === 0) {
  133.             text.splitP(parseFloat, (c) => {
  134.                 stg.upconf('mininvestgstdelta', c);
  135.                 glo.infA(chat_id, 'Установлена дельта автовипа: <code>' + c + '</code> GST');
  136.             })
  137.             return true;
  138.         } else if (textLower.indexOf('taloncmsn ') === 0) {
  139.             text.splitP(parseFloat, (c) => {
  140.                 stg.upconf('talon_cmsn', c);
  141.                 glo.infA(chat_id, 'Установлена комиссия на использование талона: <code>' + (c * 100) + '</code>%');
  142.             })
  143.             return true;
  144.         } else if (textLower.indexOf('ignoresum ') === 0) {
  145.             text.splitP(parseFloat, (c) => {
  146.                 stg.upconf('ignoreSum', c);
  147.                 glo.infA(chat_id, 'Входящие суммы на киви меньше <code>' + c + '</code> ₽ будут игнорироваться.');
  148.             })
  149.             return true;
  150.         } else if (textLower.indexOf('marmax ') === 0 || textLower.indexOf('mm ') === 0) {
  151.             text.splitP(parseFloat, (c) => {
  152.                 stg.upconf('maxMarzha', c);
  153.                 glo.infA(chat_id, 'Макс.маржа:<code>' + c + '</code> GST');
  154.             })
  155.             return true;
  156.         } else if (textLower.indexOf('marmin ') === 0) {
  157.             text.splitP(parseFloat, (c) => {
  158.                 stg.upconf('mar_min', c);
  159.                 glo.infA(chat_id, 'Мин.маржа:<code>' + c + '</code> GST');
  160.             })
  161.             return true;
  162.         } else if (textLower.indexOf('minimizer ') === 0) {
  163.             text.splitP(parseFloat, (c) => {
  164.                 stg.upconf('minimizer', c);
  165.                 glo.infA(chat_id, 'Влияние маржиналки на курс госта:1/<code>' + c + '</code>');
  166.             })
  167.             return true;
  168.         } else if (textLower.indexOf('paysil ') === 0 || textLower.indexOf('paysilence ') === 0) {
  169.             text.splitP(parseFloat, (c) => {
  170.                 stg.upconf('paysil', c);
  171.                 glo.infA(chat_id, 'Отключение приема после платежа <code>' + c + '</code> ч.');
  172.             })
  173.             return true;
  174.         } else if (textLower.indexOf('ignoresumtext ') === 0) {
  175.             text.splitP(false, (s) => {
  176.                 stg.upconf('ignoreSumText', s);
  177.                 glo.infA(chat_id, 'Теперь буду отвечать на мелкие суммы:n' + glo.util.format(config.ignoreSumText, 1, config.ignoreSum) + 'n<a href="tg://user?id=' + config.admin_id + '">админ</a>');
  178.             })
  179.             return true;
  180.         } else if (textLower.indexOf('oksendedtext ') === 0) {
  181.             text.splitP(false, (s) => {
  182.                 stg.upconf('okSendedText', s);
  183.                 glo.infA(chat_id, 'Сообщение об успешной отправке:n' + config.okSendedText);
  184.             })
  185.             return true;
  186.         } else if (textLower.indexOf('err404text ') === 0) {
  187.             text.splitP(false, (s) => {
  188.                 stg.upconf('err404text', s);
  189.                 glo.infA(chat_id, 'Сообщение о неизвестной команде:n' + config.err404text);
  190.             })
  191.             return true;
  192.         } else if (textLower.indexOf('banker_id ') === 0) {
  193.             text.splitP(false, (s) => {
  194.                 stg.upconf('banker_id', s);
  195.                 glo.infA(chat_id, 'рефка на банкер:n' + config.banker_id);
  196.             })
  197.             return true;
  198.         } else if (textLower.indexOf('min_btc_withdrawal_amount ') === 0) {
  199.             text.splitP(parseFloat, (c) => {
  200.                 stg.upconf('min_btc_withdrawal_amount', c);
  201.                 glo.infA(chat_id, 'Минимальная сумма для вывода BTC: <code>' + c + '</code> GST');
  202.             })
  203.             return true;
  204.         } else if (textLower.indexOf('mincard') === 0) {
  205.             text.splitP(parseFloat, (c) => {
  206.                 stg.upconf('minCard', c);
  207.                 glo.infA(chat_id, 'Установлена минимальная сумма вывода на карту: <code>' + c + '</code> ₽');
  208.             })
  209.             return true;
  210.         } else if (textLower.indexOf('maxcard') === 0) {
  211.             text.splitP(parseFloat, (c) => {
  212.                 stg.upconf('maxCard', c);
  213.                 glo.infA(chat_id, 'Установлена максимальная сумма вывода на карту: <code>' + c + '</code> ₽');
  214.             })
  215.             return true;
  216.         } else if (textLower.indexOf('mincost') === 0) {
  217.             text.splitP(parseFloat, (c) => {
  218.                 stg.upconf('minCost', c);
  219.                 glo.infA(chat_id, 'Установлен минимальный курс GST: <code>' + c + '</code> ₽');
  220.             })
  221.             return true;
  222.         } else if (textLower.indexOf('antiflood ') === 0) {
  223.             text.splitP(parseFloat, (c) => {
  224.                 stg.upconf('antiflood', c);
  225.                 glo.infA(chat_id, 'Время между соседними командами от пользователя: <code>' + c + '</code> с');
  226.             })
  227.             return true;
  228.         } else if (textLower.indexOf('доллар ') === 0) {
  229.             text.splitP(parseFloat, (c) => {
  230.                 stg.upconf('xRate_USDRUB', c);
  231.                 stg.xRate_USDRUB = c;
  232.                 glo.infA(chat_id, 'Установлен фиксированный курс доллара: <code>' + c + '</code> ₽');
  233.             })
  234.             return true;
  235.         } else if (textLower.indexOf('pyr') === 0) {
  236.             text.splitP(parseFloat, (c) => {
  237.                 stg.upconf('pyr', c);
  238.                 stg.xRate_USDRUB = c;
  239.                 glo.infA(chat_id, 'налог/дивиденд: <code>' + c + '</code>%');
  240.             })
  241.             return true;
  242.         } else if (textLower.indexOf('config.bals_chat_id') === 0) {
  243.             var arr = text.split('=');
  244.             var value = arr[1].trim();
  245.             if (value.length > 2 && (value[0] === ''' || value[0] === '"') &&
  246.                 (value[value.length - 1] === ''' || value[value.length - 1] === ''')) {//строка
  247.                 value = value.slice(1, value.length - 1);
  248.             }
  249.             stg.upconf('bals_chat_id', parseInt(value));
  250.             glo.infA(chat_id, 'Установлен chat_id канала с запросами балансов:n<code>' + value + '</code>');
  251.             return true;
  252.         } else if (textLower.indexOf('график госта') === 0) {
  253.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'Перекинь сообщение из канала где я буду публиковать график', function (err, body) { })
  254.             stg.setUSR(user._id, 'admin waits repost gst chart chat', { talon_id: t._id }, () => { });
  255.             return true;
  256.         } else if (textLower.indexOf('config.deals_chat_id') === 0) {
  257.             var arr = text.split('=');
  258.             var value = arr[1].trim();
  259.             if (value.length > 2 && (value[0] === ''' || value[0] === '"') &&
  260.                 (value[value.length - 1] === ''' || value[value.length - 1] === ''')) {//строка
  261.                 value = value.slice(1, value.length - 1);
  262.             }
  263.             stg.upconf('DEALS_chat_id', parseInt(value));
  264.             glo.infA(chat_id, 'Установлен chat_id канала сделок:n<code>' + value + '</code>');
  265.             return true;
  266.         } else if (textLower.indexOf('config.longshort_chat_id_h') === 0) {
  267.             var arr = text.split('=');
  268.             var value = arr[1].trim();
  269.             value = parseInt(value)
  270.             stg.upconf('LONGSHORT_chat_id_h', value);
  271.             glo.infA(chat_id, 'Установлен chat_id канала "Курс (' + config.botNoteFirstLetter + ')":n<code>' + value + '</code>');
  272.             return true;
  273.         } else if (textLower.indexOf('config.btcusd_chat_id_tmp') === 0) {
  274.             var arr = text.split('=');
  275.             var value = arr[1].trim();
  276.             value = parseInt(value)
  277.             stg.upconf('btcusd_chat_id_tmp', value);
  278.             glo.infA(chat_id, 'Установлен chat_id временного канала(для каждого кадра вертикального графика. можно оптимизировать так: https://toster.ru/q/565519 ) =n<code>' + value + '</code>');
  279.             return true;
  280.         } else if (textLower.indexOf('config.btcusd_chat_id') === 0) {
  281.             var arr = text.split('=');
  282.             var value = arr[1].trim();
  283.             value = parseInt(value)
  284.             stg.upconf('btcusd_chat_id', value);
  285.             glo.infA(chat_id, 'Установлен chat_id канала с вертикальным графиком =n<code>' + value + '</code>');
  286.             return true;
  287.         } else if (textLower.indexOf('config.gstrub_chat_id_tmp') === 0) {
  288.             var arr = text.split('=');
  289.             var value = arr[1].trim();
  290.             value = parseInt(value)
  291.             stg.upconf('gstrub_chat_id_tmp', value);
  292.             glo.infA(chat_id, 'Установлен chat_id временного канала(для каждого кадра вертикального графика госта. можно оптимизировать так: https://toster.ru/q/565519 ) =n<code>' + value + '</code>');
  293.             return true;
  294.         } else if (textLower.indexOf('config.gstrub_chat_id') === 0) {
  295.             var arr = text.split('=');
  296.             var value = arr[1].trim();
  297.             value = parseInt(value)
  298.             stg.upconf('gstrub_chat_id', value);
  299.             glo.infA(chat_id, 'Установлен chat_id канала с вертикальным графиком госта =n<code>' + value + '</code>');
  300.             return true;
  301.         } else if (textLower.indexOf('config.botnote_chat_id') === 0) {
  302.             var arr = text.split('=');
  303.             var value = arr[1].trim();
  304.             value = parseInt(value)
  305.             stg.upconf('botNote_chat_id', value);
  306.             glo.infA(chat_id, 'Установлен chat_id канала с использованными талонами =n<code>' + value + '</code>');
  307.             return true;
  308.         } else if (textLower.indexOf('config.chat_id_badproxy') === 0) {
  309.             var arr = text.split('=');
  310.             var value = arr[1].trim();
  311.             value = parseInt(value)
  312.             stg.upconf('chat_id_badProxy', value);
  313.             glo.infA(chat_id, 'Установлен chat_id канала c логинами проблемных прокси =n<code>' + value + '</code>');
  314.             return true;
  315.         } else if (textLower.indexOf('config.chat_id_tcutcd') === 0) {
  316.             var arr = text.split('=');
  317.             var value = arr[1].trim();
  318.             value = parseInt(value)
  319.             stg.upconf('chat_id_tcutcd', value);
  320.             glo.infA(chat_id, 'Установлен chat_id канала c рефинансированием лонгов-шортов =n<code>' + value + '</code>');
  321.             return true;
  322.         } else if (textLower.indexOf('config.sms_chat_id') === 0) {
  323.             var arr = text.split('=');
  324.             var value = arr[1].trim();
  325.             value = parseInt(value)
  326.             stg.upconf('sms_chat_id', value);
  327.             glo.infA(chat_id, 'Установлен chat_id канала подслушанных(нераспознанных) сообщений =n<code>' + value + '</code>');
  328.             return true;
  329.         } else if (textLower.indexOf('config.tot_chat_id') === 0) {
  330.             var arr = text.split('=');
  331.             var value = arr[1].trim();
  332.             value = parseInt(value)
  333.             stg.upconf('TOT_chat_id', value);
  334.             glo.infA(chat_id, 'Установлен ежеминутный TOT =n<code>' + value + '</code>');
  335.             return true;
  336.         } else if (textLower.indexOf('config.tot_chat_id_h') === 0) {
  337.             var arr = text.split('=');
  338.             var value = arr[1].trim();
  339.             value = parseInt(value)
  340.             stg.upconf('TOT_chat_id_h', value);
  341.             glo.infA(chat_id, 'Установлен часовой TOT =n<code>' + value + '</code>');
  342.             return true;
  343.         } else if (textLower.indexOf('config.deals_link') === 0) {
  344.             var arr = text.split('=');
  345.             var value = arr[1].trim();
  346.             if (value.length > 2 && (value[0] === ''' || value[0] === '"') &&
  347.                 (value[value.length - 1] === ''' || value[value.length - 1] === ''')) {//строка
  348.                 value = value.slice(1, value.length - 1);
  349.             }
  350.             stg.upconf('DEALS_link', value);
  351.             glo.infA(chat_id, 'Установлена пригласительная ссылка на канал сделок:n<code>' + value + '</code>');
  352.             return true;
  353.         } else if (textLower.indexOf('chat_link') === 0) {
  354.             var arr = text.split(' ');
  355.             var value = arr[1].trim();
  356.             if (value.length > 2 && (value[0] === ''' || value[0] === '"') &&
  357.                 (value[value.length - 1] === ''' || value[value.length - 1] === ''')) {//строка
  358.                 value = value.slice(1, value.length - 1);
  359.             }
  360.             stg.upconf('linkChat', value);
  361.             glo.infA(chat_id, 'Установлена пригласительная ссылка на чат бота:n' + value + '');
  362.             return true;
  363.         } else if (textLower.indexOf('faq_link') === 0) {
  364.             var arr = text.split(' ');
  365.             var value = arr[1].trim();
  366.             if (value.length > 2 && (value[0] === ''' || value[0] === '"') &&
  367.                 (value[value.length - 1] === ''' || value[value.length - 1] === ''')) {//строка
  368.                 value = value.slice(1, value.length - 1);
  369.             }
  370.             stg.upconf('linkAbout', value);
  371.             glo.infA(chat_id, 'Установлена пригласительная ссылка на канал помощи:n' + value + '');
  372.             return true;
  373.         } else if (textLower.indexOf('config.relaxhours') === 0) {
  374.             var arr = text.split('=');
  375.             var value = parseFloat(arr[1].trim());
  376.  
  377.             stg.upconf('relaxHours', value);
  378.             glo.infA(chat_id, 'Установлено время созревания рублей после пополнения: n<code>' + value + '</code> ч.');
  379.             return true;
  380.         } else if (textLower.indexOf('config.firstgift') === 0) {
  381.             var arr = text.split('=');
  382.             var value = parseFloat(arr[1].trim());
  383.  
  384.             stg.upconf('firstGift', value);
  385.             glo.infA(chat_id, 'Подарок новичку: n<code>' + value + '</code> GST');
  386.             return true;
  387.         }
  388.         /*else if (textLower.indexOf('верхний') === 0) {
  389.             text.splitP(parseFloat, (c) => {
  390.                 if (c > config.gstFixedLo) {
  391.                     stg.upconf('gstFixedHi', c);
  392.                     glo.infA(chat_id, 'Установлен фиксированный курс на продажу GST: <code>' + c + '</code> ₽');
  393.                 } else {
  394.                     glo.infA(chat_id, 'верхний не может быть ниже нижнего');
  395.                 }
  396.             })
  397.             return true;
  398.         } else if (textLower.indexOf('нижний') === 0) {
  399.             text.splitP(parseFloat, (c) => {
  400.                 if (c < config.gstFixedHi) {
  401.                     stg.upconf('gstFixedLo', c);
  402.                     glo.infA(chat_id, 'Установлен фиксированный курс на покупку GST: <code>' + c + '</code> ₽');
  403.                 } else {
  404.                     glo.infA(chat_id, 'нижний не может быть выше верхнего');
  405.                 }
  406.             })
  407.             return true;
  408.         }*/
  409.         else if (textLower.indexOf('нв ') === 0) {//нижний+верхний
  410.             var arr = text.split('=');
  411.             var value = parseFloat(arr[1].trim());
  412.  
  413.             stg.upconf('gstFixedLo', value);
  414.             stg.upconf('gstFixedHi', value);
  415.             glo.infA(chat_id, 'Нижний+Верхний: n<code>' + value + '</code>');
  416.             return true;
  417.         } else if (textLower.indexOf('amd ') === 0) {//autoMarDelta
  418.             text.splitP(parseFloat, (c) => {
  419.                 stg.upconf('autoMarDelta', c / 100);
  420.                 glo.infA(chat_id, 'изменение цены <code>' + c + '</code>%');
  421.             })
  422.             return true;
  423.         } else if (textLower.indexOf('sens ') === 0 || textLower.indexOf('config.maxreqgstamo') === 0 || textLower.indexOf('чувствительность ') === 0 || textLower.indexOf('sens=') === 0) {
  424.  
  425.             var arr = [];
  426.             if (text.indexOf('=') > 0) { arr = text.split('='); } else {
  427.                 arr = text.split(' ');
  428.             }
  429.             var value = parseFloat(arr[1].trim());
  430.  
  431.             stg.upconf('maxReqGstAmo', value);
  432.             glo.infA(chat_id, 'Чувствительность: n<code>' + value + '</code> GST');
  433.             return true;
  434.         } else if (textLower.indexOf('config.botnotesecretlength') === 0) {
  435.             var arr = text.split('=');
  436.             var value = parseInt(arr[1].trim());
  437.             stg.upconf('botNoteSecretLength', value);
  438.             glo.infA(chat_id, 'Длина секретного талона установлена: n<code>' + value + '</code> с.nНачинается с символа:' + config.botNoteFirstLetter);
  439.             return true;
  440.         } else if (textLower.indexOf('/margins|') === 0) {
  441.             var arr = text.split('|');
  442.             var value = parseFloat(arr[1].trim());
  443.  
  444.             stg.upconf('rateMargin', value);
  445.             glo.infA(chat_id, 'Наценка на продажу битков: n<code>' + (value * 100) + '</code> %');
  446.             return true;
  447.         } else if (textLower.indexOf('/marginb|') === 0) {
  448.             var arr = text.split('|');
  449.             var value = parseFloat(arr[1].trim());
  450.  
  451.             stg.upconf('rateBMargin', value);
  452.             glo.infA(chat_id, 'Наценка на покупку битков: n<code>' + (value * 100) + '</code> %');
  453.             return true;
  454.         } else if (textLower.indexOf('/setlease|') === 0) {
  455.             var arr = text.split('|');
  456.             var value = parseFloat(arr[1].trim());
  457.  
  458.             stg.upconf('leaseTime', value);
  459.             glo.infA(chat_id, 'Аренда номеров: n<code>' + (config.leaseTime) + '</code> ч.');
  460.             return true;
  461.         } else if ('/radio' === textLower || '/radion' === textLower) {
  462.             config.listenAll = true;
  463.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'Я теперь тебе буду писать что мне пишут пользователи. Выключить /radioff');
  464.             glo.infA(chat_id, ' Слушает трансляцию.');
  465.             return true;
  466.         } else if ('/radioff' === textLower) {
  467.             config.listenAll = false;
  468.             glo.infA(chat_id, ' Выключил трансляцию.');
  469.             return true;
  470.         } else if (textLower.indexOf('minlog') === 0) {
  471.             text.splitP(parseFloat, (i) => {
  472.                 stg.upconf('minLog', i);
  473.                 glo.infA(chat_id, ' config.minLog = <code>' + i + '</code>;');
  474.             })
  475.             return true;
  476.         } else if (textLower.indexOf('/readyqiwi_') === 0) {
  477.             try {
  478.                 config.readyQiwi = parseInt(text.split('_')[1]);
  479.                 glo.infA(chat_id, ' config.readyQiwi = ' + config.readyQiwi + ';');
  480.                 return true;
  481.             } catch (e) {
  482.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Ошибка. Примеры: /readyqiwi_0 /readyqiwi_1', function (err, body) { })
  483.             }
  484.         } else if (text === 'config') {
  485.             glo.tg.sendTelegramMessage(tg_token, chat_id, '<code>' + JSON.stringify(config) + '</code>', function (err, body) { })
  486.         } else if (textLower.indexOf('сбор') === 0) {
  487.             text.splitP(parseFloat, (i) => {
  488.                 stg.upconf('cmsnBetGst', i);
  489.                 glo.infA(chat_id, ' config.cmsnBetGst = <code>' + i + '</code>;');
  490.             })
  491.             return true;
  492.         } else if (textLower.indexOf('iid ') === 0) {
  493.             text.splitP(parseInt, (i) => {
  494.                 stg.upconf('iid', i);
  495.                 glo.infA(chat_id, 'iid = ' + i + ' ');
  496.             })
  497.             return true;
  498.         } else if (textLower.indexOf('rtcd ') === 0) {
  499.             text.splitP(parseInt, (i) => {
  500.                 stg.upconf('taloncd', i * 1000);
  501.                 glo.infA(chat_id, '"Кулдаун" использования случайного талона = ' + i + ' с.nconfig.taloncd = <code>' + i * 1000 + '</code>;//ms');
  502.             })
  503.             return true;
  504.         } else if (textLower.indexOf('rtlt ') === 0) {
  505.             text.splitP(parseInt, (i) => {
  506.                 stg.upconf('talonlt', i);
  507.                 glo.infA(chat_id, 'Минимальное время генерации ' + i + ' с.nconfig.talonlt = <code>' + i + '</code>;');
  508.             })
  509.             return true;
  510.         } else if ('/uniqoff' === textLower) {// /выключение проверки на уникальность
  511.             stg.upconf('uniqOff', true);
  512.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'проверка прокси на уникальность отключена. /uniqon включить.', function (err, body) { })
  513.             return true;
  514.         } else if ('/uniqon' === textLower) {// /включение проверки на уникальность
  515.             stg.upconf('uniqOff', false);
  516.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'проверка прокси на уникальность включена. /uniqoff выключить.', function (err, body) { })
  517.             return true;
  518.         } else if ('/dropallcryptowallets_yes' === textLower) {//выдать всем пользователям новые крипто адреса
  519.             dbc.waco.deleteMany({}, function (result) {
  520.                 glo.infA(chat_id, 'все криптокошельки удалены');
  521.             })
  522.             return true;
  523.             //
  524.         } else if (text.match(/^d{1,3}.d{1,3}.d{1,3}.d{1,3}:d{1,4};.*;.* d{11,12} .*/) && text.match(/^d{1,3}.d{1,3}.d{1,3}.d{1,3}:d{1,4};.*;.* d{11,12} .*/).length > 0) {
  525.             //12.34.56.78:90;login;password;79102343434 parolotQiwi STROKAAPi 4890112233445566
  526.             var lines = text.split('n').reverse();
  527.             if (lines.length > 0) {
  528.                 function popLine(lines) {
  529.                     if (lines.length > 0) {
  530.                         var line = lines.pop();
  531.                         if (line.length >= 60) {
  532.                             var arr = line.split(' ');
  533.                             var proxyInfo = arr[0].split(';');
  534.                             var proxyIpAndPort = proxyInfo[0].split(':');
  535.                             var proxyIp = proxyIpAndPort[0];
  536.                             var proxyPort = proxyIpAndPort[1];
  537.                             var proxyLogin = proxyInfo[1];
  538.                             var proxyPassword = proxyInfo[2];
  539.                             var walletLogin = arr[1];
  540.                             var walletPassword = arr[2];
  541.                             var walletApi = arr[3];
  542.                             var walletCard = undefined;
  543.                             if (arr.length >= 5) {
  544.                                 walletCard = arr[4];
  545.                             }
  546.                             dbc.qw.findOne({ wLogin: walletLogin }, function (err, d) {
  547.                                 if (d === null) {//новый номер.добавляем.
  548.                                     dbc.qw.findOne().sort('-wi').exec(function (err, itemCounter) {
  549.                                         var co = 0;
  550.                                         if (itemCounter) co = itemCounter.wi;
  551.                                         var item = {
  552.                                             wi: co + 1,
  553.                                             wLogin: walletLogin,
  554.                                             wPassword: walletPassword,
  555.                                             wApi: walletApi,
  556.                                             wProxy: {
  557.                                                 type: 'socks5',
  558.                                                 ip: proxyIp,
  559.                                                 port: proxyPort,
  560.                                                 login: proxyLogin,
  561.                                                 password: proxyPassword
  562.                                             },
  563.                                             wCard: walletCard
  564.                                         }
  565.                                         var data1 = new dbc.qw(item);
  566.                                         data1.save(function () {
  567.                                             popLine(lines);
  568.                                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'номер ' + data1.wLogin + ' добавлен /w_' + data1.wi + ' /wa_' + data1.wi, function (err, body) {
  569.                                             })
  570.                                         });
  571.                                     });
  572.                                 } else {
  573.                                     popLine(lines);
  574.                                     d.wApi = walletApi;
  575.                                     d.wPassword = walletPassword;
  576.                                     d.wProxy = {
  577.                                         type: 'https',
  578.                                         ip: proxyIp,
  579.                                         port: proxyPort,
  580.                                         login: proxyLogin,
  581.                                         password: proxyPassword
  582.                                     };
  583.                                     d.wCard = walletCard;
  584.                                     dbc.qw.findOneAndUpdate({ _id: d._id }, { wApi: d.wApi, wPassword: d.wPassword, wProxy: d.wProxy, wCard: w.wCard }, { new: true }, (err, d) => {
  585.                                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'номер изменён /w_' + d.wi, function (err, body) { })
  586.                                     })
  587.                                 }
  588.                             })
  589.                         }
  590.                     }
  591.                 }
  592.                 popLine(lines);
  593.                 return true;
  594.             }
  595.         } else if (textLower.indexOf('/wallet|') === 0 || textLower.indexOf('/wallet |') === 0) {//добавление кошелька в базу
  596.             try {
  597.                 var newWallets = text.split("n").reverse();
  598.                 function popWallets() {
  599.                     if (busy_PopWallet) {
  600.                         setTimeout(popWallets, 1000);
  601.                     } else {
  602.                         busy_PopWallet = true;
  603.                         var newWallet = newWallets.pop();
  604.                         if (newWallet) {
  605.                             try {
  606.                                 var myFields = newWallet.split("|");
  607.                                 var newLogin = myFields[1].trim(),//replace(/ /g, ''),
  608.                                     newApi = myFields[2].trim(),
  609.                                     newProxyType = myFields[3].trim(),
  610.                                     newProxyLogin = myFields[4].trim(),
  611.                                     newProxyPass = myFields[5].trim(),
  612.                                     newProxyIp = myFields[6].trim(),
  613.                                     newProxyPort = parseInt(myFields[7].trim()),
  614.                                     newQiwiCard = undefined;
  615.                                 if (myFields.length == 9) {
  616.                                     newQiwiCard = myFields[8].trim();
  617.                                 }
  618.  
  619.                                 dbc.qw.findOne({ wLogin: newLogin }, function (err, d) {
  620.                                     if (d === null) {//новый номер.добавляем.
  621.                                         dbc.qw.findOne().sort('-wi').exec(function (err, itemCounter) {
  622.                                             var co = 0;
  623.                                             if (itemCounter) co = itemCounter.wi;
  624.                                             var item = {
  625.                                                 wi: co + 1,
  626.                                                 wLogin: newLogin,
  627.                                                 wApi: newApi,
  628.                                                 wProxy: {
  629.                                                     type: newProxyType,
  630.                                                     ip: newProxyIp,
  631.                                                     port: newProxyPort,
  632.                                                     login: newProxyLogin,
  633.                                                     password: newProxyPass
  634.                                                 },
  635.                                                 wCard: newQiwiCard,
  636.                                                 dt_add: Math.floor(new Date())
  637.                                             }
  638.                                             var data1 = new dbc.qw(item);
  639.                                             data1.save(function () {
  640.                                                 busy_PopWallet = false;
  641.                                                 popWallets();
  642.                                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'номер ' + data1.wLogin + ' добавлен /w_' + data1.wi + ' /wa_' + data1.wi, function (err, body) {
  643.                                                 })
  644.                                             });
  645.                                         });
  646.                                     } else {
  647.                                         popWallets();
  648.                                         d.wApi = newApi;
  649.                                         d.wProxy = {
  650.                                             type: newProxyType,
  651.                                             ip: newProxyIp,
  652.                                             port: newProxyPort,
  653.                                             login: newProxyLogin,
  654.                                             password: newProxyPass
  655.                                         };
  656.                                         d.wCard = newQiwiCard;
  657.                                         dbc.qw.findOneAndUpdate({ _id: d._id }, { wApi: d.wApi, wPassword: d.wPassword, wProxy: d.wProxy, wCard: d.wCard }, { new: true }, (err, d) => {
  658.                                             busy_PopWallet = false;
  659.                                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'номер изменён /w_' + d.wi, function (err, body) { })
  660.                                         })
  661.                                     }
  662.                                 })
  663.                             } catch (e) {
  664.                                 glo.e("admin.js ERR POPWALLET", e);
  665.                                 busy_PopWallet = false;
  666.                                 popWallets();
  667.                             }
  668.                         } else {
  669.                             busy_PopWallet = false;
  670.                         }
  671.                     }
  672.                 }
  673.                 popWallets();
  674.             } catch (e) { glo.e("admin ERR 419", e); }
  675.             return true;
  676.         } else if (textLower.indexOf('/out|') === 0) {//вывод на Qiwi
  677.             try {
  678.                 var myFields = text.split("|");
  679.                 var myDest = myFields[1].trim(),
  680.                     myAmo = parseFloat(myFields[2]),
  681.                     myCo = '';
  682.                 try { myCo = myFields[3]; } catch (e) { };
  683.                 myDest = myDest.match(/d/g).join("");
  684.                 glo.wiFinder(user.wi, function (wallet) {
  685.                     var selectedWalletOut = function (w) {
  686.                         var transa = stg.outQiwi(wallet, 0, 0, myAmo, myDest, undefined, myCo, function (id) {
  687.                             if (id) {
  688.                                 glo.informAdmins('✅<code>' + id + '</code> /wa_' + wallet.wi + ' / ' + wallet.wBalance + '// ' + wallet.wTotal, function () { }, tg_token);
  689.                             }
  690.                         });
  691.                     }
  692.                     if (!wallet || wallet.wBalance < myAmo) {
  693.                         dbc.qw.findOne({ wActive: 1, wBalance: { $gte: myAmo } }).sort('wi').exec(function (err, doc) {
  694.                             if (doc) {
  695.                                 dbc.tguch.findOneAndUpdate({ _id: user._id }, { wi: doc.wi }, () => {
  696.                                     selectedWalletOut(doc);
  697.                                 });
  698.                             } else {
  699.                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'нет кошелька с таким балансом. попробуй меньшую сумму. /wallets', function (err, body) { })
  700.                             }
  701.                         })
  702.                     } else { selectedWalletOut(wallet); }
  703.                 })
  704.             } catch (e) { glo.e("admin.js 449 ERROR", e); }
  705.             return true;
  706.         } else if (textLower.indexOf('/outc|') === 0) {//вывод на карту
  707.             try {
  708.                 var myFields = text.split("|");
  709.                 var myDest = myFields[1].trim(),
  710.                     myAmo = parseFloat(myFields[2]),
  711.                     myCo = '';
  712.                 try { myCo = myFields[3]; } catch (e) { };
  713.                 myDest = myDest.match(/d/g).join('');
  714.                 glo.wiFinder(user.wi, function (wallet) {
  715.                     var selectedWalletOut = function (w) {
  716.                         var transa = stg.outQiwi(wallet, 1, 0, myAmo, myDest, undefined, myCo, function (id) {
  717.                             if (id) {
  718.                                 glo.informAdmins('✅<code>' + id + '</code> /wa_' + wallet.wi + ' / ' + wallet.wBalance + '// ' + wallet.wTotal, function () { }, tg_token);
  719.                             }
  720.                         });
  721.                     }
  722.                     if (!wallet || wallet.wBalance < myAmo) {
  723.                         dbc.qw.findOne({ wActive: 1, wBalance: { $gte: myAmo } }).sort('wi').exec(function (err, doc) {
  724.                             if (doc) {
  725.                                 dbc.tguch.findOneAndUpdate({ _id: user._id },
  726.                                     { wi: doc.wi }, () => { selectedWalletOut(doc); })
  727.                             } else {
  728.                                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'нет кошелька с таким балансом. попробуй меньшую сумму. /wallets', function (err, body) { })
  729.                             }
  730.                         })
  731.                     } else { selectedWalletOut(wallet); }
  732.                 })
  733.             } catch (e) { glo.e("admin.js 479 ERROR", e); }
  734.             return true;
  735.         } else if (text === '/w_' || text === '/w' || text === '/ц' || text.indexOf('/w_p_') === 0) {
  736.             dbc.qw.countDocuments({ 'wActive': { '$gte': -1 }, '$or': [{ 'wSeller': null }, { 'wSeller': user.chat_id }] }, function (err, walletsCount) {
  737.                 var paginate = 20;
  738.                 var pageNumber = 1;
  739.                 var messageId = undefined;
  740.                 if (text.indexOf('/w_p_') === 0) {
  741.                     var arr = text.split('_');
  742.                     pageNumber = parseInt(arr[2]);
  743.                     if (pageNumber <= 0) {
  744.                         pageNumber = parseInt(walletsCount / paginate) + 1;
  745.                     }
  746.                     else if (pageNumber > parseInt(walletsCount / paginate) + 1) {
  747.                         pageNumber = 1;
  748.                     }
  749.  
  750.                     if (req.body.callback_query) {
  751.                         messageId = req.body.callback_query.message.message_id;
  752.                     }
  753.                 }
  754.                 var resultString = '';
  755.                 var cursor = dbc.qw.find({ 'wActive': { '$gte': -1 }, '$or': [{ 'wSeller': null }, { 'wSeller': user.chat_id }] }).sort('-wActive').sort('-wBalance').sort('wi').skip((pageNumber - 1) * paginate).limit(paginate).cursor();
  756.                 cursor.on('data', function (doc) {
  757.                     if (doc) {
  758.                         var activeWallet = glo.getActiveStatusString(doc.wActive);
  759.                         var walletIdent = glo.getIdentStatusString(doc.wIdent);
  760.  
  761.                         var delta_days = '';
  762.                         if (doc.dt_add) {
  763.                             delta_days = ' ' + Math.floor((new Date(doc.dt_add + (1000 * 60 * 60 * 24 * 180)) - new Date()) / 1000 / 60 / 60 / 24) + 'д. ';
  764.                         }
  765.                         resultString += "/w_" + doc.wi.toString().padRight(4, '  ') + activeWallet + ':' + doc.wProxy.port + '' + walletIdent + (doc.wCard ? '💳' : '') + parseInt(doc.wBalance).toString().padLeft(4, '  ') + "/" + (doc.wTotal >= 1000 ? parseInt(doc.wTotal / 1000) + 'K' : parseInt(doc.wTotal) + '').padRight(4, '  ') + (doc.wCollectorID ? '.' : '') + delta_days + (doc.wForUser && doc.wForUser > 0 && doc.wShown > now - config.leaseTime * 60 * 60 * config.leaseTime ? ' ' + glo.emo(doc.wForUser) : '') + 'n';
  766.                         if ((doc.wActive === 1 || doc.wActive === 0)
  767.                             && (
  768.                                 (doc.wIdent === 0 && doc.wTotal > config.maxOborot)
  769.                                 ||
  770.                                 (doc.wIdent === 0 && doc.wCurCmsn === 0.01)
  771.                                 ||
  772.                                 (doc.wIdent === 1 && doc.wTotal > config.maxOborotStd)
  773.                                 ||
  774.                                 (doc.wIdent === 2 && doc.wTotal > config.maxOborotPro)
  775.                             )
  776.                             && doc.wShown < now - config.leaseTime * 60 * 60
  777.                             && doc.wBalance < 1) {
  778.                             stg.removeWallet(doc.wi, chat_id, true);
  779.                         } else {
  780.                             dbc.qw.findOneAndUpdate({ _id: doc._id }, { wProxyLong: glo.ipToLong(doc.wProxy.ip) }, () => { });
  781.                         }
  782.                     }
  783.                 });
  784.                 cursor.on('close', function () {
  785.                     var prevText = (pageNumber - 1) === 0 ? 'последняя' : (pageNumber - 1).toString();
  786.                     var nextText = pageNumber > parseInt(walletsCount / paginate) ? 'первая' : (pageNumber + 1).toString();
  787.  
  788.                     markup = JSON.stringify({ inline_keyboard: [[{ text: prevText, callback_data: '/w_p_' + (pageNumber - 1) }, { text: nextText.toString(), callback_data: '/w_p_' + (pageNumber + 1) }]] });
  789.                     glo.tg.sendOrEdit(messageId, tg_token, chat_id, resultString, function (err, body) { }, markup);
  790.                 })
  791.                 //      .exec(function(err, result) {
  792.                 //              // Write some stuff here
  793.                 //      });
  794.             });
  795.             return true;
  796.         } else if (textLower.indexOf('/wallets') === 0 || text === '/w' || text === '/ц' || text === '/ц-') {//список кошельков
  797.             try {
  798.                 var resultString = '';
  799.                 var limit = 1000;
  800.  
  801.                 var cursor = dbc.qw.find({ 'wActive': { '$gte': -1 }, '$or': [{ 'wSeller': null }, { 'wSeller': user.chat_id }] });
  802.                 if (text === '/ц-') {
  803.                     cursor = cursor.limit(60).sort('wActive').sort('wi').cursor();
  804.                 } else {
  805.                     cursor = cursor.limit(limit).sort('-wActive').sort('-wBalance').sort('wi').cursor();
  806.                 }
  807.                 var counterOdd = 0;
  808.                 var prevActive = 3;
  809.                 var maxPadding = 0;
  810.                 cursor.on('data', function (doc) {//перебираем все по очереди :)
  811.                     var additionalInfo = '';
  812.                     var newLine = ' ';
  813.                     var newPrevLine = '';
  814.                     if (doc.wActive < 3) {
  815.                         if (textLower !== '/wallets') {
  816.                             counterOdd += 1;
  817.                             if (counterOdd % 2 === 0) { newLine = 'n'; }
  818.                         } else {
  819.                             newLine = 'n';
  820.                         }
  821.                         additionalInfo = /*"(" + (doc.wForRegion ? doc.wForRegion : "???") + ") " + */  parseInt(doc.wBalance).toString().padLeft(4, '  ') + "/" + (doc.wTotal >= 1000 ? parseInt(doc.wTotal / 1000) + 'K' : parseInt(doc.wTotal) + '').padRight(4, '  ') + (doc.wCollectorID ? '.' : '') + (doc.wForUser && doc.wForUser > 0 && doc.wShown > now - config.leaseTime * 60 * 60 * config.leaseTime ? ' ' + glo.emo(doc.wForUser) /*+ doc.wForUser*/ + '' : ' ');
  822.                     } else {
  823.                         if (textLower !== '/wallets') {
  824.                             counterOdd += 1;
  825.                             if (counterOdd % 2 === 0) { newLine = 'n'; }
  826.                         }
  827.                         else {
  828.                             newLine = 'n';
  829.                         }
  830.                         additionalInfo = ' = ' + doc.wCost;
  831.                     }
  832.                     if (doc.wActive !== prevActive && textLower !== '/wallets') {
  833.                         newPrevLine = 'n';
  834.                         newLine = ' ';
  835.                         counterOdd = 1;
  836.                     }
  837.                     prevActive = doc.wActive;
  838.                     var activeWallet = '🎾';
  839.                     if (doc.wIdent === 1) {
  840.                         activeWallet = '👷🏾';
  841.                     } if (doc.wIdent === 2) {
  842.                         activeWallet = '🕶';
  843.                     }
  844.                     var nextLine = newPrevLine + "/w_" + doc.wi.toString().padRight(4, '  ') + (doc.wActive === 3 ? '⚛️' : (doc.wActive === 2 ? '🚾' : (doc.wActive === 1 ? activeWallet : (doc.wActive == 0 ? "⚪️" : "🅱️")))) + (doc.wCard ? '💳' : '') /*+ (doc.wActive === 0 || doc.wActive === -1 ? " /wrm_" + doc.wi : "")*/ + "  " + (text === '/wallets' ? doc.wLogin : '') + (doc.wCurCmsn === 0.01 ? '%' : '') + ' ' + additionalInfo + newLine;
  845.                     if (resultString.length + nextLine.length > 4096) {
  846.                         glo.informAdmins(resultString, function () { }, tg_token);
  847.                         resultString = '';
  848.                     }
  849.                     resultString += nextLine;
  850.                     if (text !== '/w') {
  851.                         if ((doc.wActive === 1 || doc.wActive === 0)
  852.                             && (
  853.                                 (doc.wIdent === 0 && doc.wTotal > config.maxOborot)
  854.                                 ||
  855.                                 //(doc.wIdent === 0 && doc.wCurCmsn === 0.01)
  856.                                 //||
  857.                                 (doc.wIdent === 1 && doc.wTotal > config.maxOborotStd)
  858.                                 ||
  859.                                 (doc.wIdent === 2 && doc.wTotal > config.maxOborotPro)
  860.                             )
  861.                             && doc.wShown < now - config.leaseTime * 60 * 60
  862.                             && doc.wBalance < 1) {
  863.                             stg.removeWallet(doc.wi, chat_id, true);
  864.                         }
  865.                     }
  866.                 });
  867.                 cursor.on('error', function (err) { glo.e('admin.js err 612', err); })
  868.                 cursor.on('close', function () {// Called when done
  869.                     glo.informAdmins(resultString, function () { }, tg_token);
  870.                     if (stg.inst.BTC < 0.01) {
  871.                         glo.informAdmins('Баланс BTC:' + stg.inst.BTC.toFixed(8) + ' меньше 0.01', function () { }, tg_token);
  872.                     }
  873.                 });
  874.             } catch (e) { glo.e("admin.js ERROR 619", e); }
  875.             return true
  876.         } else if (textLower.indexOf('/w_') === 0) {// /w_12 использование номера
  877.             glo.wiFinder(textLower.substr(3), function (doc) {
  878.                 dbc.tguch.findOneAndUpdate({ _id: user._id }, { wi: doc.wi }, { new: true }, (err, user) => {
  879.                     dbc.qw.findOne({ 'wProxyLong': { '$lt': doc.wProxyLong } }).sort('-wProxyLong').exec(function (err, neighbourPrevWallet) {
  880.                         dbc.qw.findOne({ 'wProxyLong': { '$gt': doc.wProxyLong } }).sort('wProxyLong').exec(function (err, neighbourNextWallet) {
  881.                             var neighbours = '';
  882.                             if (neighbourPrevWallet) {
  883.                                 neighbours += ' prev /w_' + neighbourPrevWallet.wi + ' (' + (doc.wProxyLong - neighbourPrevWallet.wProxyLong) + ')';
  884.                             }
  885.                             if (neighbourNextWallet) {
  886.                                 neighbours += ' next /w_' + neighbourNextWallet.wi + ' (' + (neighbourNextWallet.wProxyLong - doc.wProxyLong) + ')';
  887.                             }
  888.                             var dt_add = '';
  889.                             if (doc.dt_add) {
  890.                                 var delta_days = Math.floor((new Date(doc.dt_add + (1000 * 60 * 60 * 24 * 180)) - new Date()) / 1000 / 60 / 60 / 24);
  891.                                 dt_add = 'Добавлен: ' + glo.getDateTime(new Date(doc.dt_add), true, true) + ' ост:' + delta_days + 'дn';
  892.                             }
  893.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'выбран: /w_' + doc.wi.toString() + ' ' + glo.getActiveStatusString(doc.wActive) + ' ' + glo.getIdentStatusString(doc.wIdent) + doc.wLogin + " " + (doc.wCard ? '💳' : '') + "n Баланс: " + doc.wBalance.toFixed(2) + " /wa_" + doc.wi + ' ' + " Оборот:" + doc.wTotal.toFixed(2) + (doc.wActive >= 1 ? " /wd_" + doc.wi : ' /wrm_' + doc.wi) + 'nПоказан:' + glo.getDateTime(new Date(doc.wShown * 1000)) + ' Вывод:' + glo.getDateTime(new Date(doc.wLastBusy * 1000)) + 'n' + dt_add + '/wr_' + doc.wi + ' "сброс"nСливов:' + doc.wCollected + 'n proxy:<code>' + doc.wProxy.ip + '</code> порт:<code>' + doc.wProxy.port + '</code>n' + neighbours, function (err, body) { })
  894.                         })
  895.                     })
  896.                 })
  897.             }, function () {
  898.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  899.             });
  900.             return true;
  901.         } else if (textLower.indexOf('/wa_') === 0) {// /wa_12 активация номера
  902.             glo.wiFinder(textLower.substr(4), function (doc) {
  903.                 dbc.qw.findOneAndUpdate({ _id: doc._id }, { wActive: 0 }, { new: true }, (err, doc) => {
  904.                     //if (!doc.wCollectorID) doc.wCollectorID = 0;
  905.                     stg.getQiwiBalance(doc, true, function (wallet) {
  906.                         if (wallet.wActive !== 2) {
  907.                             wallet.wActive = 1;
  908.                         } if (!wallet.wTotal) wallet.wTotal = 0;
  909.                         dbc.qw.findOneAndUpdate({ _id: wallet._id }, { wActive: 1 }, { new: true }, (err, wallet) => {
  910.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер ' + wallet.wLogin + ' активен. Баланс: ' + wallet.wBalance + ' /wd_' + wallet.wi, function (err, body) { })
  911.                         })
  912.                     }, function () {
  913.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Не грузится баланс: ' + doc.wBalance + ' /w_' + doc.wi, function (err, body) { })
  914.                         if (config.chat_id_badProxy) {
  915.                             glo.tg.sendTelegramMessage(tg_token, config.chat_id_badProxy, '#' + doc.wProxy.login, function (err, body) { });
  916.                         } else {
  917.                             glo.informAdmins('#' + doc.wProxy.login + 'n1. Создай канал или чат, добавь бота админом и напиши там /getgroupidn2. Запомни цифру с минусом и напиши мне здесь команду:n<code>config.chat_id_badProxy = </code>цифраИзПервогоПункта', function () { }, tg_token);
  918.                         }
  919.                     })
  920.                 });
  921.             }, function (wid) {
  922.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер №' + wid + ' не найден.', function (err, body) { });
  923.             });
  924.             return true;
  925.         } else if (textLower.indexOf('/wup_') === 0) {// /wup_12 получение даты регистрации номера
  926.             glo.wiFinder(textLower.substr(5), function (wallet) {
  927.                 glo.requestAPI({ url: "https://edge.qiwi.com/person-profile/v1/profile/current", method: "GET", headers: { "Accept": "application/json", "Content-Type": "application/json", "Authorization": "Bearer " + wallet.wApi } }, function (err, resp) {
  928.                     try {
  929.                         var jo = JSON.parse(resp);
  930.                         if (resp.indexOf('Internal service error') === -1 && resp.indexOf('registrationDate') > 0) {
  931.                             var regDate = new Date(jo.authInfo.registrationDate);
  932.                             var fl = Math.floor(regDate);
  933.                             dbc.qw.findOneAndUpdate({ _id: wallet._id }, { dt_add: fl }, { new: true }, (err, doc) => { })
  934.                             glo.tg.sendTelegramMessage(tg_token, chat_id, '/w_' + wallet.wi + ' ' + glo.getDateTime(regDate, true, true), function (err, body) { });
  935.                         } else {
  936.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'Ошибка.', function (err, body) { });
  937.                         }
  938.                     } catch (e) {
  939.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Ошибка.', function (err, body) { });
  940.                     };
  941.                 }, wallet.wProxy, undefined, 1);//do not use Tor proxy
  942.             }, function (wid) {
  943.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер №' + wid + ' не найден.', function (err, body) { });
  944.             });
  945.             return true;
  946.         }
  947.         else if (0 === textLower.indexOf('/burn_')) {// /burn_12 разогрев номера
  948.             glo.wiFinder(textLower.substr(6), function (doc) {
  949.                 stg.checkCandidate(doc);
  950.             }, function (wid) {
  951.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер №' + wid + ' не найден.', function (err, body) { });
  952.             });
  953.             return true;
  954.         } else if (0 === textLower.indexOf('/setident_')) {// /setIdent - установка 0 - анонимный 1 - стандартный 2 - профессиональный
  955.             var arr = textLower.split('_');
  956.             var ide = arr[1] === 'ano' ? 0 : (arr[1] === 'std' ? 1 : (arr[1] === 'pro' ? 2 : 0));
  957.             glo.wiFinder(arr.slice(2).join('_'), function (doc) {
  958.                 dbc.qw.findOneAndUpdate({ _id: doc._id }, { wIdent: ide }, { new: true }, (err, doc) => {
  959.                     if (!err) {
  960.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Изменена ИД-ция /w_' + doc.wi + ' : ' + arr[1], function (err, body) { });
  961.                     } else {
  962.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'Ошибка при изменении ИД-ции /w_' + doc.wi + ' : ' + arr[1], function (err, body) { });
  963.                     }
  964.                 })
  965.             }, function (wid) {
  966.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер №' + wid + ' не найден.', function (err, body) { });
  967.             });
  968.             return true;
  969.         } else if (0 === textLower.indexOf('/wdpl_')) {// /wallets disable by proxy login - установка 0 - анонимный 1 - стандартный 2 - профессиональный
  970.             var arr = text.split('_');
  971.             var proxyLogin = arr[1].trim();
  972.             var cursor = dbc.qw.find({ 'wProxy.login': proxyLogin, 'wActive': { '$gt': 0 } }).sort('wi').cursor();
  973.             cursor.on('data', function (doc) {
  974.                 if (doc) {
  975.                     dbc.qw.findOneAndUpdate({ _id: doc._id }, { wActive: 0 }, { new: true }, (err, doc) => {
  976.                         if (!err) {
  977.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'выключен по логину прокси: /w_' + doc.wi, function (err, body) { });
  978.                         } else {
  979.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'не могу выключить номер /w_' + doc.wi, function (err, body) { });
  980.                         }
  981.                     })
  982.                 } else { console.log('nodoc'); }
  983.             })
  984.             return true;
  985.         } else if (0 === textLower.indexOf('/wupl_')) {// /wallets update by proxy login /wupl_ngp3080803_ngp3080818_3MeOsdp82i
  986.             var arr = text.split('_');
  987.             var proxyLogin = arr[1].trim();
  988.             var new_proxyLogin = arr[2].trim();
  989.             var new_proxyPassword = arr[3].trim();
  990.             var cursor = dbc.qw.find({ 'wProxy.login': proxyLogin }).sort('wi').cursor();
  991.             cursor.on('data', function (doc) {
  992.                 if (doc) {
  993.                     doc.wProxy = {
  994.                         type: doc.wProxy.type,
  995.                         ip: doc.wProxy.ip,
  996.                         port: doc.wProxy.port,
  997.                         login: new_proxyLogin,
  998.                         password: new_proxyPassword
  999.                     };
  1000.                     dbc.qw.findOneAndUpdate({ _id: doc._id }, { wProxy: doc.wProxy }, { new: true }, (err, doc) => {
  1001.                         if (!err) {
  1002.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'подменен логин и пароль от прокси: /w_' + doc.wi, function (err, body) { });
  1003.                         } else {
  1004.                             glo.tg.sendTelegramMessage(tg_token, chat_id, 'не могу исправить прокси /w_' + doc.wi, function (err, body) { });
  1005.                         }
  1006.                     })
  1007.                 } else { console.log('nodoc'); }
  1008.             })
  1009.             return true;
  1010.         } else if (0 === textLower.indexOf('/wrm_banned_ok')) {// /remove all banned wallets
  1011.             dbc.qw.deleteMany({ 'wActive': -1 }, function () {
  1012.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Заблокированные кошельки удалены', function (err, body) { });
  1013.             })
  1014.             return true;
  1015.         } else if (0 === textLower.indexOf('/wi_')) {// /wi_12 строка из добавления
  1016.             glo.wiFinder(textLower.substr(4), function (doc) {
  1017.                 //doc.wProxyChanges = 0;
  1018.                 var line = '/wallet|' + doc.wLogin + ' | ' + doc.wApi + ' |' + doc.wProxy.type + ' | ' + doc.wProxy.login + ' | ' + doc.wProxy.password + ' | ' + doc.wProxy.ip + ' | ' + doc.wProxy.port;
  1019.                 if (doc.wCard) line += ' | ' + doc.wCard;
  1020.                 glo.tg.sendTelegramMessage(tg_token, chat_id, line, function (err, body) { })
  1021.             }, function () {
  1022.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  1023.             });
  1024.             return true;
  1025.         } else if (0 === textLower.indexOf('/wip_')) {// узнать айпи от прокси кошелька
  1026.             try {
  1027.                 glo.wiFinder(textLower.split('_')[1], function (doc) {
  1028.                     //glo.requestAPI = function (options, cb, proxy, res, tryes, log, output, fname, showUA)
  1029.                     glo.requestAPI({ url: "https://2ip.ru" }, function (err, resp) {
  1030.                         try {
  1031.                             glo.tg.sendTelegramMessage(tg_token, chat_id, '<code>' + resp + '</code>', function (err, body) { })
  1032.                         } catch (e) { glo.e("ERROR 791", e); };
  1033.                     }, doc.wProxy, undefined, 1, true, undefined, undefined, true);
  1034.                 }, function () {
  1035.                     glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  1036.                 });
  1037.             } catch (e) { glo.e("ERROR 799", e); };
  1038.             return true;
  1039.         } else if (0 === textLower.indexOf('/ban_')) {// /ban_1234567 блокировка пользователя
  1040.             var newBans = text.split("n");
  1041.             var popBans = function () {
  1042.                 var newBan = newBans.pop();
  1043.                 if (newBan) {
  1044.                     try {
  1045.                         var u_chat_id = parseInt(newBan.substr(5).trim());
  1046.                         stg.banUser(tg_token, u_chat_id, popBans);
  1047.                         config.banned.push(u_chat_id);
  1048.                     } catch (e) { glo.e("ERROR 806:", e); }
  1049.                 }
  1050.             }
  1051.             popBans();
  1052.             return true;
  1053.         } else if (0 === textLower.indexOf('/unban_')) {// /ban_1234567 блокировка пользователя
  1054.             var u_chat_id = parseInt(textLower.substr(7));
  1055.             dbc.tguch.findOne({ chat_id: u_chat_id }, function (err, doc) {
  1056.                 if (doc) {
  1057.                     dbc.tguch.findOneAndUpdate({ _id: doc._id }, { banned: 0 }, { new: true }, (err, doc) => {
  1058.                         //if (doc.banned <= 1) {
  1059.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователь ' + u_chat_id + ' разблокирован', function (err, body) { });
  1060.                         //} else {
  1061.                         //    glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователь ' + u_chat_id + ' частично разблокирован но у него еще ' + doc.banned + ' очков бана', function (err, body) { });
  1062.                         //}
  1063.                     })
  1064.                 } else {
  1065.                     glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователя нет в базе', function (err, body) { });
  1066.                 }
  1067.             })
  1068.             return true;
  1069.         } else if (0 === textLower.indexOf('/unbanall')) {// разблокировка всех
  1070.             dbc.tguch.updateMany({ banned: { $gte: 1 } },
  1071.                 { $set: { "banned": 0 } }, function (err, numAffected) {
  1072.                     glo.informAdmins('unbanned: ' + JSON.stringify(numAffected), function () { }, config.tgbotAPI);
  1073.                 })
  1074.             return true;
  1075.         } else if (0 === textLower.indexOf('/banned')) {// экспорт базы заблоченных
  1076.             var cursor_norm = dbc.tguch.find({ 'banned': { '$gte': 1 } }).sort('chat_id').cursor();
  1077.             var resultString = '';
  1078.             var resultCounter = 0;
  1079.             cursor_norm.on('data', function (doc) {
  1080.                 resultCounter++;
  1081.                 resultString += '/ban_' + doc.chat_id + 'n';
  1082.                 if (resultCounter >= 100) {
  1083.                     resultCounter = 0;
  1084.                     glo.tg.sendTelegramMessage(tg_token, chat_id, resultString, function (err, body) { })
  1085.                     resultString = '';
  1086.                 }
  1087.             })
  1088.             cursor_norm.on('close', function () {
  1089.                 glo.tg.sendTelegramMessage(tg_token, chat_id, resultString, function (err, body) { })
  1090.             })
  1091.             return true;
  1092.         } else if (textLower === '/wcoff') {
  1093.             walletCleaner = false;
  1094.             glo.informAdmins('автоподбивка отключена', function () { }, config.tgbotAPI);
  1095.             return true;
  1096.         } else if (0 === textLower.indexOf('/wr_')) {// /wr_12 сброс привязки пользователя
  1097.             glo.wiFinder(textLower.substr(4), function (doc) {
  1098.                 doc.wForUser = 0;
  1099.                 doc.wForUserDT = 0;
  1100.                 doc.wShown = 0;
  1101.                 doc.wLastBusy = 0;
  1102.                 dbc.qw.findOneAndUpdate({ _id: doc._id }, { wForUser: 0, wForUserDT: 0, wShown: 0, wLastBusy: 0 }, { new: true }, (err, doc) => {
  1103.                     glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер ' + doc.wLogin + ' теперь ни к кому не привязан. /w_' + doc.wi, function (err, body) { })
  1104.                 })
  1105.             }, function () {
  1106.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  1107.             });
  1108.             return true;
  1109.         } else if (0 === textLower.indexOf('/wd_')) {// /wd_12 выключение номера
  1110.             glo.wiFinder(textLower.substr(4), function (doc) {
  1111.                 dbc.qw.findOneAndUpdate({ _id: doc._id }, { wActive: 0 }, { new: true }, (err, doc) => {
  1112.                     glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер ' + doc.wLogin + ' неактивен.nАктивация.. /wa_' + doc.wi + ' Удаление.. /wrm_' + doc.wi, function (err, body) { })
  1113.                 })
  1114.             }, function () {
  1115.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  1116.             });
  1117.             return true;
  1118.         } else if (0 === textLower.indexOf('/wrm_ok_')) {// /wremove_12 удаление номера
  1119.             stg.removeWallet(textLower.substr(8), chat_id);
  1120.             return true;
  1121.         } else if (0 === textLower.indexOf('/wrm_')) {// /wremove_12 удаление номера
  1122.             glo.wiFinder(textLower.substr(5), function (doc) {
  1123.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Чтобы окончательно удалить ' + doc.wLogin + ' нажми n/wrm_ok_' + doc.wi, function (err, body) { })
  1124.             }, function () {
  1125.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Номер не найден.', function (err, body) { });
  1126.             });
  1127.             return true;
  1128.         } else if (0 === textLower.indexOf('/wallet')) {
  1129.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'формат команды для горячей замены номера:n<code>/wallet|qiwiNum|qiwiApi|https|proxyLogin|proxyPass|proxyIp|proxyPort|card</code>nилиn<code>/wallet|qiwiNum|qiwiApi|socks5|proxyLogin|proxyPass|proxyIp|proxyPort|card</code>', function (err, body) { })
  1130.             return true;
  1131.         } else if (0 === textLower.indexOf('/setwait|')) {
  1132.             try {
  1133.                 var myFields = text.split("|");
  1134.                 var newWaitR = parseFloat(myFields[1].trim());
  1135.                 var newWaitM = parseFloat(myFields[2].trim());
  1136.                 stg.upconf('waitR', newWaitR);
  1137.                 stg.upconf('waitMinutes', newWaitM);
  1138.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'установлен новый лимит ' + newWaitR + ' р. за ' + newWaitM, () => { })
  1139.             } catch (e) { glo.e("ERROR 1368:", e); }
  1140.             return true;
  1141.         } else if (0 === textLower.indexOf('/setobo|')) {
  1142.             try {
  1143.                 var myFields = text.split("|");
  1144.                 var newmaxOborot = parseFloat(myFields[1].trim());
  1145.                 stg.upconf('maxOborot', newmaxOborot);
  1146.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Установлен максимальный оборот: ' + (config.maxOborot), () => { })
  1147.             } catch (e) { glo.e("admin.js ERROR 1044:", e); }
  1148.             return true;
  1149.         } else if (0 === textLower.indexOf('/setobostd|')) {
  1150.             try {
  1151.                 var myFields = text.split("|");
  1152.                 var newmaxOborotStd = parseFloat(myFields[1].trim());
  1153.                 stg.upconf('maxOborotStd', newmaxOborotStd);
  1154.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Установлен максимальный оборот(std): ' + (config.maxOborot), () => { })
  1155.             } catch (e) { glo.e("admin.js ERROR 1050:", e); }
  1156.             return true;
  1157.         } else if (0 === textLower.indexOf('/setobopro|')) {
  1158.             try {
  1159.                 var myFields = text.split("|");
  1160.                 var newmaxOborotpro = parseFloat(myFields[1].trim());
  1161.                 stg.upconf('maxOborotpro', newmaxOborotpro);
  1162.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Установлен максимальный оборот(pro): ' + (config.maxOborot))
  1163.             } catch (e) { glo.e("admin.js ERROR 1058:", e); }
  1164.             return true;
  1165.         } else if (0 === textLower.indexOf('/setmax|')) {
  1166.             try {
  1167.                 var myFields = text.split("|");
  1168.                 var maxBal = parseFloat(myFields[1].trim());
  1169.                 stg.upconf('maxBal', maxBal);
  1170.                 glo.tg.sendTelegramMessage(tg_token, chat_id, 'Установлен максимальный баланс: ' + config.maxBal)
  1171.             } catch (e) { glo.e("admin.js ERR 1066:", e); }
  1172.             return true;
  1173.         } else if (textLower.indexOf('admin_chat_id ') === 0) {
  1174.             text.splitP(parseFloat, (c) => {
  1175.                 stg.upconf('admin_chat_id', c);
  1176.                 glo.infA(chat_id, 'Админка вынесена на канал: <code>' + c + '</code>');
  1177.             })
  1178.             return true;
  1179.         } else if (textLower === 'admin_chat_id') {
  1180.             stg.upconf('admin_chat_id', undefined);
  1181.             glo.infA(chat_id, 'Админка теперь в боте.');
  1182.             return true;
  1183.         } else if (textLower.indexOf('sms_chat_id ') === 0) {
  1184.             text.splitP(parseFloat, (c) => {
  1185.                 stg.upconf('sms_chat_id', c);
  1186.                 glo.infA(chat_id, 'Нераспознанные команды 🤔 вынесены на канал: <code>' + c + '</code>');
  1187.             })
  1188.             return true;
  1189.         } else if (textLower.indexOf('sms_chat_id') === 0) {
  1190.             stg.upconf('sms_chat_id', undefined);
  1191.             glo.infA(chat_id, 'Нераспознанные команды 🤔 теперь в боте.');
  1192.             return true;
  1193.         } else if (0 === textLower.indexOf('/admin_')) {// выдача нового админа
  1194.             var u_chat_id = parseInt(textLower.split('_')[1]);
  1195.             dbc.tguch.findOneAndUpdate({ chat_id: u_chat_id }, { 'isadmin': 1 }, function (err, doc) {
  1196.                 if (!err) {
  1197.                     if (doc) {
  1198.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователь ' + u_chat_id + ' теперь является админом бота.nЧтобы забрать права: выполни команду /uadmin_' + u_chat_id, function (err, body) { });
  1199.                     } else {
  1200.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователя нет в базе', function (err, body) { });
  1201.                     }
  1202.                 } else { }
  1203.             })
  1204.             return true;
  1205.         } else if (textLower.indexOf('/admin') === 0) {
  1206.             var changed = false;
  1207.             if (textLower === '/adminbtc') {
  1208.                 user.bitType = 'btc';
  1209.                 changed = true;
  1210.             } else if (textLower === '/admingst') {
  1211.                 user.bitType = 'gst';
  1212.                 changed = true;
  1213.             }
  1214.             if (changed) {
  1215.                 dbc.tguch.findOneAndUpdate({ _id: user._id }, { bitType: user.bitType }, { new: true }, (err, user) => {
  1216.                     stg.somethingFromTelegram(req, user, chat_id, from_id, '/admin', cb);
  1217.                     return true;
  1218.                 })
  1219.             } else {
  1220.                 dbc.qw.findOne().sort('-wi').exec(function (err, itemCounter) {
  1221.                     var wi = 0;
  1222.                     if (itemCounter) { wi = itemCounter.wi; }
  1223.                     var margin_text = '';
  1224.                     if (user.bitType === 'btc') {
  1225.                         margin_text = '<code>/marginS|' + marginS.toFixed(2) + '</code> - наценка ' + (marginS * 100).toFixed(0) + '%n' +
  1226.                             '<code>/marginB|' + marginB.toFixed(2) + '</code> - наценка покупки ' + (marginB * 100).toFixed(0) + '%';
  1227.                     } else if (user.bitType === 'gst') {
  1228.                         margin_text = '<code>верхний ' + config.gstFixedHi + '</code> - цена продажиn' +
  1229.                             '<code>нижний ' + config.gstFixedLo + '</code> - цена покупки';
  1230.                     }
  1231.  
  1232.                     stg.talon.countTotal((talonrur) => {
  1233.                         stg.talon.countTotalgst((totgst) => {
  1234.                             stg.talon.countTotalbtc((totbtc) => {
  1235.                                 stg.talon.countTotalcbtc((totcbtc) => {
  1236.                                     var line = glo.util.format(
  1237.                                         'Баланс бота: ' + config.stg_btc + ' BTCn(~ <b>' + (config.stg_btc * stg.xRatemB).toFixed(2) + '</b>)n' + config.stg_gst + ' GSTn(~ <b>' + (config.stg_gst * config.gstFixedLo).toFixed(2) + '</b>)n' +
  1238.                                         'g: <code>' + totgst.toFixed(2) + '</code> (<code>' + (totgst * config.gstFixedLo).toFixed(2) + '</code>)n' +
  1239.                                         'tr: <code>' + talonrur.toFixed(2) + '</code>n' +
  1240.                                         'b: <code>' + totbtc.toFixed(2) + '</code> (<code>' + (totbtc * stg.xRatemB).toFixed(2) + '</code>)n' +
  1241.                                         'cb: <code>' + totcbtc.toFixed(2) + '</code> (<code>' + (totcbtc * stg.xRatemB).toFixed(2) + '</code>)n' +
  1242.                                         '$: <code>' + config.xRate_USDRUB + '</code>₽n' +
  1243.                                         '@vse_komandin' +
  1244.                                         margin_text + 'n' +
  1245.                                         '<code>/setmax|%s</code> - баланс ан.киви %s рn' +
  1246.                                         '<code>/setobo|%s</code> - оборот ан.киви %s рn' +
  1247.                                         '<code>/setlease|%s</code> - аренда %s чn' +
  1248.                                         'ver: #stgv_' + config.version.replaceDots('_') + ' rev: #' + config.revision,
  1249.                                         //config.instGST,
  1250.                                         //user.wi,
  1251.                                         config.maxBal, config.maxBal,
  1252.                                         config.maxOborot, config.maxOborot,
  1253.                                         config.leaseTime, config.leaseTime
  1254.                                     );
  1255.                                     var inline_keyboard = [[
  1256.                                         { text: user.bitType === 'btc' ? '(BTC)' : 'BTC', callback_data: '/adminbtc' },
  1257.                                         { text: user.bitType === 'gst' ? '(GST)' : 'GST', callback_data: '/admingst' }],
  1258.                                     [{ text: '🆕' + 'git pull', callback_data: 'git pull' }, { text: '➰' + 'restart', callback_data: 'restart' }],
  1259.                                     [{ text: '⏹' + 'i2pd', callback_data: 'service i2pd stop' }, { text: '▶️' + 'i2pd', callback_data: 'service i2pd start' }],
  1260.                                     [{ text: '⏹' + 'tor', callback_data: 'service tor stop' }, { text: '▶️' + 'tor', callback_data: 'service tor start' }]];
  1261.                                     if (req.body.callback_query) {
  1262.                                         var editingMessageId = req.body.callback_query.message.message_id;
  1263.                                         glo.tg.editMessageText(tg_token, chat_id, editingMessageId, line
  1264.                                             , function (err, body) {
  1265.                                                 //if (cb) cb();
  1266.                                             }, JSON.stringify({
  1267.                                                 'inline_keyboard': inline_keyboard
  1268.                                             }), false, true);
  1269.                                     } else {
  1270.                                         glo.tg.sendTelegramMessage(tg_token, chat_id, line, function (err, body) {
  1271.                                             //if (err) console.log(JSON.stringify(err));
  1272.                                         }, JSON.stringify({
  1273.                                             'inline_keyboard': inline_keyboard
  1274.                                         }));
  1275.                                     }
  1276.                                 })
  1277.                             })
  1278.                         })
  1279.                     })
  1280.                 });
  1281.             }
  1282.             return true;
  1283.         } else if (0 === textLower.indexOf('/uadmin_')) {// разадминивание
  1284.             var u_chat_id = parseInt(textLower.substr(8));
  1285.             dbc.tguch.findOne({ chat_id: u_chat_id }, function (err, doc) {
  1286.                 if (doc) {
  1287.                     doc.isadmin = undefined;
  1288.                     dbc.tguch.findOneAndUpdate({ _id: doc._id }, { isadmin: 0 }, { new: true }, (err, doc) => {
  1289.                         glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователь ' + u_chat_id + ' теперь не является админом бота', function (err, body) { });
  1290.                     })
  1291.                 } else {
  1292.                     glo.tg.sendTelegramMessage(tg_token, chat_id, 'пользователя нет в базе', function (err, body) { });
  1293.                 }
  1294.             })
  1295.             return true;
  1296.         } else if (textLower === '/dropdups' || textLower === '/dropdups_ok') {//удаление дубликатов пользователей. старый исправленный баг.
  1297.             var chidsuniq = [];
  1298.             var chidsdups = [];
  1299.             var cursor = dbc.tguch.find().sort('chat_id').sort('-btc').sort('-banned').cursor();
  1300.             var i = 0;
  1301.             var r = '';
  1302.             function workWithOneDup() {
  1303.                 var oneDup = chidsdups.pop();
  1304.                 if (oneDup) {
  1305.                     if (textLower === '/dropdups_ok') {
  1306.                         dbc.tguch.findByIdAndRemove(oneDup, function () {
  1307.                             i++;
  1308.                             workWithOneDup();
  1309.                         });
  1310.                     } else {
  1311.                         dbc.tguch.findOne({ _id: oneDup }, function (err, doc) {
  1312.                             var line = doc.chat_id + ' ' + doc.btc + ' ' + doc.banned + 'n';
  1313.                             if (r.length + line.length > 4096) {
  1314.                                 glo.informAdmins(r, function () { }, config.tgbotAPI);
  1315.                                 r = line;
  1316.                             } else {
  1317.                                 r += line;
  1318.                             }
  1319.                             workWithOneDup();
  1320.                         })
  1321.                     }
  1322.                 } else {
  1323.                     glo.informAdmins(i + ' itemsn' + r, function () { }, config.tgbotAPI);
  1324.                 }
  1325.             }
  1326.             cursor.on('data', function (doc) {//перебираем все по очереди
  1327.                 if (chidsuniq.indexOf(doc.chat_id) === -1) {
  1328.                     chidsuniq.push(doc.chat_id);
  1329.                 } else {
  1330.                     chidsdups.push(doc._id);
  1331.                 }
  1332.             });
  1333.             cursor.on('error', function (err) {
  1334.                 console.error(err);
  1335.                 glo.informAdmins('error dropdups', function () { }, config.tgbotAPI);
  1336.             })
  1337.             cursor.on('close', function () {// Called when done
  1338.                 workWithOneDup();
  1339.             });
  1340.             return true;
  1341.         } else if ((0 === textLower.indexOf('/addgst|')) || (0 === textLower.indexOf('/addbtc|'))) {
  1342.             var ticker = undefined;
  1343.             if (textLower.indexOf('/addgst|') === 0) {
  1344.                 ticker = 'gst';
  1345.             } else if (textLower.indexOf('/addbtc|') === 0) {
  1346.                 ticker = 'btc';
  1347.             }
  1348.             var myFields = text.split("|");
  1349.             var user_chat_id = parseInt(myFields[1].trim());
  1350.             var amount = parseFloat(myFields[2].trim());
  1351.  
  1352.             dbc.incUserBalSlow(function (user) {
  1353.                 if (user) {
  1354.                     glo.informAdmins('Баланс пользователя ' + glo.emo(user_chat_id) + ' <a href="tg://user?id=' + user_chat_id + '">' + user_chat_id + '</a>: ' + user[ticker].toFixed(8), function () { }, config.tgbotAPI);
  1355.                 } else {
  1356.                     glo.informAdmins('ОШИБКА ПРИ ИЗМЕНЕНИИ БАЛАНСА ПОЛЬЗОВАТЕЛЯ ' + user_chat_id, function () { }, config.tgbotAPI);
  1357.                 }
  1358.             }, user_chat_id, amount, ticker);
  1359.             return true;
  1360.         } else if (0 === textLower.indexOf('/airdropgst|')) {
  1361.             var myFields = text.split("|");
  1362.             var add_gst = glo.floor8(parseFloat(myFields[1].trim()));
  1363.             var conditions = {}
  1364.                 , update = { $inc: { gst: add_gst } }
  1365.                 , options = { multi: true };
  1366.             dbc.tguch.update(conditions, update, options, callback);
  1367.             function callback(err, numAffected) {
  1368.                 glo.informAdmins('airdropped ' + add_gst + ' GST x ' + JSON.stringify(numAffected), function () { }, config.tgbotAPI);
  1369.             }
  1370.             return true;
  1371.         } else if (0 === textLower.indexOf('/zerogstbyref|')) {//обнулить балансы рефералов тому кто крутит регистрации
  1372.             var myFields = text.split("|");
  1373.             var referer = glo.floor8(parseFloat(myFields[1].trim()));
  1374.             var conditions = { 'referer': referer }
  1375.                 , update = { gst: 0 }
  1376.                 , options = { multi: true };
  1377.             dbc.tguch.update(conditions, update, options, callback);
  1378.             function callback(err, numAffected) {
  1379.                 glo.informAdmins('=0GST x ' + JSON.stringify(numAffected), function () { }, config.tgbotAPI);
  1380.             }
  1381.             return true;
  1382.         } else if (0 === textLower.indexOf('/resetmonth')) {
  1383.             dbc.qw.updateMany({},
  1384.                 { $set: { "wTotal": 0 } }
  1385.                 , () => { });
  1386.             return true;
  1387.         } else if (textLower === 'resetshown') {
  1388.             stg.resetshown();
  1389.             return true;
  1390.         } else if (textLower.indexOf('gap') === 0) {
  1391.             text.splitP(parseFloat, (c) => {
  1392.                 stg.upconf('gap', c);
  1393.                 glo.infA(chat_id, 'gap <code>' + c + '</code>');
  1394.             })
  1395.             return true;
  1396.         }
  1397.     } else {
  1398.         if (textLower.indexOf('/admin') === 0) { // не админ
  1399.             glo.tg.sendTelegramMessage(tg_token, chat_id, 'Вы не админ!', function (err, body) { })
  1400.             return true;
  1401.         }
  1402.     }
  1403.     return false;
  1404. };

Share with your friends:

Print