123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- import { MemberModel, IMember, FaucetModel, IFaucet } from './db';
- import axios from 'axios';
- import puppeteer from 'puppeteer';
- import TelegramBot from 'node-telegram-bot-api';
- import { BotServiceProps } from './types';
- import AccountTransferTokens from './commands/transferTokens';
- import startCommand from './commands/start';
- import inductedCommand from './commands/inducted';
- import faucetCommand from './commands/faucet';
- import getFmInfo from './getFmInfo';
- const prod = process.env.PRODUCTION === 'true';
- async function lookupCommand(
- member: IMember | null,
- message: any,
- props: BotServiceProps
- ) {
- const regexp = new RegExp(`^${props.commandPrefix}lookup(.*)`);
- const regexpMatch = new RegExp(`${props.commandPrefix}lookup (.*)`);
- if (regexp.test(props.getText(message))) {
- const match = props.getText(message).match(regexpMatch);
- // console.log('message', message);
- const handle = match ? match[1] : member?.handle;
- if (handle) {
- const fmInfo = await getFmInfo();
- const memberData = fmInfo.data.scores.totalScores.find(
- (m: any) => m.memberHandle === handle
- );
- if (memberData) {
- const memberDataStr =
- `From data processed berofe: ${new Date(
- fmInfo.data.scores.cutoff
- ).toLocaleDateString()}\n\n` +
- `Direct Score = *${memberData.totalDirectScore}*\n` +
- `Referral Score = *${memberData.totalReferralScore}*\n` +
- `Total Score = *${memberData.totalScore}*\n\n` +
- memberData.directScores
- .map((m: any, index: number) => `Period ${index} = *${m || 0}*`)
- .join('\n');
- await props.send(message, memberDataStr);
- } else {
- await props.send(
- message,
- `Don't find member ${handle}. Please note that the handle is case sensitive.`
- );
- }
- } else {
- await props.send(message, 'Please, set your handle.');
- }
- }
- }
- async function setHandleCommand(
- member: IMember | null,
- message: any,
- props: BotServiceProps
- ) {
- const regexp = new RegExp(`^${props.commandPrefix}sethandle`);
- if (regexp.test(props.getText(message))) {
- props.log('sethandle');
- if (member === null) {
- const newMember = {
- [props.dbId]: props.getId(message),
- date: props.getDate(message),
- lastCommand: 'sethandle',
- };
- await MemberModel.create(newMember);
- } else {
- await MemberModel.updateOne(
- { [props.dbId]: props.getId(message) },
- { $set: { lastCommand: 'sethandle' } }
- );
- }
- await props.send(
- message,
- 'Write your handle. Please note that the handle is case sensitive.'
- );
- } else if (member && member.lastCommand === 'sethandle') {
- const updMember = await MemberModel.findOne({
- handle: props.getText(message),
- });
- if (updMember) {
- await MemberModel.remove({
- [props.dbId]: props.getId(message),
- handle: undefined,
- });
- await updMember.updateOne({
- $set: {
- lastCommand: undefined,
- [props.dbId]: props.getId(message),
- handle: props.getText(message),
- },
- });
- } else {
- await MemberModel.updateOne(
- { [props.dbId]: props.getId(message) },
- { $set: { lastCommand: undefined, handle: props.getText(message) } }
- );
- }
- await props.send(message, 'Good! Now you can get statistics =)');
- }
- }
- async function checkFaucetBalanceCommand(message: any, props: BotServiceProps) {
- const regexp = new RegExp(`^${props.commandPrefix}balancefaucet`);
- if (regexp.test(props.getText(message))) {
- const transferTokens = new AccountTransferTokens();
- const balance = await transferTokens.getBalance();
- // console.log('balance', balance);
- await props.send(message, `Balance = ${balance}`);
- }
- }
- // enable notification about expiring balance
- async function enableFaucetBalanceNotifyTgCommand(
- member: IMember | null,
- message: TelegramBot.Message,
- props: BotServiceProps
- ) {
- changeFaucetBalanceNotifyTg(member, message, props, 'enablefaucetnotify', true);
- }
- async function disableFaucetBalanceNotifyTgCommand(
- member: IMember | null,
- message: TelegramBot.Message,
- props: BotServiceProps
- ) {
- changeFaucetBalanceNotifyTg(member, message, props, 'disablefaucetnotify', false);
- }
- async function changeFaucetBalanceNotifyTg(
- member: IMember | null,
- message: TelegramBot.Message,
- props: BotServiceProps,
- command = '',
- enableNotify = true,
- ) {
- const regexp = new RegExp(`^${props.commandPrefix}${command}`);
- if (regexp.test(props.getText(message))) {
- if (member) {
- await MemberModel.updateOne(
- { [props.dbId]: props.getId(message) },
- { $set: { lastCommand: '', enableNotify: enableNotify ? (new Date().getTime() - 1000 * 60 * 60 * 24) : undefined } }
- );
- // console.log('message', message);
-
- await props.send(message, `Notifies ${enableNotify ? 'enabled' : 'disabled'}`);
- } else {
- await props.send(message, 'Set your handle througs /sethandle');
- }
- }
- }
- export default async function BotService(_bot, props: BotServiceProps) {
- props.client.on('message', async (message: any) => {
- const id = props.getId(message);
- let member = null;
- try {
- if (props.commandPrefix === '/' && !props?.isPrivate(message)) {
- props.deleteMessage(_bot, message);
- }
- } catch (ex) {
- console.log('ex', ex);
- }
- try {
- member = await MemberModel.findOne({ [props.dbId]: id });
- console.log('member =>', member);
- } catch (e) {
- console.log(e);
- await props.send(message, 'Error =( please try later');
- }
- console.log('message', message);
- try {
- startCommand(message, props);
- lookupCommand(member, message, props);
- await faucetCommand(member, message, props);
- if (props.commandPrefix === '/') {
- setHandleCommand(member, message, props);
- checkFaucetBalanceCommand(message, props);
- enableFaucetBalanceNotifyTgCommand(member, message, props);
- disableFaucetBalanceNotifyTgCommand(member, message, props);
- }
- } catch (ex) {
- console.log('ex', ex);
-
- await props.send(message, ex.message);
- }
- });
- }
|