mirror of
https://github.com/anatolykopyl/mining-status-skill.git
synced 2026-03-26 12:55:43 +00:00
178 lines
4.2 KiB
JavaScript
178 lines
4.2 KiB
JavaScript
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;
|
||
|
||
const handlers = {
|
||
'помощь': handleHelp,
|
||
'что ты умеешь': handleHelp,
|
||
'сбросить адрес': handleResetWallet,
|
||
}
|
||
|
||
if (handlers.hasOwnProperty(request.command)) {
|
||
return handlers[request.command](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);
|
||
};
|