-
Notifications
You must be signed in to change notification settings - Fork 2
/
messageHandler.js
125 lines (109 loc) · 5.51 KB
/
messageHandler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const options = {};
const util = require('./util.js');
const bgg = require('bgg')(options);
const ba = require('beeradvocate-api');
const RedditHandler = require('./redditModule');
const redditHandler = new RedditHandler();
module.exports = {
init: (client, persistance) => {
redditHandler.init(client, persistance);
},
handle: (msg) => {
if (msg.author.bot) return;
redditHandler.handleMessage(msg);
const subsReddits = msg.content.match(/([/][r][/]\w+)/g);
if (subsReddits && !msg.content.includes('reddit.com/r/')) {
subsReddits.forEach((slashR) => {
msg.channel.send(`https://reddit.com${slashR}`);
});
}
const dieRollQuery = msg.content.match(/\.roll (\d+)d(\d+)/);
if (dieRollQuery) {
const numDice = parseInt(dieRollQuery[1], 10);
const numPips = parseInt(dieRollQuery[2], 10);
if (numDice === 0 || numPips === 0) {
msg.channel.send('wat?');
return;
}
if (numDice > 100) {
msg.channel.send('That\'s a lot of dice!');
return;
}
let result = 'You rolled ';
for (let i = 0; i < numDice; i += 1) {
if (i > 0) {
result += ', ';
}
result += Math.floor(Math.random() * numPips) + 1;
}
msg.channel.send(result);
}
if (msg.content.substring(0, 5) === '🍻 @ ') {
const mapsQuery = util.encodeForQs(msg.content.substring(5, msg.content.length));
msg.channel.send(`https://maps.google.com/?q=${mapsQuery}`);
}
const beerQuery = msg.content.match(/(?:\.beer )(\w.*)/);
if (beerQuery) {
let beerResult = '';
ba.beerSearch(beerQuery[1], (beers) => {
const beersArray = JSON.parse(beers);
beersArray.forEach((beer) => {
beerResult += `${beer.beer_name} - <https://www.beeradvocate.com${beer.beer_url}>\n`;
});
const safeBeerResult = beerResult.substring(0, 1999); // can only send 2000 char messages to discord
msg.channel.send(safeBeerResult);
});
}
const games = msg.content.match(/\{\{(.*?)\}\}/g);
if (games) {
games.forEach((gameQuery) => {
bgg('search', { type: 'boardgame', query: gameQuery.toLowerCase() }).then((results) => {
if (!results.items.total) {
msg.channel.send('no results!');
} else {
bgg('thing', { thingtype: 'boardgame', id: results.items.item[0].id, stats: 1 }).then((result) => {
if (!result) {
msg.channel.send('no results!');
} else {
const game = result.items.item;
const regexp = /.+?(?=&&#35)/;
const name = game.name.length > 1 ? game.name[0].value : game.name.value;
const players = game.minplayers.value === game.maxplayers.value ?
game.minplayers.value : `${game.minplayers.value} - ${game.maxplayers.value}`;
const minutes = game.minplaytime.value === game.maxplaytime.value ?
game.minplaytime.value : `${game.minplaytime.value} - ${game.maxplaytime.value}`;
msg.channel.send(`${name} [${game.yearpublished.value}]\n` +
`${players} players\n` +
`${minutes} minutes\n` +
`${game.statistics.ratings.average.value} avg. rating\n` +
`<https://www.boardgamegeek.com/boardgame/${game.id}>\n` +
`${game.description.match(regexp)}\n` +
`${game.thumbnail}\n`);
}
}, () => {
msg.channel.send('sorry, something is fucked');
});
}
}, () => {
msg.channel.send('sorry, something is fucked');
});
});
}
if (msg.content === 'wb.health') {
msg.channel.send('yes, i\'m alive');
}
if (msg.content === 'wb.docs') {
msg.channel.send('```womdocs:\n\n' +
' - use /r/something to get a link to the subreddit\n' +
' - use .roll xdy to roll x dice with y pips\n\n' +
' - use \'🍻 @ \' followed by the name of a location to get a Google Maps URL pointed to that location\n\n' +
' - {{BoardGameTitle}} in messages will return a bunch of information about and a link to the best match of BoardGameTitle on BoardGameGeek\n\n' +
'#subreddit-watcher: watches a specified subreddit and auto-posts when anything reaches specified score\n\n' +
' - wb.addSub {subredditname} {score} (ws.addSub gaming 10000)\n' +
' - use .beer name of beer to get beeradvocate.com links\n\n' +
' - wb.removeSub {subreddit}\n' +
' - wb.listSubs\n' +
'Questions? Submit a PR and fix it yourself at https://github.com/traviscrowe/wombot```');
}
}
};