Files
mining-status-skill/index.js
2022-05-25 01:12:21 +03:00

178 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
};