Skip to content

Commit fc4de76

Browse files
author
lepon01
committed
add bot
1 parent cabb3f5 commit fc4de76

3 files changed

Lines changed: 159 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,5 @@ typings/
5959

6060
# next.js build output
6161
.next
62+
63+
config/config.json

config/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const config = require('./config.json.js');
2+
3+
module.exports = config;

index.js

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
const { Client } = require('discord.js');
2+
const express = require('express');
3+
const fetch = require('node-fetch');
4+
5+
const config = require('./config');
6+
7+
const app = express();
8+
const client = new Client({
9+
restTimeOffset: 1000
10+
});
11+
12+
const botOnline = (req, res, next) => {
13+
if (client.status === 0) {
14+
next();
15+
} else {
16+
res.json({
17+
ok: false,
18+
message: 'The Discord bot is offline',
19+
languages: 'errors.botserver.offline'
20+
});
21+
}
22+
};
23+
24+
const isAuthenticated = (req, res, next) => {
25+
if (req.get('Authorization') === config.webserver.authorization) {
26+
next();
27+
} else {
28+
res.status(400).json({
29+
ok: false,
30+
message: 'You are not allowed to fetch the Bot server',
31+
languages: 'errors.botserver.unauthorised'
32+
});
33+
}
34+
};
35+
36+
const userExists = (req, res, next) => {
37+
const member = req.guild.members.get(req.params.id);
38+
if (member) {
39+
req.member = member;
40+
next();
41+
} else {
42+
res.json({
43+
ok: false,
44+
message: 'The user was not found by the server',
45+
languages: 'errors.botserver.usernotfound'
46+
});
47+
}
48+
};
49+
50+
client.on('ready', () => {
51+
console.log(`Logged in as ${client.user.tag}!`);
52+
});
53+
54+
app
55+
.set('json spaces', 4)
56+
.use(botOnline)
57+
.use(isAuthenticated)
58+
.use((req, res, next) => {
59+
req.guild = client.guilds.get(config.guild);
60+
if (req.guild) {
61+
next();
62+
} else {
63+
res.json({
64+
ok: false,
65+
message: 'The guild was not found by the server',
66+
languages: 'errors.botserver.guildnotfound'
67+
});
68+
}
69+
})
70+
.get('/status/:filter', (req, res) => {
71+
res.json({
72+
ok: true,
73+
data: client.users.filter(user => user.presence.status === req.params.filter).array().map(user => user.id)
74+
});
75+
})
76+
.get('/in/:id', userExists, (req, res) => {
77+
res.json({
78+
ok: true
79+
});
80+
})
81+
.get('/fixroles', (req, res, next) => {
82+
fetch(`${config.website}/api/v2/bots`)
83+
.then(json => json.json())
84+
.then((data) => {
85+
if (data.ok) {
86+
return data.data;
87+
}
88+
return new Error('Cannot fetch list of bots');
89+
})
90+
.then(data => data.filter(bot => bot.state === 'approved'))
91+
.then((data) => {
92+
const authors = {};
93+
data.forEach(bot => bot.authors.forEach((author) => {
94+
authors[author] = true;
95+
}));
96+
return Object.keys(authors);
97+
})
98+
.then((users) => {
99+
const [add, remove] = req.guild.members
100+
.filter(member => !member.user.bot)
101+
.partition(member => users.includes(member.user.id));
102+
103+
return Promise.all(
104+
add.map(member => member.addRole(config.roles.dev, 'ls.terminal.ink adjustments')),
105+
remove.map(member => member.removeRole(config.roles.dev, 'ls.terminal.ink adjustments'))
106+
);
107+
})
108+
.then(() => {
109+
res.json({
110+
ok: true
111+
});
112+
})
113+
.catch((err) => {
114+
next(err);
115+
});
116+
})
117+
.get('/addrole/:id', userExists, (req, res, next) => {
118+
req.member.addRole(config.roles.dev, 'ls.terminal.ink adjustments')
119+
.then(() => res.json({
120+
ok: true
121+
}))
122+
.catch(err => next(err));
123+
})
124+
.get('/removerole/:id', userExists, (req, res, next) => {
125+
req.member.removeRole(config.roles.dev, 'ls.terminal.ink adjustments')
126+
.then(() => res.json({
127+
ok: true
128+
}))
129+
.catch(err => next(err));
130+
})
131+
.use((err, req, res, next) => {
132+
if (err) {
133+
res.json({
134+
ok: false,
135+
message: err.stack
136+
});
137+
} else {
138+
next();
139+
}
140+
});
141+
142+
client.login(config.token);
143+
144+
const http = app.listen(config.webserver.port);
145+
146+
// When CTRL+C is caught...
147+
process.on('SIGINT', () => {
148+
console.log('Goodnight!');
149+
150+
// Close the Express.js server
151+
http.close(() => {
152+
console.log('No longer listening');
153+
});
154+
});

0 commit comments

Comments
 (0)