2020-04-08 18:08:46 +02:00
|
|
|
const path = require('path');
|
|
|
|
const fs = require('fs');
|
2020-04-09 16:30:52 +02:00
|
|
|
const fetch = require('node-fetch');
|
|
|
|
|
|
|
|
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
2020-04-08 18:08:46 +02:00
|
|
|
|
|
|
|
class Util {
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
throw new Error("Class may not be instantiated.");
|
|
|
|
}
|
|
|
|
|
|
|
|
static readdirRecursive(directory) {
|
|
|
|
|
|
|
|
const result = [];
|
|
|
|
|
|
|
|
(function read(directory) {
|
|
|
|
const files = fs.readdirSync(directory);
|
|
|
|
for(const file of files) {
|
|
|
|
const filePath = path.join(directory, file);
|
|
|
|
|
|
|
|
if(fs.statSync(filePath).isDirectory()) {
|
|
|
|
read(filePath);
|
|
|
|
} else {
|
|
|
|
result.push(filePath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}(directory));
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-04-09 16:30:52 +02:00
|
|
|
static delayFor(ms) {
|
2020-06-02 12:09:28 +02:00
|
|
|
return new Promise((resolve) => {
|
2020-04-09 16:30:52 +02:00
|
|
|
setTimeout(resolve, ms);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
static mergeDefault(def, given) {
|
|
|
|
if (!given) return def;
|
|
|
|
for (const key in def) {
|
|
|
|
if (!has(given, key) || given[key] === undefined) {
|
|
|
|
given[key] = def[key];
|
|
|
|
} else if (given[key] === Object(given[key])) {
|
|
|
|
given[key] = Util.mergeDefault(def[key], given[key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return given;
|
|
|
|
}
|
|
|
|
|
2020-06-02 12:09:28 +02:00
|
|
|
//Shard Managing
|
|
|
|
|
2020-04-09 16:30:52 +02:00
|
|
|
static fetchRecommendedShards(token, guildsPerShard = 1000) {
|
|
|
|
if(!token) throw new Error("[util] Token missing.");
|
|
|
|
return fetch("https://discordapp.com/api/v7/gateway/bot", {
|
|
|
|
method: 'GET',
|
2020-06-04 19:59:09 +02:00
|
|
|
headers: { Authorization: `Bot ${token.replace(/^Bot\s*/iu, '')}` }
|
2020-06-02 12:09:28 +02:00
|
|
|
}).then((res) => {
|
2020-04-09 16:30:52 +02:00
|
|
|
if (res.ok) return res.json();
|
|
|
|
throw res;
|
2020-06-02 12:09:28 +02:00
|
|
|
})
|
|
|
|
.then((data) => data.shards * (1000 / guildsPerShard));
|
|
|
|
}
|
|
|
|
|
|
|
|
static makePlainError(err) {
|
|
|
|
return {
|
|
|
|
name: err.name,
|
|
|
|
message: err.message,
|
|
|
|
stack: err.stack
|
|
|
|
};
|
2020-04-09 16:30:52 +02:00
|
|
|
}
|
|
|
|
|
2020-06-04 19:59:09 +02:00
|
|
|
static escapeMarkdown(text, onlyCodeBlock = false, onlyInlineCode = false) {
|
|
|
|
if(onlyCodeBlock) return text.replace(/```/gu, '`\u200b``');
|
|
|
|
if(onlyInlineCode) return text.replace(/\\(`|\\)/gu, '$1').replace(/(`|\\)/gu, '\\$1');
|
|
|
|
return text.replace(/\\(\*|_|`|~|\\)/gu, '$1').replace(/(\*|_|`|~|\\)/gu, '\\$1');
|
|
|
|
}
|
|
|
|
|
2020-04-09 16:30:52 +02:00
|
|
|
|
2020-04-08 18:08:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Util;
|