Initial commit: Tapalka monorepo (bot, front, strapi)
This commit is contained in:
122
CMyTapper/robucks-bot/src/index.ts
Normal file
122
CMyTapper/robucks-bot/src/index.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import express, { Response } from 'express';
|
||||
import cors from 'cors';
|
||||
import dotenv from 'dotenv';
|
||||
import path from 'path';
|
||||
import Bot from './bot';
|
||||
import { HttpInstanceFactory } from './utils/HttpsInstanceFactory';
|
||||
import { TypedRequestBody } from './types/express.type';
|
||||
import { getDifferenceInDays } from './utils/GetDifferenceInDays';
|
||||
|
||||
dotenv.config({ path: path.resolve(__dirname, '../.env') });
|
||||
|
||||
export type NotifyParams = {
|
||||
telegram_id: string[] | number[];
|
||||
exchange_id: string | number;
|
||||
};
|
||||
|
||||
export let bot: Bot;
|
||||
const app = express();
|
||||
|
||||
const PORT = process.env.PORT as string;
|
||||
const restartTimeout = 10;
|
||||
|
||||
app.use(express.json());
|
||||
app.use(cors());
|
||||
|
||||
app.post('/notify', async (req: TypedRequestBody<NotifyParams>, res: Response) => {
|
||||
bot.notifyByNewExchange(req.body);
|
||||
|
||||
return res.status(200).send({});
|
||||
});
|
||||
|
||||
app.get('/link-bot', async (req, res) => {
|
||||
const linkBot = bot.getBotLink();
|
||||
|
||||
return res.status(200).send({ link: linkBot });
|
||||
});
|
||||
|
||||
app.get('/config-bot-data', async (req, res) => {
|
||||
HttpInstanceFactory.getAuthorizedInstance()
|
||||
.get('/config')
|
||||
.then(async response => {
|
||||
const { token, dateLifetimeJwt } = response.data.data.attributes;
|
||||
|
||||
if (!token || getDifferenceInDays(new Date(), dateLifetimeJwt) >= 30) {
|
||||
const baseInstance = HttpInstanceFactory.getBaseInstance();
|
||||
const dateLifeTime = new Date();
|
||||
|
||||
const user = await baseInstance.post(`auth/local`, {
|
||||
identifier: process.env.STRAPI_USER ?? '',
|
||||
password: process.env.STRAPI_PASSWORD ?? '',
|
||||
});
|
||||
|
||||
await HttpInstanceFactory.getAuthorizedInstance().put(`config`, {
|
||||
data: {
|
||||
token: user.data.jwt,
|
||||
dateLifetimeJwt: dateLifeTime,
|
||||
},
|
||||
});
|
||||
|
||||
return res.status(200).send({
|
||||
token: user.data.jwt,
|
||||
dateLifetimeJwt: dateLifeTime,
|
||||
});
|
||||
} else {
|
||||
return res.status(200).send({
|
||||
token: token,
|
||||
dateLifetimeJwt: dateLifetimeJwt,
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/restart-bot', async (req, res) => {
|
||||
if (bot) {
|
||||
try {
|
||||
await bot.stop();
|
||||
console.log('Bot stopped successfully.');
|
||||
} catch (error) {
|
||||
console.log('Error stopping the bot:', error);
|
||||
}
|
||||
}
|
||||
|
||||
launchBot();
|
||||
|
||||
return res.status(200).send({ message: 'Bot is restarting...' });
|
||||
});
|
||||
|
||||
const launchBot = async () => {
|
||||
console.log(`Starting on port ${PORT}...`);
|
||||
|
||||
HttpInstanceFactory.updateAuthorizedInstance()
|
||||
.then(() => {
|
||||
HttpInstanceFactory.getAuthorizedInstance()
|
||||
.get('bot-config')
|
||||
.then(res => {
|
||||
bot = new Bot(res.data.data.attributes.token);
|
||||
bot.launch().catch(() => {
|
||||
console.log(`ERROR: launching bot. Restarting in ${restartTimeout} sec.`);
|
||||
setTimeout(() => {
|
||||
launchBot();
|
||||
}, restartTimeout * 1000);
|
||||
});
|
||||
bot.start();
|
||||
})
|
||||
.catch(() => {
|
||||
console.log(`ERROR: getting bot config. Restarting in ${restartTimeout} sec.`);
|
||||
setTimeout(() => {
|
||||
launchBot();
|
||||
}, restartTimeout * 1000);
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
console.log(`ERROR: authorization. Restarting in ${restartTimeout} sec.`);
|
||||
setTimeout(() => {
|
||||
launchBot();
|
||||
}, restartTimeout * 1000);
|
||||
});
|
||||
};
|
||||
|
||||
app.listen(PORT, () => {
|
||||
launchBot();
|
||||
});
|
||||
Reference in New Issue
Block a user