mirror of
https://github.com/anatolykopyl/mining-status-skill.git
synced 2026-03-26 12:55:43 +00:00
Initial commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
node_modules/
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
|
||||||
174
index.js
Normal file
174
index.js
Normal 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);
|
||||||
|
};
|
||||||
168
package-lock.json
generated
Normal file
168
package-lock.json
generated
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
{
|
||||||
|
"name": "mining-status-skill",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "mining-status-skill",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.27.2",
|
||||||
|
"dedent-js": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
|
},
|
||||||
|
"node_modules/axios": {
|
||||||
|
"version": "0.27.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
|
||||||
|
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"follow-redirects": "^1.14.9",
|
||||||
|
"form-data": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"dependencies": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/dedent-js": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU="
|
||||||
|
},
|
||||||
|
"node_modules/delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/follow-redirects": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"debug": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.27.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
|
||||||
|
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.14.9",
|
||||||
|
"form-data": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"requires": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dedent-js": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU="
|
||||||
|
},
|
||||||
|
"delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
|
||||||
|
},
|
||||||
|
"form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||||
|
},
|
||||||
|
"mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"requires": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
package.json
Normal file
16
package.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "mining-status-skill",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.27.2",
|
||||||
|
"dedent-js": "^1.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
31
phonetics.js
Normal file
31
phonetics.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
const phoneticTable = {
|
||||||
|
'анна': 'a',
|
||||||
|
'антон': 'a',
|
||||||
|
'алексей': 'a',
|
||||||
|
'борис': 'b',
|
||||||
|
'семен': 'c',
|
||||||
|
'цапля': 'c',
|
||||||
|
'дмитрий': 'd',
|
||||||
|
'елена': 'e',
|
||||||
|
'федор': 'f',
|
||||||
|
'фёдор': 'f',
|
||||||
|
'харитон': 'x',
|
||||||
|
}
|
||||||
|
|
||||||
|
// 0xfB2A2c470d75f6Fc1cb85A592840D960C000e94c
|
||||||
|
|
||||||
|
module.exports = (tokens) => {
|
||||||
|
return tokens.map((token) => {
|
||||||
|
if (!isNaN(token)) {
|
||||||
|
return parseInt(token);
|
||||||
|
} else {
|
||||||
|
const lowerToken = token.toLowerCase();
|
||||||
|
|
||||||
|
if (phoneticTable.hasOwnProperty(lowerToken)) {
|
||||||
|
return phoneticTable[lowerToken];
|
||||||
|
} else {
|
||||||
|
return ' не расслышала ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).join()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user