diff --git a/Library/0BDFDB.plugin.js b/Library/0BDFDB.plugin.js index 1fa322a60b..603c8e98f7 100644 --- a/Library/0BDFDB.plugin.js +++ b/Library/0BDFDB.plugin.js @@ -2,7 +2,7 @@ * @name BDFDB * @author DevilBro * @authorId 278543574059057154 - * @version 3.3.8 + * @version 3.3.9 * @description Required Library for DevilBro's Plugins * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -15,7 +15,7 @@ module.exports = (_ => { if (window.BDFDB_Global && window.BDFDB_Global.PluginUtils && typeof window.BDFDB_Global.PluginUtils.cleanUp == "function") window.BDFDB_Global.PluginUtils.cleanUp(window.BDFDB_Global); - const request = require("request"), fs = require("fs"), path = require("path"); + const fs = require("fs"), path = require("path"); var BDFDB, Internal; var LibraryRequires = {}; @@ -172,15 +172,13 @@ module.exports = (_ => { else { let config = args[0] && typeof args[0] == "object" ? args[0] : (args[1] && typeof args[1] == "object" && args[1]); let timeout = 600000; + if (config && config.url) delete config.url; if (config && config.form && typeof config.form == "object") { let query = Object.entries(config.form).map(n => n[0] + "=" + n[1]).join("&"); - if (query) { - url += `?${query}`; - if (uIndex == 0) args[0] += url; - else if (uIndex == 1) args[1].url += url; - } + if (query) url += `?${query}`; } if (config && !isNaN(parseInt(config.timeout)) && config.timeout > 0) timeout = config.timeout; + if (config && config.method) config.method = config.method.toUpperCase(); let killed = false, timeoutObj = BDFDB.TimeUtils.timeout(_ => { killed = true; BDFDB.TimeUtils.clear(timeoutObj); @@ -196,37 +194,15 @@ module.exports = (_ => { url: "" }, null); }, timeout); - args[cIndex] = (...args2) => { + let response = null; + return (config && config.bdVersion && BdApi && BdApi.Net && BdApi.Net.fetch ? BdApi.Net.fetch : fetch)(url, Object.assign({}, config, {timeout: 60000})).then(r => { + response = r; + response.statusCode = response.status; BDFDB.TimeUtils.clear(timeoutObj); - if (!killed) callback(...args2); - }; - let requestError = false; - try {Buffer} catch (err) {requestError = true;} - if (!requestError || !request) return request(...args); - else { - let xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = _ => { - if (xhttp && xhttp.readyState == 4) { - BDFDB.TimeUtils.clear(timeoutObj); - let headers = {}, headersArray = (xhttp.getAllResponseHeaders && xhttp.getAllResponseHeaders() || "").split("\r\n").map(n => n.split(":")).filter(n => n); - if (headersArray && headersArray.length > 1) for (let entry of headersArray) if (entry[0] != undefined && entry[1] != undefined) headers[entry[0]] = entry[1].trim(); - callback(xhttp.status != 200 ? new Error(`XML Request Failed`) : null, { - aborted: false, - complete: true, - end: undefined, - headers: {}, - method: config && config.method || "get", - rawHeaders: [], - statusCode: xhttp.status, - statusMessage: "OK", - url: xhttp.responseURL - }, xhttp.status != 200 ? null : xhttp.response); - } - }; - xhttp.open((config && config.method || "get").toUpperCase(), url, true); - if (config && config.headers) for (let key in config.headers) if (key != "user-agent") xhttp.setRequestHeader(key, config.headers[key]); - xhttp.send(); - } + return response.text(); + }).then(body => { + if (!killed) callback(response.status != 200 ? new Error(response.statusText || "Fetch Failed") : null, response, body); + }); } }; @@ -1139,7 +1115,7 @@ module.exports = (_ => { return {backup: fs.existsSync(path) && (fs.readFileSync(path) || "").toString(), hashIsSame: libHashes[fileName] && oldLibHashes[fileName] && libHashes[fileName] == oldLibHashes[fileName]}; }; const requestLibraryHashes = tryAgain => { - requestFunction("https://api.github.com/repos/mwittrien/BetterDiscordAddons/contents/Library/_res/", {headers: {"user-agent": "node.js"}, timeout: 60000}, (e, r, b) => { + requestFunction("https://api.github.com/repos/mwittrien/BetterDiscordAddons/contents/Library/_res/", {timeout: 60000}, (e, r, b) => { if ((e || !b || r.statusCode != 200) && tryAgain) return BDFDB.TimeUtils.timeout(_ => requestLibraryHashes(), 10000); else { try { diff --git a/Plugins/FriendNotifications/FriendNotifications.plugin.js b/Plugins/FriendNotifications/FriendNotifications.plugin.js index c4f679ec63..1f650994d6 100644 --- a/Plugins/FriendNotifications/FriendNotifications.plugin.js +++ b/Plugins/FriendNotifications/FriendNotifications.plugin.js @@ -2,7 +2,7 @@ * @name FriendNotifications * @author DevilBro * @authorId 278543574059057154 - * @version 1.9.4 + * @version 1.9.5 * @description Shows a Notification when a Friend or a User, you choose to observe, changes their Status * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -692,7 +692,7 @@ module.exports = (_ => { }); else BDFDB.LibraryRequires.fs.readFile(source, "", (error, buffer) => { if (error) BDFDB.NotificationUtils.toast("Could not fetch File, please make sure the File exists", {type: "danger"}); - else successSavedAudio(key, source, `data:audio/mpeg;base64,${Buffer.from(buffer).toString("base64")}`); + else successSavedAudio(key, source, `data:audio/mpeg;base64,${btoa((new TextDecoder()).decode(buffer))}`); }); }, children: BDFDB.LanguageUtils.LanguageStrings.SAVE diff --git a/Plugins/ImageUtilities/ImageUtilities.plugin.js b/Plugins/ImageUtilities/ImageUtilities.plugin.js index b9b5b9e57e..03cb41434c 100644 --- a/Plugins/ImageUtilities/ImageUtilities.plugin.js +++ b/Plugins/ImageUtilities/ImageUtilities.plugin.js @@ -2,7 +2,7 @@ * @name ImageUtilities * @author DevilBro * @authorId 278543574059057154 - * @version 5.2.9 + * @version 5.3.0 * @description Adds several Utilities for Images/Videos (Gallery, Download, Reverse Search, Zoom, Copy, etc.) * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -1516,7 +1516,7 @@ module.exports = (_ => { if (!extension) BDFDB.NotificationUtils.toast(this.labels.toast_save_failed.replace("{{var0}}", BDFDB.LanguageUtils.LanguageStrings.IMAGE).replace("{{var1}}", path || "PC"), {type: "danger"}); else { let type = fileTypes[extension].video ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; - if (path) BDFDB.LibraryRequires.fs.writeFile(this.getFileName(path, (alternativeName || url.split("/").pop().split(".").slice(0, -1).join(".") || "unknown").slice(0, 35), extension, 0), Buffer.from(buffer), error => { + if (path) BDFDB.LibraryRequires.fs.writeFile(this.getFileName(path, (alternativeName || url.split("/").pop().split(".").slice(0, -1).join(".") || "unknown").slice(0, 35), extension, 0), new Uint8Array(buffer), error => { if (error) BDFDB.NotificationUtils.toast(this.labels.toast_save_failed.replace("{{var0}}", type).replace("{{var1}}", path), {type: "danger"}); else BDFDB.NotificationUtils.toast(this.labels.toast_save_success.replace("{{var0}}", type).replace("{{var1}}", path), {type: "success"}); }); diff --git a/Plugins/NotificationSounds/NotificationSounds.plugin.js b/Plugins/NotificationSounds/NotificationSounds.plugin.js index f513a00bfb..1769b23ef3 100644 --- a/Plugins/NotificationSounds/NotificationSounds.plugin.js +++ b/Plugins/NotificationSounds/NotificationSounds.plugin.js @@ -2,7 +2,7 @@ * @name NotificationSounds * @author DevilBro * @authorId 278543574059057154 - * @version 3.8.2 + * @version 3.8.3 * @description Allows you to replace the native Sounds with custom Sounds * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -437,7 +437,7 @@ module.exports = (_ => { }); else BDFDB.LibraryRequires.fs.readFile(source, "", (error, buffer) => { if (error) BDFDB.NotificationUtils.toast("Could not fetch file. Please make sure the file exists", {type: "danger"}); - else return successSavedAudio({category, sound, source: `data:audio/mpeg;base64,${Buffer.from(buffer).toString("base64")}`}); + else return successSavedAudio({category, sound, source: `data:audio/mpeg;base64,${btoa((new TextDecoder()).decode(buffer))}`}); }); }, children: BDFDB.LanguageUtils.LanguageStrings.SAVE diff --git a/Plugins/PluginRepo/PluginRepo.plugin.js b/Plugins/PluginRepo/PluginRepo.plugin.js index 10c1bfbb66..46a89a1c07 100644 --- a/Plugins/PluginRepo/PluginRepo.plugin.js +++ b/Plugins/PluginRepo/PluginRepo.plugin.js @@ -2,7 +2,7 @@ * @name PluginRepo * @author DevilBro * @authorId 278543574059057154 - * @version 2.5.1 + * @version 2.5.2 * @description Allows you to download all Plugins from BD's Website within Discord * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -492,7 +492,7 @@ module.exports = (_ => { loadingToast.close(); BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LibraryStringsFormat("download_fail", `Plugin "${this.props.data.name}"`), {type: "danger"}); } - else BDFDB.LibraryRequires.fs.writeFile(BDFDB.LibraryRequires.path.join(BDFDB.BDUtils.getPluginsFolder(), this.props.data.rawSourceUrl.split("/").pop()), Buffer.from(buffer).toString(), error2 => { + else BDFDB.LibraryRequires.fs.writeFile(BDFDB.LibraryRequires.path.join(BDFDB.BDUtils.getPluginsFolder(), this.props.data.rawSourceUrl.split("/").pop()), (new TextDecoder()).decode(buffer), error2 => { delete this.props.downloading; loadingToast.close(); if (error2) BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LibraryStringsFormat("save_fail", `Plugin "${this.props.data.name}"`), {type: "danger"}); @@ -761,7 +761,7 @@ module.exports = (_ => { BDFDB.DiscordUtils.requestFileData(plugin.rawSourceUrl, (error, buffer) => { if (error || !buffer) plugin.failed = true; else { - let body = Buffer.from(buffer).toString(); + let body = (new TextDecoder()).decode(buffer); if (body && body.indexOf("404: Not Found") != 0) { const META = body.split("*/")[0]; plugin.name = BDFDB.StringUtils.upperCaseFirstChar((/@name\s+([^\t^\r^\n]+)|\/\/\**META.*["']name["']\s*:\s*["'](.+?)["']/i.exec(META) || []).filter(n => n)[1] || plugin.name || ""); @@ -787,7 +787,7 @@ module.exports = (_ => { } }; - BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/plugins", (error, response, body) => { + BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/plugins", {bdVersion: true}, (error, response, body) => { if (!error && body && response.statusCode == 200) try { grabbedPlugins = BDFDB.ArrayUtils.keySort(JSON.parse(body).filter(n => n), "name"); BDFDB.DataUtils.save(BDFDB.ArrayUtils.numSort(grabbedPlugins.map(n => n.id)).join(" "), this, "cached"); @@ -851,7 +851,7 @@ module.exports = (_ => { } checkForNewPlugins () { - BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/plugins", (error, response, body) => { + BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/plugins", {bdVersion: true}, (error, response, body) => { if (!error && body) try { if (JSON.parse(body).filter(n => n).length != grabbedPlugins.length) { loading = {is: false, timeout: null, amount: 0}; diff --git a/Plugins/ServerFolders/ServerFolders.plugin.js b/Plugins/ServerFolders/ServerFolders.plugin.js index 47d6313c6e..eaa50e2065 100644 --- a/Plugins/ServerFolders/ServerFolders.plugin.js +++ b/Plugins/ServerFolders/ServerFolders.plugin.js @@ -2,7 +2,7 @@ * @name ServerFolders * @author DevilBro * @authorId 278543574059057154 - * @version 7.1.7 + * @version 7.1.8 * @description Changes Discord's Folders, Servers open in a new Container, also adds extra Features to more easily organize, customize and manage your Folders * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -318,7 +318,7 @@ module.exports = (_ => { checkImage(base64OrUrl, callback) { if (base64OrUrl.indexOf("https://") == 0 || base64OrUrl.indexOf("http://") == 0) BDFDB.LibraryRequires.request(base64OrUrl.trim(), {agentOptions: {rejectUnauthorized: false}, headers: {"Content-Type": "application/json"}}, (error, response, body) => { if (response && response.headers["content-type"] && response.headers["content-type"].indexOf("image") != -1 && response.headers["content-type"] != "image/gif") { - this.resizeImage("data:" + response.headers["content-type"] + ";base64," + Buffer.from(body).toString("base64"), callback); + this.resizeImage("data:" + response.headers["content-type"] + ";base64," + btoa((new TextDecoder()).decode(body)), callback); } else callback(base64OrUrl); }); diff --git a/Plugins/SpellCheck/SpellCheck.plugin.js b/Plugins/SpellCheck/SpellCheck.plugin.js index f55f016ec6..bfe94eda57 100644 --- a/Plugins/SpellCheck/SpellCheck.plugin.js +++ b/Plugins/SpellCheck/SpellCheck.plugin.js @@ -2,7 +2,7 @@ * @name SpellCheck * @author DevilBro * @authorId 278543574059057154 - * @version 1.6.6 + * @version 1.6.7 * @description Adds a Spell Check to all Message Inputs. Select a Word and Right Click it to add it to your Dictionary * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -365,7 +365,7 @@ module.exports = (_ => { }; if (this.settings.general.downloadDictionary && BDFDB.LibraryRequires.fs.existsSync(filePath)) BDFDB.LibraryRequires.fs.readFile(filePath, "", (error, buffer) => { - parse(error, buffer, Buffer.from(buffer).toString(), false); + parse(error, buffer, (new TextDecoder()).decode(buffer), false); }); else BDFDB.LibraryRequires.request("https://mwittrien.github.io/BetterDiscordAddons/Plugins/SpellCheck/dic/" + lang + ".dic", (error, response, body) => { parse(error, response, body, this.settings.general.downloadDictionary); diff --git a/Plugins/ThemeRepo/ThemeRepo.plugin.js b/Plugins/ThemeRepo/ThemeRepo.plugin.js index fa2a329f8e..f8c8315362 100644 --- a/Plugins/ThemeRepo/ThemeRepo.plugin.js +++ b/Plugins/ThemeRepo/ThemeRepo.plugin.js @@ -2,7 +2,7 @@ * @name ThemeRepo * @author DevilBro * @authorId 278543574059057154 - * @version 2.5.0 + * @version 2.5.1 * @description Allows you to download all Themes from BD's Website within Discord * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien @@ -638,7 +638,7 @@ module.exports = (_ => { loadingToast.close(); BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LibraryStringsFormat("download_fail", `Theme "${this.props.data.name}"`), {type: "danger"}); } - else list.createThemeFile(this.props.data.name, this.props.data.rawSourceUrl.split("/").pop(), Buffer.from(buffer).toString(), autoloadKey).then(error2 => { + else list.createThemeFile(this.props.data.name, this.props.data.rawSourceUrl.split("/").pop(), (new TextDecoder()).decode(buffer), autoloadKey).then(error2 => { delete this.props.downloading; loadingToast.close(); if (!error2) { @@ -886,7 +886,7 @@ module.exports = (_ => { } BDFDB.DiscordUtils.requestFileData("https://mwittrien.github.io/BetterDiscordAddons/Plugins/ThemeRepo/_res/GeneratorList.txt", (error, buffer) => { - let body = !error && buffer && Buffer.from(buffer).toString(); + let body = !error && buffer && (new TextDecoder()).decode(buffer); if (body) for (let id of body.replace(/[\r\t]/g, "").split(" ").map(n => parseInt(n)).filter(n => n != null)) { let theme = grabbedThemes.find(t => t.id == id); if (theme) generatorThemes.push(theme); @@ -894,7 +894,7 @@ module.exports = (_ => { }); BDFDB.DiscordUtils.requestFileData(document.querySelector("head link[rel='stylesheet'][integrity]").href, (error, buffer) => { - let nativeCSS = !error && buffer && Buffer.from(buffer).toString(); + let nativeCSS = !error && buffer && (new TextDecoder()).decode(buffer); if (nativeCSS) { let theme = BDFDB.DiscordUtils.getTheme(); let vars = (nativeCSS.split(`.${theme}{`)[1] || "").split("}")[0]; @@ -922,7 +922,7 @@ module.exports = (_ => { BDFDB.DiscordUtils.requestFileData(theme.rawSourceUrl, (error, buffer) => { if (error || !buffer) theme.failed = true; else { - let body = Buffer.from(buffer).toString(); + let body = (new TextDecoder()).decode(buffer); if (body && body.indexOf("404: Not Found") != 0) { const META = body.split("*/")[0]; theme.name = BDFDB.StringUtils.upperCaseFirstChar((/@name\s+([^\t^\r^\n]+)|\/\/\**META.*["']name["']\s*:\s*["'](.+?)["']/i.exec(META) || []).filter(n => n)[1] || theme.name || ""); @@ -968,7 +968,7 @@ module.exports = (_ => { } }; - BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/themes", (error, response, body) => { + BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/themes", {bdVersion: true}, (error, response, body) => { if (!error && body && response.statusCode == 200) try { grabbedThemes = BDFDB.ArrayUtils.keySort(JSON.parse(body).filter(n => n), "name"); @@ -1033,7 +1033,7 @@ module.exports = (_ => { } checkForNewThemes () { - BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/themes", (error, response, body) => { + BDFDB.LibraryRequires.request("https://api.betterdiscord.app/v1/store/themes", {bdVersion: true}, (error, response, body) => { if (!error && body) try { if (JSON.parse(body).filter(n => n).length != grabbedThemes.length) { loading = {is: false, timeout: null, amount: 0};