Created
June 29, 2021 19:59
-
-
Save EliTheCoder/a8e42f5031d9c4bdc4b1219e0ac5b28f to your computer and use it in GitHub Desktop.
A BetterDiscord plugin that converts x-system to circumflexes in Esperanto
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @name Esperantigi | |
*/ | |
/*@cc_on | |
@if (@_jscript) | |
// Offer to self-install for clueless users that try to run this directly. | |
var shell = WScript.CreateObject("WScript.Shell"); | |
var fs = new ActiveXObject("Scripting.FileSystemObject"); | |
var pathPlugins = shell.ExpandEnvironmentStrings("%APPDATA%\BetterDiscord\plugins"); | |
var pathSelf = WScript.ScriptFullName; | |
// Put the user at ease by addressing them in the first person | |
shell.Popup("It looks like you've mistakenly tried to run me directly. \n(Don't do that!)", 0, "I'm a plugin for BetterDiscord", 0x30); | |
if (fs.GetParentFolderName(pathSelf) === fs.GetAbsolutePathName(pathPlugins)) { | |
shell.Popup("I'm in the correct folder already.", 0, "I'm already installed", 0x40); | |
} else if (!fs.FolderExists(pathPlugins)) { | |
shell.Popup("I can't find the BetterDiscord plugins folder.\nAre you sure it's even installed?", 0, "Can't install myself", 0x10); | |
} else if (shell.Popup("Should I copy myself to BetterDiscord's plugins folder for you?", 0, "Do you need some help?", 0x34) === 6) { | |
fs.CopyFile(pathSelf, fs.BuildPath(pathPlugins, fs.GetFileName(pathSelf)), true); | |
// Show the user where to put plugins in the future | |
shell.Exec("explorer " + pathPlugins); | |
shell.Popup("I'm installed!", 0, "Successfully installed", 0x40); | |
} | |
WScript.Quit(); | |
@else@*/ | |
module.exports = (() => { | |
const config = {"info":{"name":"Esperantigi","authors":[{"name":"EliTheCoder","discord_id":"470935011722395651","github_username":"EliTheCoder","twitter_username":"EliTheCoder"}],"version":"0.0.3","description":"Converts x-system into circumflexes"},"changelog":[],"main":"index.js"}; | |
return !global.ZeresPluginLibrary ? class { | |
constructor() {this._config = config;} | |
getName() {return config.info.name;} | |
getAuthor() {return config.info.authors.map(a => a.name).join(", ");} | |
getDescription() {return config.info.description;} | |
getVersion() {return config.info.version;} | |
load() { | |
BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.info.name} is missing. Please click Download Now to install it.`, { | |
confirmText: "Download Now", | |
cancelText: "Cancel", | |
onConfirm: () => { | |
require("request").get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", async (error, response, body) => { | |
if (error) return require("electron").shell.openExternal("https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js"); | |
await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r)); | |
}); | |
} | |
}); | |
} | |
start() {} | |
stop() {} | |
} : (([Plugin, Api]) => { | |
const plugin = (Plugin, Library) => { | |
const {Logger, Patcher, Settings, DiscordAPI} = Library; | |
return class Esperantigi extends Plugin { | |
constructor() { | |
super(); | |
} | |
onStart() { | |
Logger.log("Started"); | |
Patcher.before(BdApi.findModuleByProps("sendMessage"), "sendMessage", (a, b) => {b[1].content = this.convert(b[1].content)}) | |
} | |
onStop() { | |
Logger.log("Stopped"); | |
Patcher.unpatchAll(); | |
} | |
convert(input) { | |
const circumflexes = { | |
"c": "ĉ", | |
"g": "ĝ", | |
"h": "ĥ", | |
"j": "ĵ", | |
"s": "ŝ", | |
"u": "ŭ" | |
} | |
for (let [a,b] of Object.entries(circumflexes)) { | |
circumflexes[a.toUpperCase()] = b.toUpperCase() | |
} | |
for (let [a,b] of Object.entries(circumflexes)) { | |
input = input.replace(new RegExp(`${a}x|${a}X`, "g"), b) | |
} | |
return input; | |
} | |
}; | |
}; | |
return plugin(Plugin, Api); | |
})(global.ZeresPluginLibrary.buildPlugin(config)); | |
})(); | |
/*@end@*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment