commit d64ec5f18202a17a52c8b6a20924964ea7a8ede7 Author: anatolykopyl Date: Wed May 25 01:04:00 2022 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..edb5d87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +.DS_Store +.env + diff --git a/index.js b/index.js new file mode 100644 index 0000000..730db56 --- /dev/null +++ b/index.js @@ -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); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b7716e1 --- /dev/null +++ b/package-lock.json @@ -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" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ef33304 --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/phonetics.js b/phonetics.js new file mode 100644 index 0000000..149bf57 --- /dev/null +++ b/phonetics.js @@ -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() +}