Skip to content

Commit a38269c

Browse files
committed
Update dependencies and type definitions
1 parent c58d41f commit a38269c

File tree

4 files changed

+89
-102
lines changed

4 files changed

+89
-102
lines changed

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,20 @@
1010
"start": "node src/index.js"
1111
},
1212
"dependencies": {
13+
"axios": "^1.6.5",
1314
"body-parser": "1.20.2",
1415
"discord.js": "14.14.1",
1516
"dotenv": "16.3.2",
1617
"ejs": "3.1.9",
1718
"express": "4.18.2",
1819
"express-rate-limit": "7.1.5",
1920
"express-session": "1.17.3",
20-
"request": "2.88.2",
21-
"zod": "3.22.4"
21+
"qs": "6.11.2",
22+
"valibot": "0.26.0"
2223
},
2324
"devDependencies": {
2425
"@types/express-rate-limit": "6.0.0",
26+
"@types/qs": "^6.9.11",
2527
"eslint": "8.56.0",
2628
"prettier": "3.2.4"
2729
},

src/server.js

Lines changed: 72 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ const { resolve } = require('node:path');
44

55
const { EmbedBuilder } = require('discord.js');
66

7-
const request = require('request');
7+
const qs = require('qs');
8+
// eslint-disable-next-line no-unused-vars
9+
const Axios = require('axios');
10+
const { default: axios } = require('axios');
811

912
const express = require('express');
1013
const session = require('express-session');
11-
const rateLimit = require('express-rate-limit');
14+
const { rateLimit } = require('express-rate-limit');
1215
const bodyParser = require('body-parser');
1316

1417
const client = require('./index');
@@ -49,93 +52,76 @@ server.use(express.static('assets'));
4952
server.all('/', (req, res) => res.send('Bot is Running!'));
5053

5154
server.get('/verify', async (req, res) => {
55+
/** @type {Axios.AxiosRequestConfig} */
5256
const oauthApiOptions = {
5357
method: 'POST',
5458
url: 'https://discord.com/api/oauth2/token',
5559
headers: { 'content-type': 'application/x-www-form-urlencoded' },
56-
form: {
60+
data: qs.stringify({
5761
client_id: client.application?.id,
5862
client_secret: process.env.CLIENT_SECRET,
5963
grant_type: 'authorization_code',
6064
code: req.query.code,
6165
redirect_uri: process.env.CALLBACK_URL,
6266
scope: ['identify', 'email', 'guilds.join'],
63-
},
67+
}),
6468
};
6569

66-
request(oauthApiOptions, function (error, _, body) {
67-
if (error) throw new Error(error);
68-
69-
const oauth_parsed = JSON.parse(body);
70-
71-
const apiUser = {
72-
method: 'GET',
73-
url: 'https://discord.com/api/users/@me',
74-
headers: { authorization: `Bearer ${oauth_parsed.access_token}` },
75-
};
70+
const response = await axios(oauthApiOptions);
7671

77-
request(apiUser, async (error, response, body) => {
78-
if (error) throw new Error(error);
7972

80-
if (req.session.verify_userid) {
81-
res.render(resolve('./html/captcha.html'), {
82-
recaptcha_sitekey: process.env.RECAPTCHA_SITEKEY,
83-
});
73+
const oauth_parsed = response.data;
8474

85-
return;
86-
}
87-
88-
if (response.statusCode !== 200) {
89-
res.redirect(
90-
`https://discord.com/oauth2/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=${process.env.CALLBACK_URL}&response_type=code&scope=guilds.join%20email%20identify`,
91-
);
75+
/** @type {Axios.AxiosRequestConfig} */
76+
const apiUserOptions = {
77+
method: 'GET',
78+
url: 'https://discord.com/api/users/@me',
79+
headers: { authorization: `Bearer ${oauth_parsed.access_token}` },
80+
};
9281

93-
return;
94-
}
82+
const response2 = await axios(apiUserOptions);
9583

96-
const parsed = JSON.parse(body);
84+
const parsed = response2.data;
9785

98-
const fetchedGuild = client.guilds.cache.get(process.env.SERVER_ID);
86+
const fetchedGuild = client.guilds.cache.get(process.env.SERVER_ID);
9987

100-
const userfetch = await client.users.fetch(parsed.id);
88+
const userfetch = await client.users.fetch(parsed.id);
10189

102-
await fetchedGuild?.members.add(userfetch, {
103-
accessToken: oauth_parsed.access_token,
104-
});
90+
await fetchedGuild?.members.add(userfetch, {
91+
accessToken: oauth_parsed.access_token,
92+
});
10593

106-
const userguild = await fetchedGuild?.members.fetch(userfetch);
94+
const userguild = await fetchedGuild?.members.fetch(userfetch);
10795

108-
if (!userguild) {
109-
res.render(resolve('./html/error.html'), {
110-
messageText: 'You already verified!',
111-
});
96+
if (!userguild) {
97+
res.render(resolve('./html/error.html'), {
98+
messageText: 'You already verified!',
99+
});
112100

113-
return;
114-
}
101+
return;
102+
}
115103

116-
if (userguild.roles.cache.has(process.env.VERIFIED_ROLE_ID)) {
117-
res.render(resolve('./html/success.html'), {
118-
messageText: 'You already verified!',
119-
});
104+
if (userguild.roles.cache.has(process.env.VERIFIED_ROLE_ID)) {
105+
res.render(resolve('./html/success.html'), {
106+
messageText: 'You already verified!',
107+
});
120108

121-
return;
122-
}
109+
return;
110+
}
123111

124-
req.session.verify_userid = parsed.id;
112+
req.session.verify_userid = parsed.id;
125113

126-
if (process.env.REQUIRE_VERIFIED_EMAIL === 'true' || parsed.verified) {
127-
req.session.verify_status = 'waiting_recaptcha';
128-
res.render(resolve('./html/captcha.html'), {
129-
recaptcha_sitekey: process.env.RECAPTCHA_SITEKEY,
130-
});
131-
} else {
132-
req.session.destroy(() => undefined);
133-
res.render(resolve('./html/error.html'), {
134-
messageText: 'Please verify your email!',
135-
});
136-
}
114+
if (process.env.REQUIRE_VERIFIED_EMAIL === 'true' || parsed.verified) {
115+
req.session.verify_status = 'waiting_recaptcha';
116+
res.render(resolve('./html/captcha.html'), {
117+
recaptcha_sitekey: process.env.RECAPTCHA_SITEKEY,
137118
});
138-
});
119+
} else {
120+
req.session.destroy(() => undefined);
121+
res.render(resolve('./html/error.html'), {
122+
messageText: 'Please verify your email!',
123+
});
124+
}
139125
});
140126

141127
server.post('/verify/solve/', async (req, res) => {
@@ -144,53 +130,52 @@ server.post('/verify/solve/', async (req, res) => {
144130
return res.redirect('/verify');
145131
}
146132

133+
/** @type {Axios.AxiosRequestConfig} */
147134
const options = {
148135
method: 'POST',
149136
url: 'https://www.google.com/recaptcha/api/siteverify',
150137
headers: {
151138
'content-type':
152139
'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
153140
},
154-
formData: {
141+
data: qs.stringify({
155142
secret: process.env.RECAPTCHA_SECRET,
156143
response: req.body['g-recaptcha-response'],
157-
},
144+
}),
158145
};
159146

160-
request(options, async (error, _, body) => {
161-
if (error) throw new Error(error);
147+
const response = await axios(options);
162148

163-
const parsed = JSON.parse(body);
149+
const parsed = response.data;
164150

165-
if (parsed.success && req.session.verify_userid) {
166-
const fetchedGuild = client.guilds.cache.get(process.env.SERVER_ID);
151+
if (parsed.success && req.session.verify_userid) {
152+
const fetchedGuild = client.guilds.cache.get(process.env.SERVER_ID);
167153

168-
const userfetch = await client.users.fetch(req.session.verify_userid);
154+
const userfetch = await client.users.fetch(req.session.verify_userid);
169155

170-
if (!fetchedGuild) {
171-
res.redirect('/verify');
156+
if (!fetchedGuild) {
157+
res.redirect('/verify');
172158

173-
return;
174-
}
159+
return;
160+
}
175161

176-
const member = await fetchedGuild.members.fetch(userfetch.id);
162+
const member = await fetchedGuild.members.fetch(userfetch.id);
177163

178-
await member.roles.add(process.env.VERIFIED_ROLE_ID, 'Verified');
164+
await member.roles.add(process.env.VERIFIED_ROLE_ID, 'Verified');
179165

180-
req.session.verify_status = 'done';
166+
req.session.verify_status = 'done';
181167

182-
const embed = new EmbedBuilder()
183-
.setTitle(':white_check_mark: Verified')
184-
.setDescription('Now you can access to the server!')
185-
.setColor('Green');
168+
const embed = new EmbedBuilder()
169+
.setTitle(':white_check_mark: Verified')
170+
.setDescription('Now you can access to the server!')
171+
.setColor('Green');
186172

187-
member.send({ embeds: [embed] }).catch(() => undefined);
173+
member.send({ embeds: [embed] }).catch(() => undefined);
188174

189-
res.redirect('/verify/succeed');
190-
} else {
191-
res.redirect('/verify');
192-
}
193-
});
175+
res.redirect('/verify/succeed');
176+
} else {
177+
res.redirect('/verify');
178+
}
194179
});
195180

196181
server.get('/verify/succeed', async (req, res) => {
@@ -222,4 +207,4 @@ const PORT = process.env.PORT || 8080;
222207

223208
server.listen(PORT);
224209

225-
console.log(`Server is running on port ${PORT}`)
210+
console.log(`Server is running on port ${PORT}`);

src/type.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { z } from 'zod';
1+
import { type Output } from 'valibot';
22
import { EnvironmentVariableSchema } from './validate-env';
33

44
declare global {
55
namespace NodeJS {
66
// eslint-disable-next-line @typescript-eslint/no-empty-interface
7-
interface ProcessEnv extends z.infer<typeof EnvironmentVariableSchema> {}
7+
interface ProcessEnv extends Output<typeof EnvironmentVariableSchema> {}
88
}
99
}
1010

src/validate-env.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
const { z } = require('zod');
1+
const { object, parse, string } = require('valibot');
22

3-
const EnvironmentVariableSchema = z.object({
4-
TOKEN: z.string(),
5-
CLIENT_SECRET: z.string(),
6-
CALLBACK_URL: z.string(),
3+
const EnvironmentVariableSchema = object({
4+
TOKEN: string(),
5+
CLIENT_SECRET: string(),
6+
CALLBACK_URL: string(),
77

8-
RECAPTCHA_SITEKEY: z.string(),
9-
RECAPTCHA_SECRET: z.string(),
8+
RECAPTCHA_SITEKEY: string(),
9+
RECAPTCHA_SECRET: string(),
1010

11-
SERVER_ID: z.string(),
11+
SERVER_ID: string(),
1212

13-
REQUIRE_VERIFIED_EMAIL: z.string(),
14-
VERIFIED_ROLE_ID: z.string(),
13+
REQUIRE_VERIFIED_EMAIL: string(),
14+
VERIFIED_ROLE_ID: string(),
1515
});
1616

17-
EnvironmentVariableSchema.parse(process.env);
17+
parse(EnvironmentVariableSchema, process.env);
1818

1919
module.exports = { EnvironmentVariableSchema };

0 commit comments

Comments
 (0)