Skip to content

Commit 46fb3bd

Browse files
authored
Merge pull request #16 from techx/cnord/decaf
Convert everything to Javascript
2 parents 1b59e45 + c15304f commit 46fb3bd

28 files changed

+1847
-1453
lines changed

.eslintrc.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
env:
2+
browser: true
3+
commonjs: true
4+
es6: true
5+
extends:
6+
- airbnb
7+
globals:
8+
Atomics: readonly
9+
SharedArrayBuffer: readonly
10+
parserOptions:
11+
ecmaFeatures:
12+
jsx: true
13+
ecmaVersion: 2018
14+
rules: {}

disabled_scripts/text.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// Description:
2+
// Text reciever
3+
//
4+
// Configuration:
5+
// HUBOT_TEXT_CHANNEL - channel to send messages in
6+
// HUBOT_TEXT_ACCOUNT - Account SID for verification
7+
//
8+
// Commands:
9+
// hubot text add <number> <name> - add a number to the list (make sure to add the +)
10+
// hubot text numberof <name> - gets the number of the name
11+
// hubot text whois <number> - gets the name of the person with that number
12+
// hubot text remove <number>
13+
//
14+
// Author:
15+
// Detry322
16+
17+
const config = require('hubot-conf');
18+
19+
const BRAIN_LOCATION = 'text.numbers';
20+
21+
module.exports = (robot) => {
22+
const conf = config('text', robot);
23+
24+
const addNumber = (number, name) => {
25+
const mapping = robot.brain.get(BRAIN_LOCATION) || {};
26+
mapping[number] = name;
27+
robot.brain.set(BRAIN_LOCATION, mapping);
28+
};
29+
30+
const removeNumber = (number) => {
31+
const mapping = robot.brain.get(BRAIN_LOCATION) || {};
32+
delete mapping[number];
33+
robot.brain.set(BRAIN_LOCATION, mapping);
34+
};
35+
36+
const getName = (number) => {
37+
const mapping = robot.brain.get(BRAIN_LOCATION) || {};
38+
return mapping[number];
39+
};
40+
41+
const getNumber = (name) => {
42+
const mapping = robot.brain.get(BRAIN_LOCATION) || {};
43+
return Object.keys(mapping).find((key) => mapping[key] === name);
44+
};
45+
46+
robot.router.post('/text/receive', (req, res) => {
47+
res.header('Content-Type', 'text/xml').send('<Response></Response>');
48+
let number = req.body.From;
49+
let message = req.body.Body;
50+
let decorator = 'Twilio';
51+
if (req.body.AccountSid === conf('account')) {
52+
const matches = message.match(/(\+?[0-9]+) - (.+)$/);
53+
if (matches) {
54+
[, number, message] = matches;
55+
decorator = 'Google Voice';
56+
}
57+
const name = getName(number) ? getName(number) : number;
58+
robot.messageRoom(
59+
conf('channel'),
60+
`[${decorator}] Text from ${name}: ${message}`,
61+
);
62+
}
63+
});
64+
65+
robot.respond(/text add (\+?[0-9]+) (.+)$/i, (res) => {
66+
const number = res.match[1];
67+
const name = res.match[2];
68+
addNumber(number, name);
69+
res.send(`Added: \`${number}\` for \`${name}\``);
70+
});
71+
72+
robot.respond(/text numberof (.+)$/i, (res) => {
73+
const name = res.match[1];
74+
const number = getNumber(name);
75+
if (number) {
76+
return res.send(`\`${name}\` is \`${number}\``);
77+
}
78+
return res.send(`Could not find number for \`${name}\``);
79+
});
80+
81+
robot.respond(/text whois (\+?[0-9]+)$/i, (res) => {
82+
const number = res.match[1];
83+
const name = getName(number);
84+
if (name) {
85+
return res.send(`\`${number}\` is \`${name}\``);
86+
}
87+
return res.send(`Could not find name for \`${number}\``);
88+
});
89+
90+
robot.respond(/text remove (\+?[0-9]+)$/i, (res) => {
91+
const number = res.match[1];
92+
removeNumber(number);
93+
res.send(`Removed: \`${number}\``);
94+
});
95+
};

disabled_scripts/update.coffee

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

disabled_scripts/update.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Description:
2+
// Allows hubot to update itself using git pull and npm update.
3+
// If updates are downloaded you'll need to restart hubot, for example using "hubot
4+
// die" (restart using a watcher like forever.js).
5+
//
6+
// Shamelessly stolen from: https://github.com/github/hubot-scripts/blob/master/src/scripts/update.coffee
7+
// ... with some slight modifications.
8+
//
9+
// Dependencies:
10+
// None
11+
//
12+
// Configuration:
13+
// None
14+
//
15+
// Commands:
16+
// hubot update - Performs a git pull and npm update.
17+
//
18+
// Author:
19+
// benjamine, Detry322
20+
21+
const childProcess = require('child_process');
22+
23+
const restart = (res) => {
24+
res.send('Restarting...');
25+
setTimeout(() => process.exit(),
26+
500); // Give process some time to send message
27+
};
28+
29+
const send = (res, shouldSend, message) => {
30+
if (shouldSend) {
31+
res.send(message);
32+
}
33+
};
34+
35+
const update = (res, sendStd, sendErr) => {
36+
try {
37+
send(res, sendStd, 'fetching latest source code...');
38+
childProcess.exec('git fetch --all >/dev/null 2>&1 && git log --oneline --graph --stat HEAD..@{u} && git reset --hard @{u}', (error, stdout, stderr) => {
39+
if (error) {
40+
send(res, sendErr, `git fetch/reset failed: \`\`\`${stderr}\`\`\``);
41+
} else {
42+
send(res, sendStd, `\`\`\`${stdout}\`\`\``);
43+
}
44+
try {
45+
send(res, sendStd, 'npm update...');
46+
childProcess.exec('npm update', (error1, stdout1, stderr1) => {
47+
if (error1) {
48+
send(res, sendErr, `npm update failed: \`\`\`${stderr1}\`\`\``);
49+
} else {
50+
const output = `${stdout1}`;
51+
if (/node_modules/.test(output)) {
52+
send(res, sendStd, `some dependencies updated:\n\`\`\`${output}\`\`\``);
53+
} else {
54+
send(res, sendStd, 'all dependencies are up-to-date');
55+
}
56+
}
57+
restart(res);
58+
});
59+
} catch (error1) {
60+
send(res, sendErr, `npm update failed: ${error1}`);
61+
}
62+
});
63+
} catch (error1) {
64+
send(res, sendErr, `git pull failed: ${error1}`);
65+
}
66+
};
67+
68+
module.exports = (robot) => {
69+
robot.respond(/restart( yourself)?$/i, (res) => restart(res));
70+
71+
robot.respond(/update silent$/i, (res) => {
72+
res.send('Updating...');
73+
return update(res, false, true);
74+
});
75+
76+
robot.respond(/update super silent$/i, (res) => update(res, false, false));
77+
78+
robot.respond(/update( yourself)?$/i, (res) => update(res, true, true));
79+
};

disabled_scripts/warriors_game.coffee

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

disabled_scripts/warriors_game.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Description:
2+
// Warriors game score
3+
//
4+
// Author:
5+
// detry322
6+
7+
const querystring = require('querystring');
8+
9+
let rangeFn;
10+
11+
module.exports = (robot) => {
12+
robot.respond(/clear$/, (res) => res.send((rangeFn(1, 60, true).map(() => '.')).join('\n')));
13+
14+
if (robot.adapterName === 'slack') {
15+
robot.logger.info('Adapter is slack: will terminate on client close');
16+
robot.adapter.client.on('close', () => process.exit(0));
17+
} else {
18+
robot.logger.info('Adapter is not slack, will not terminate on client close');
19+
}
20+
21+
robot.respond(/warriors score/i, (res) => robot.http('http://www.espn.com/nba/bottomline/scores').get()((err, result, body) => {
22+
if (err || (result.statusCode !== 200)) {
23+
res.send('Had trouble getting the score :(');
24+
return;
25+
}
26+
const qs = querystring.parse(body);
27+
res.send(qs.nba_s_left1);
28+
}));
29+
};
30+
31+
rangeFn = (left, right, inclusive) => {
32+
const range = [];
33+
const ascending = left < right;
34+
let end;
35+
if (!inclusive) {
36+
end = right;
37+
} else {
38+
end = ascending ? right + 1 : right - 1;
39+
}
40+
for (let i = left; ascending ? i < end : i > end; ascending ? i += 1 : i -= 1) {
41+
range.push(i);
42+
}
43+
return range;
44+
};

0 commit comments

Comments
 (0)