123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- require('dotenv').config();
- import TelegramBot from 'node-telegram-bot-api';
- import { MemberModel } from './db';
- import connect from './db';
- import botService from './botService';
- import AccountTransferTokens from './commands/transferTokens';
- // const typeTelegramBot = process.argv[2];
- console.log('================ start ================');
- console.log('PRODUCTION', process.env.PRODUCTION);
- // console.log('typeTelegramBot', typeTelegramBot);
- connect();
- /* const telegramBotToken = typeTelegramBot === 'private' ? process.env.TELEGRAM_BOT_TOKEN : process.env.TELEGRAM_GROUP_BOT_TOKEN;
- const token =
- (process.env.PRODUCTION === 'true'
- ? telegramBotToken
- : process.env.TELEGRAM_BOT_TEST_TOKEN) || ''; */
- const token =
- (process.env.PRODUCTION === 'true'
- ? process.env.TELEGRAM_BOT_TOKEN
- : process.env.TELEGRAM_BOT_TEST_TOKEN) || '';
- const groupBotToken = process.env.TELEGRAM_GROUP_BOT_TOKEN;
- const bot = new TelegramBot(token, { polling: true });
- const groupBot = new TelegramBot(groupBotToken, { polling: true });
- bot.on('polling_error', console.log);
- groupBot.on('polling_error', console.log);
- const setFaucetCommand = {
- command: '/faucet',
- description: 'get 101 token',
- };
- bot.setMyCommands([
- {
- command: '/sethandle',
- description: 'set your handle name',
- },
- {
- command: '/lookup',
- description: 'return the score of the user',
- },
- { ...setFaucetCommand },
- ]);
- groupBot.setMyCommands([{ ...setFaucetCommand }]);
- const isPrivate = (message: TelegramBot.Message) =>
- message.chat.type === 'private';
- const deleteMessage = (_bot, message: TelegramBot.Message) =>
- setTimeout(
- () => _bot.deleteMessage(message.chat.id, message.message_id.toString()),
- 1000 * 60 * 5
- );
- function init(_bot) {
- botService(_bot, {
- send: async (message: TelegramBot.Message, text: string) => {
- const result = await _bot.sendMessage(message.chat.id, text, {
- parse_mode: 'Markdown',
- });
- if (!isPrivate(message)) {
- deleteMessage(_bot, result);
- }
- return result;
- },
- commandPrefix: '/',
- client: _bot,
- getId: (message: TelegramBot.Message) => message.from?.id,
- getName: (message: TelegramBot.Message) => message.from?.first_name,
- getChatId: (message: TelegramBot.Message) => message.chat.id,
- getText: (message: TelegramBot.Message) => message.text,
- getDate: (message: TelegramBot.Message) => message.date,
- isPrivate,
- deleteMessage,
- dbId: 'tgId',
- log: (...args: any) => console.log('Telegram: ', ...args),
- });
- }
- init(bot);
- init(groupBot);
- // send notification only once a day
- setInterval(async () => {
- const transferTokens = new AccountTransferTokens();
- const balance = await transferTokens.getBalance();
- // console.log('balance', balance);
- if (balance.toBigInt() < 1000) {
- const dateLastNotify = new Date().getTime() - 1000 * 60 * 60 * 24;
- console.log('dateLastNotify', dateLastNotify);
- const notifyMembers = await MemberModel.find({
- enableNotify: { $lt: dateLastNotify },
- });
- console.log('notifyMembers', notifyMembers);
- notifyMembers.forEach(async (m) => {
- await bot.sendMessage(
- m.tgId.toString(),
- `Bot balance alert! Current balance - ${balance}`
- );
- await MemberModel.updateOne(
- { tgId: m.tgId },
- { $set: { lastCommand: '', enableNotify: new Date().getTime() } }
- );
- });
- }
- }, 1000 * 60);
|