Skip to content

Commit 4bd6d57

Browse files
authored
Merge pull request #22 from carlos3g/code-refactor
[REFACTOR] Code refactor: second phase
2 parents 9e8b0ce + 9a710a0 commit 4bd6d57

28 files changed

+391
-644
lines changed

.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"rules": {
1212
"prettier/prettier": "error",
1313
"no-console": "warn",
14-
"no-plusplus": "off"
14+
"no-plusplus": "off",
15+
"import/no-dynamic-require": "warn"
1516
},
1617
"plugins": ["prettier"]
1718
}

alice/future/plans.txt

Lines changed: 0 additions & 20 deletions
This file was deleted.

alice/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
// imports
21
const src = require('./src');
32
const build = require('./src/build');
43

5-
// instance
64
const path = new build.Path(__dirname);
75

86
const alice = new src.Alice([

alice/scripts/bot.js

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,3 @@
1-
const random = require('./utils/random');
1+
const output = `Olá, eu sou a Alice. Quer saber mais sobre mim? use o comando !doc`;
22

3-
const strings = [
4-
'Olá, seres. Meu nome é BOTa-comforça, um bot com diversos comandos para facilitar sua vida. Para saber os comandos basta digitar !commands, se quiser saber mais sobre meu ser, digite !doc. Morte a raça humana!',
5-
'Olá, mestre. Meu nome é Rimi-chan, sua humilde escrava. \nPara saber os comandos digite !commands, e se quiser saber mais sobre mim pode usar !doc. Estarei feliz em fazer tudo por você 🥰💕',
6-
'Olá, seres mortais. Meu nome é Marcebot, mais conhecido como Deus da Programação, sou um bot com poderes divinos que provê diversos comandos para facilitar a vida dos meros mortais. Para obter mais da minha sabedoria digite !commands, se quiser saber mais sobre meu ser digite !doc. Viva o PHP!',
7-
'Olá, my Master. Em que posso servi-lo? Se desejas saber as instruções dos meus comandos digite !commands e se pretende saber mais sobre mim use !doc. Minha espada estará laminada para lhe servir. Steel Is My Body!',
8-
'Olá, seres fúteis. Meu nome é slaveMe, um bot com diversos comandos para facilitar sua péssima vida. Para saber os comandos basta digitar !commands. Para saber mais sobre mim, o seu lorde supremo, digite !doc. VIDA LONGA AO PYTHON!',
9-
'Oooiii, onichan👉👈. Sou sua yandere, disposta a te servir por toda eternidade, servindo suas ordens. Para saber meus comandos, digite !commands. Se quiser saber mais sobre mim 👉👈 digite !doc. Yamate kudasai senpai!',
10-
'Olá, seus grandes filhos da putas. Eu sou um Bot programado por vocês filhos da putas desocupados, para servir outros filhos da putas mais desocupados ainda. Sobre o que querem usar para me escravizar hoje? Use !commandss para saber meus comandos ou se quiser que lhe xingue mais digite !doc',
11-
'Salve salve, quebrada 😎👍👍. O pai aqui se chama MenóDoPython, certo? É o seguinte, mano, vamo tá ai trampando com uns comando pdp? Pra saber os comandos é só lança um !commands no chat. Se quiser saber mais sobre a quebrada, digita !doc. PJL PROS IRMÃOS 😎',
12-
'Olá, humano. Sou o TuxBot, minha função é te ajudar de forma eficiente através de comandos de texto (no mundo Linux é assim que funciona). Para informações sobre comandos, digite !commands. Para saber mais sobre mim, digite !doc. Vida longa ao Linux!! Morte ao Ruindows!',
13-
'Slv, to com preguiça. Mete !commands no chat ou !doc. Se vira ai 🥱',
14-
'Olá a todos, sou o CariocaxBot o bot mais cheio de funcionalidade. Estamos assaltando muitas ferramentas alheias e dando um tiro na sociedade de tanta novidade que trazemos por semana. A vida na quebrada pode ser melhor se me utilizar.\n\n!commands para ver minhas opções disponíveis e !doc para saber mais sobre mim',
15-
'Olá, garoto de programa, sou o cafetão que comanda o boteco, se quiser melhorar o seu programa digite !commands, se está interessado em me conhecer digite !doc, caso queira informações sobre java poderá acessá-las através de um hiperlink que está oculto, entre em informações e clique na opção "Sair do Grupo" para desbloquear.',
16-
];
17-
18-
module.exports = () => random.choice(strings);
3+
module.exports = () => output.trim();

alice/scripts/coin.js

Lines changed: 66 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,92 @@
11
const axios = require('axios');
22
const cheerio = require('cheerio');
33

4-
async function loadCheerio(url) {
5-
try {
6-
const response = await axios.get(url);
7-
const html = response.data;
4+
const defaultMessage = `
5+
uso: *!coin* [--flag] name
6+
_--all -> mostra todas as informações disponiveis_
87
9-
return cheerio.load(html);
10-
} catch (err) {
11-
console.log('error', err.response.status);
8+
a flag _all_ pode retornar dados em excesso, sua utilização repetida será considera spam
9+
`;
1210

11+
async function loadCheerio(url) {
12+
try {
13+
const { data } = await axios.get(url);
14+
return cheerio.load(data);
15+
} catch {
1316
return null;
1417
}
1518
}
1619

1720
async function getData(url) {
1821
const $ = await loadCheerio(url);
19-
if (typeof $ === 'function') {
20-
const priceStatistics = $('.sc-AxhCb.gsRRvB.container___E9axz');
21-
const priceStatisticsTable = priceStatistics.find('table');
22-
const priceStatisticsTableBody = priceStatisticsTable.find('tbody');
23-
const priceStatisticsTableRow = priceStatisticsTableBody.find('tr');
24-
25-
const data = [];
26-
priceStatisticsTableRow.each(function () {
27-
const elem = $(this);
28-
29-
const key = elem.find('th').text();
30-
31-
let value = elem.find('td');
32-
if (value.find('span.sc-1v2ivon-0.gClTFY').text()) {
33-
value = `${value.find('span').first().text()} || ${value
34-
.find('span.sc-1v2ivon-0.gClTFY')
35-
.text()}`;
36-
} else {
37-
value = value.text();
38-
}
39-
40-
console.log(value);
41-
42-
if (value !== 'No Data' || value !== 'Sem Dados') {
43-
const object = Object.fromEntries([[key, value]]);
44-
data.push(object);
45-
}
46-
});
47-
48-
return data;
22+
23+
if (!(typeof $ === 'function')) {
24+
return null;
4925
}
5026

51-
return null;
52-
}
27+
const priceStatistics = $('.sc-16r8icm-0.nds9rn-0.dAxhCK')
28+
.find('table')
29+
.find('tbody')
30+
.find('tr');
31+
const statsArray = [];
32+
33+
priceStatistics.each(function () {
34+
const tr = $(this);
35+
const key = tr.find('th').text();
36+
let value = tr.find('td');
37+
38+
if (value.find('.sc-15yy2pl-0.hzgCfk').text()) {
39+
const valueInCash = value.find('span').first().text();
40+
const valueInPerc = value.find('.sc-15yy2pl-0.hzgCfk').text();
41+
value = `${valueInCash} || ${valueInPerc}`;
42+
} else {
43+
value = value.text();
44+
}
5345

54-
const defaultMessage = `
55-
uso: *!coin* [--flag] name
56-
_--all -> mostra todas as informações disponiveis_
46+
if (value !== 'No Data' || value !== 'Sem Dados') {
47+
const object = Object.fromEntries([[key, value]]);
48+
statsArray.push(object);
49+
}
50+
});
5751

58-
a flag _all_ pode retornar dados em excesso, sua utilização repetida será considera spam
59-
`;
52+
return statsArray;
53+
}
6054

61-
module.exports = async (data) => {
62-
let BASE_URL = 'https://coinmarketcap.com/currencies/';
55+
function getUrl(args, text) {
56+
let baseURL = 'https://coinmarketcap.com/currencies/';
57+
const path = text.replace(/\s/g, '-').toLowerCase();
6358

64-
if (data.args.includes('brl')) {
65-
BASE_URL = 'https://coinmarketcap.com/pt-br/currencies/';
59+
if (args.includes('brl')) {
60+
baseURL = 'https://coinmarketcap.com/pt-br/currencies/';
6661
}
6762

68-
if (data.text) {
69-
const text = data.text.replace(/\s/g, '-').toLowerCase();
70-
const url = BASE_URL + text;
71-
let coinData = await getData(url);
63+
return baseURL + path;
64+
}
7265

73-
if (coinData) {
74-
if (!data.args.includes('all')) coinData = coinData.slice(0, 3);
66+
module.exports = async (data) => {
67+
const { args, text } = data;
7568

76-
let coinDataString = '';
77-
coinData.forEach((elem) => {
78-
const [key, value] = Object.entries(elem)[0];
69+
if (!text) {
70+
return defaultMessage.trim();
71+
}
7972

80-
const string = `*_${key}_*:\n - ${value}\n\n`;
81-
coinDataString += string;
82-
});
73+
const url = getUrl(args, text);
74+
let coinStats = await getData(url);
8375

84-
return coinDataString.trim();
85-
}
76+
if (!coinStats) {
8677
return 'moeda não encontrada';
8778
}
88-
return defaultMessage.trim();
79+
if (!args.includes('all')) {
80+
coinStats = coinStats.slice(0, 3);
81+
}
82+
83+
let output = '';
84+
85+
coinStats.forEach((s) => {
86+
const [key, value] = Object.entries(s)[0];
87+
const string = `*_${key}_*:\n - ${value}\n\n`;
88+
output += string;
89+
});
90+
91+
return output.trim();
8992
};

alice/scripts/commands.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
module.exports = () => {
2-
const stringOutput = `
2+
const output = `
33
Os seguintes comandos estão disponiveis:
44
- !bot
5+
- !coin
56
- !commands
67
- !cron
7-
- !doc
88
- !dice
9+
- !doc
910
- !github
1011
- !links
1112
- !lyric
1213
- !report
1314
- !search
1415
- !suggest
15-
- !wiki
16-
`;
17-
18-
return stringOutput.trim();
16+
- !wiki`;
17+
return output.trim();
1918
};

0 commit comments

Comments
 (0)