Initial commit

This commit is contained in:
2022-05-25 01:04:00 +03:00
commit d64ec5f182
5 changed files with 393 additions and 0 deletions

174
index.js Normal file
View File

@@ -0,0 +1,174 @@
const axios = require('axios');
const dedent = require('dedent-js');
const getMiner = async (wallet) => {
const response = await axios.post(
'https://baikalmine.com/api/pool/miner/getMiner',
{
type: "pps_plus",
coin: "eth",
miner: wallet
}
).catch(error => ({error}));
if (response.error) {
const text = dedent(`
Ошибка получения данных, проверьте правильность введенного кошелька.
"${wallet}"
`);
const tts = dedent(`
Ошибка получения данных, проверьте правильность введенного кошелька.
"${wallet}"
`);
return { text, tts };
}
const miner = response.data;
const text = dedent(`
Работает ${miner.workers.online} из ${miner.workers.total},
хешрейт ${fromatHashrate(miner.hashrate.reported)} MH/s.
До выплаты осталось ${daysUntilPayout(miner)} дней.
`);
const tts = dedent(`
Работает ${miner.workers.online} из ${miner.workers.total},
хешр+ейт ${fromatHashrate(miner.hashrate.reported)} мегах+ешей в секунду.
До выплаты осталось ${daysUntilPayout(miner)} дней.
`);
return {text, tts};
};
const fromatHashrate = (hs) => {
return Math.floor(hs / 1000000);
};
const daysUntilPayout = (miner) => {
const { stats, settings } = miner;
return Math.ceil((settings.paymentThreshold - stats.balance) / stats.dayliProfit);
}
const handleFirstLaunch = async (event) => {
const {version, session} = event;
const text = 'Введите адрес своего кошелька'
return {
version,
session,
response: {
text,
end_session: false,
},
session_state: {
awaiting_wallet_input: true,
},
}
};
const handleWalletInput = async (event) => {
const {version, session, request} = event;
const wallet = request.command.replace(/ /g,'');
let {text, tts} = await getMiner(wallet);
text = 'Адрес сохранен. \n'.concat(text);
tts = 'Адрес сохранен. \n'.concat(tts);
return {
version,
session,
response: {
text,
tts,
end_session: false,
},
session_state: {
awaiting_wallet_input: false,
},
user_state_update: {
wallet,
}
}
}
const handleResetWallet = async (event) => {
const {version, session} = event;
const text = 'Адрес кошелька сброшен, введите новый';
return {
version,
session,
response: {
text,
end_session: false,
},
session_state: {
awaiting_wallet_input: true,
},
user_state_update: {
wallet: null,
}
}
}
const handleGetStatus = async (event) => {
const {version, session, state} = event;
const {text, tts} = await getMiner(state.user.wallet);
return {
version,
session,
response: {
text,
tts,
end_session: true,
},
};
}
const handleHelp = async (event) => {
const {version, session} = event;
const text = dedent(`
Я умею узнавать статус вашей майнинг фермы на пуле baikalmine.com.
Если ошиблись с вводом адреса, скажите "сбросить адрес".
`);
return {
version,
session,
response: {
text,
end_session: false,
},
};
}
module.exports.handler = async (event) => {
const {session, request, state} = event;
if (request.command === 'сбросить адрес') {
return handleResetWallet(event);
}
const helpCommands = ['помощь', 'что ты умеешь'];
if (helpCommands.includes(request.command)) {
return handleHelp(event);
}
if (state.session.awaiting_wallet_input) {
return handleWalletInput(event);
}
if (!state.user.wallet) {
if (session.new) {
return handleFirstLaunch(event);
}
return handleWalletInput(event);
}
return handleGetStatus(event);
};