mirror of
https://github.com/EndPwnArchive/EndPwn3Plugins.git
synced 2024-08-14 23:57:06 +00:00
add settings api, move everything to proposed manifest format
This commit is contained in:
parent
a46ddb6c23
commit
e49c518ef3
12 changed files with 242 additions and 26 deletions
|
@ -10,10 +10,10 @@ bdwatcher = null, bdtag = null, setupCSS = function (n) {
|
||||||
}))
|
}))
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "dr1ft",
|
author: "dr1ft",
|
||||||
name: "BeautifulDiscord Port",
|
name: "BeautifulDiscord Port",
|
||||||
desc: "Allows CSS to be imported and updated on the fly."
|
description: "Allows CSS to be imported and updated on the fly."
|
||||||
},
|
},
|
||||||
exports.start = () => {
|
exports.start = () => {
|
||||||
if (fs.existsSync($api.data + 'style.css'))
|
if (fs.existsSync($api.data + 'style.css'))
|
||||||
|
|
|
@ -16,10 +16,10 @@ function setupCharCount() {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports = {
|
exports = {
|
||||||
meta: {
|
manifest: {
|
||||||
author: "Cynosphere",
|
author: "Cynosphere",
|
||||||
name: "Character Counter",
|
name: "Character Counter",
|
||||||
desc: "Counts characters in the chatbox."
|
description: "Counts characters in the chatbox."
|
||||||
},
|
},
|
||||||
start: function(){
|
start: function(){
|
||||||
let charcount_mo = new MutationObserver(setupCharCount);
|
let charcount_mo = new MutationObserver(setupCharCount);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "Cynosphere, Jiiks",
|
author: "Cynosphere, Jiiks",
|
||||||
name: "Double Click Edit",
|
name: "Double Click Edit",
|
||||||
desc: "Double click messages to edit them."
|
description: "Double click messages to edit them."
|
||||||
}
|
}
|
||||||
exports.start = function(){
|
exports.start = function(){
|
||||||
document.addEventListener("dblclick", ev => {
|
document.addEventListener("dblclick", ev => {
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
exportsexports = {
|
exportsexports = {
|
||||||
meta: {
|
manifest: {
|
||||||
author: "Cynosphere, Adryd",
|
author: "Cynosphere, Adryd",
|
||||||
name: "Mentions Fixer",
|
name: "Mentions Fixer",
|
||||||
desc: "See hidden channel mentions and remove #deleted-channel."
|
description: "See hidden channel mentions and remove #deleted-channel."
|
||||||
},
|
},
|
||||||
replacements: {
|
replacements: {
|
||||||
'/t\\.type===(.+)\\.ChannelTypes\\.GUILD_TEXT&&(.+)\\.default\\.can\\((.+)\\.Permissions\\.VIEW_CHANNEL,n,t\\)/':'true',
|
'/t\\.type===(.+)\\.ChannelTypes\\.GUILD_TEXT&&(.+)\\.default\\.can\\((.+)\\.Permissions\\.VIEW_CHANNEL,n,t\\)/':'true',
|
||||||
'/"#deleted-channel"/':'"<#"+e[1]+">"',
|
'/"#deleted-channel"/':'"<#"+e[1]+">"',
|
||||||
'/"@deleted-role"/':'"<@&"+e[1]+">"',
|
'/"@deleted-role"/':'"<@&"+e[1]+">"',
|
||||||
'/guildId:null!=t\\?t\\.guild_id:null,/':'guildId:null!=t.guild_id?t.guild_id:"@me",',
|
'/guildId:null!=t\\?t\\.guild_id:null,/':'guildId:null!=t.guild_id?t.guild_id:"@me",'
|
||||||
'/"#deleted-channel"/':'"<#"+e[1]+">"'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -39,10 +39,10 @@ function scCSS() {
|
||||||
document.body.appendChild(css);
|
document.body.appendChild(css);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "Cynosphere",
|
author: "Cynosphere",
|
||||||
name: "Guild Count",
|
name: "Guild Count",
|
||||||
desc: "Shows guild count under online count."
|
description: "Shows guild count under online count."
|
||||||
}
|
}
|
||||||
exports.start = () => {
|
exports.start = () => {
|
||||||
scCSS();
|
scCSS();
|
||||||
|
|
|
@ -3,10 +3,10 @@ IMGXIS made by YellowAfterlife. http://yellowafterlife.itch.io/imgxis (mirror: h
|
||||||
Ported by Jane (maybejane/statefram) and Cynthia (BoxOfFlex/Cynosphere) to a private client mod.
|
Ported by Jane (maybejane/statefram) and Cynthia (BoxOfFlex/Cynosphere) to a private client mod.
|
||||||
Re-ported by Cynthia to EndPwn.
|
Re-ported by Cynthia to EndPwn.
|
||||||
*/
|
*/
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "Cynosphere, YellowAfterlife",
|
author: "Cynosphere, YellowAfterlife",
|
||||||
name: "IMGXIS",
|
name: "IMGXIS",
|
||||||
desc: "A better way to view images."
|
description: "A better way to view images."
|
||||||
}
|
}
|
||||||
exports.start = function(){
|
exports.start = function(){
|
||||||
var globalPanner;
|
var globalPanner;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
exports = {
|
exports = {
|
||||||
meta: {
|
manifest: {
|
||||||
author: "Cynosphere, Adryd",
|
author: "Cynosphere",
|
||||||
name: "Restore Local Storage",
|
name: "Restore Local Storage",
|
||||||
desc: "Restore window.localStorage."
|
description: "Restore window.localStorage."
|
||||||
},
|
},
|
||||||
replacements: {
|
replacements: {
|
||||||
'try{delete window.localStorage}catch(e){}':''
|
'try{delete window.localStorage}catch(e){}':''
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "dr1ft",
|
author: "dr1ft",
|
||||||
name: "Notification Sound Replacer",
|
name: "Notification Sound Replacer",
|
||||||
desc: "Replaces notification sound with an unused sound thats nicer."
|
description: "Replaces notification sound with an unused sound thats nicer."
|
||||||
}
|
}
|
||||||
exports.start = function(){
|
exports.start = function(){
|
||||||
var s = wc.findFunc('playSound')[1].exports;
|
var s = wc.findFunc('playSound')[1].exports;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
exportsexports = {
|
exportsexports = {
|
||||||
meta: {
|
manifest: {
|
||||||
author: "Cynosphere, janeptrv",
|
author: "Cynosphere, janeptrv",
|
||||||
name: "osu! Typing",
|
name: "osu! Typing",
|
||||||
desc: "Adds typing sounds from osu!."
|
description: "Adds typing sounds from osu!."
|
||||||
},
|
},
|
||||||
start: function(){
|
start: function(){
|
||||||
var sounds = [];
|
var sounds = [];
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
exports.meta = {
|
exports.manifest = {
|
||||||
author: "BlockBuilder57, Cynosphere",
|
author: "Adryd, BlockBuilder57, Cynosphere",
|
||||||
name: "Sailboat",
|
name: "Sailboat",
|
||||||
desc: "Login as bot accounts."
|
description: "Login as bot accounts."
|
||||||
}
|
}
|
||||||
exports.replacements = {
|
exports.replacements = {
|
||||||
'/i.default.Store.pauseEmittingChanges\\(\\),t.user.bot/':'false',
|
'/i.default.Store.pauseEmittingChanges\\(\\),t.user.bot/':'false',
|
||||||
|
|
217
plugins/settingsapi.js
Normal file
217
plugins/settingsapi.js
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
//Stolen from StackOverflow :^)
|
||||||
|
let convertToText = function(obj) {
|
||||||
|
var string = [];
|
||||||
|
|
||||||
|
if (obj == undefined) {
|
||||||
|
return String(obj);
|
||||||
|
} else if (typeof(obj) == "object" && (obj.join == undefined)) {
|
||||||
|
for (prop in obj) {
|
||||||
|
if (obj.hasOwnProperty(prop))
|
||||||
|
string.push(prop + ": " + convertToText(obj[prop]));
|
||||||
|
};
|
||||||
|
return "{" + string.join(",") + "}";
|
||||||
|
} else if (typeof(obj) == "object" && !(obj.join == undefined)) {
|
||||||
|
for(prop in obj) {
|
||||||
|
string.push(convertToText(obj[prop]));
|
||||||
|
}
|
||||||
|
return "[" + string.join(",") + "]";
|
||||||
|
} else if (typeof(obj) == "function") {
|
||||||
|
string.push(obj.toString())
|
||||||
|
} else {
|
||||||
|
string.push(JSON.stringify(obj))
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
exports = {
|
||||||
|
manifest: {
|
||||||
|
author: "Cynosphere, BlockBuilder57",
|
||||||
|
name: "Settings API",
|
||||||
|
description: "Hijack the settings menu in any way you feel."
|
||||||
|
},
|
||||||
|
replacements: {
|
||||||
|
'/function z\\(\\){return\\[{(.+)}]}/':'window.$settingsapi={sections:[{$1}]};function z(){return window.$settingsapi.sections;}',
|
||||||
|
},
|
||||||
|
start: function(){
|
||||||
|
var buttons = $api.util.findFuncExports('button-', 'colorBlack');
|
||||||
|
var checkboxes = $api.util.findFuncExports('checkboxEnabled');
|
||||||
|
var misc = $api.util.findFuncExports('statusRed-', 'inputDefault');
|
||||||
|
var misc2 = $api.util.findFuncExports('multiInputField');
|
||||||
|
var headers = $api.util.findFuncExports('h5-', 'h5');
|
||||||
|
|
||||||
|
var panels = wc.findFunc('flexChild-')[0].exports;
|
||||||
|
var panels2 = $api.util.findFuncExports('errorMessage-', 'inputWrapper');
|
||||||
|
|
||||||
|
let sections = window.$settingsapi.sections;
|
||||||
|
|
||||||
|
window.$settingsapi = {
|
||||||
|
sections: sections,
|
||||||
|
ourSections: [],
|
||||||
|
_callbacks: {},
|
||||||
|
_panels: {},
|
||||||
|
addSection: function(name,label,callback,color){
|
||||||
|
let data = {};
|
||||||
|
|
||||||
|
data.section = name || `SAPI_${Math.floor(Math.random()*10000)}`;
|
||||||
|
data.label = label;
|
||||||
|
data.color = color || undefined;
|
||||||
|
data.element = $api.util.findConstructor('FormSection', 'FormSection').FormSection;
|
||||||
|
|
||||||
|
$settingsapi.ourSections.push(data);
|
||||||
|
$settingsapi.sections.splice($settingsapi.sections.length-4,0,data);
|
||||||
|
$settingsapi._callbacks[name] = callback;
|
||||||
|
},
|
||||||
|
exportSections: function(){
|
||||||
|
let out = "";
|
||||||
|
|
||||||
|
for(i in $settingsapi._sections){
|
||||||
|
out = out + convertToText($settingsapi._sections[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
},
|
||||||
|
//All of these allow us to use Discord's elements.
|
||||||
|
elements: {
|
||||||
|
createVerticalPanel: function() {
|
||||||
|
return createElement("div")
|
||||||
|
.withClass(panels2.vertical, 'epButtonPanel')
|
||||||
|
},
|
||||||
|
createHorizontalPanel: function() {
|
||||||
|
return createElement("div")
|
||||||
|
.withClass(panels.horizontal, 'epButtonPanel')
|
||||||
|
},
|
||||||
|
createButton: function(name) {
|
||||||
|
return createElement('button')
|
||||||
|
.withContents(name)
|
||||||
|
.withClass(
|
||||||
|
buttons.button,
|
||||||
|
buttons.lookFilled,
|
||||||
|
buttons.colorBrand,
|
||||||
|
buttons.sizeSmall,
|
||||||
|
buttons.grow,
|
||||||
|
'epMargin'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
createWarnButton: function(name) {
|
||||||
|
return createElement('button')
|
||||||
|
.withContents(name)
|
||||||
|
.withClass(
|
||||||
|
buttons.button,
|
||||||
|
buttons.lookOutlined,
|
||||||
|
buttons.colorYellow,
|
||||||
|
buttons.sizeSmall,
|
||||||
|
buttons.grow,
|
||||||
|
'epMargin'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
createDangerButton: function(name) {
|
||||||
|
return createElement('button')
|
||||||
|
.withContents(name)
|
||||||
|
.withClass(
|
||||||
|
buttons.button,
|
||||||
|
buttons.lookOutlined,
|
||||||
|
buttons.colorRed,
|
||||||
|
buttons.sizeSmall,
|
||||||
|
buttons.grow,
|
||||||
|
'epMargin'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
createH2: function(text) {
|
||||||
|
return createElement("h2")
|
||||||
|
.withClass(
|
||||||
|
headers.h2,
|
||||||
|
headers.title,
|
||||||
|
headers.size16,
|
||||||
|
headers.height20,
|
||||||
|
headers.weightSemiBold,
|
||||||
|
headers.defaultColor,
|
||||||
|
'epMargin'
|
||||||
|
)
|
||||||
|
.withText(text);
|
||||||
|
},
|
||||||
|
createH5: function(text) {
|
||||||
|
return createElement("h5")
|
||||||
|
.withClass(
|
||||||
|
headers.h5,
|
||||||
|
headers.title,
|
||||||
|
headers.size12,
|
||||||
|
headers.height16,
|
||||||
|
headers.weightSemiBold
|
||||||
|
)
|
||||||
|
.withText(text);
|
||||||
|
},
|
||||||
|
createInput: function(v) {
|
||||||
|
return createElement("input")
|
||||||
|
.withClass(
|
||||||
|
misc.inputDefault,
|
||||||
|
misc.input,
|
||||||
|
misc.size16,
|
||||||
|
'epMargin'
|
||||||
|
)
|
||||||
|
.modify(x => x.value = v)
|
||||||
|
},
|
||||||
|
updateSwitch: function(s, w) {
|
||||||
|
if (s.checked) {
|
||||||
|
w.classList.remove(checkboxes.valueUnchecked.split(' ')[0]);
|
||||||
|
w.classList.add(checkboxes.valueChecked.split(' ')[0])
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
w.classList.remove(checkboxes.valueChecked.split(' ')[0]);
|
||||||
|
w.classList.add(checkboxes.valueUnchecked.split(' ')[0])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
createSwitch: function(c, i) {
|
||||||
|
if (c === undefined) c = () => { };
|
||||||
|
if (i === undefined) i = false;
|
||||||
|
var s, w = createElement('div')
|
||||||
|
.withClass(
|
||||||
|
checkboxes.switch,
|
||||||
|
checkboxes.switchEnabled,
|
||||||
|
checkboxes.size,
|
||||||
|
checkboxes.sizeDefault,
|
||||||
|
checkboxes.themeDefault
|
||||||
|
)
|
||||||
|
.withChildren(
|
||||||
|
s = createElement("input")
|
||||||
|
.withClass(
|
||||||
|
checkboxes.checkbox,
|
||||||
|
checkboxes.checkboxEnabled
|
||||||
|
)
|
||||||
|
.modify(x => x.type = 'checkbox')
|
||||||
|
.modify(x => x.checked = i)
|
||||||
|
.modify(x => x.onchange = () => {
|
||||||
|
updateSwitch(s, w);
|
||||||
|
c(s.checked);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
$settingsapi.elements.updateSwitch(s, w);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Example settings tab
|
||||||
|
/*$settingsapi.addSection("TESTING","test owo",function(pnl){
|
||||||
|
$settingsapi.elements.createH2("Hello World!").appendTo(pnl);
|
||||||
|
});*/
|
||||||
|
|
||||||
|
$api.events.hook("USER_SETTINGS_MODAL_SET_SECTION", function(e){
|
||||||
|
if ($settingsapi._panels[e.section]) $settingsapi._panels[e.section].remove();
|
||||||
|
|
||||||
|
for(let i in $settingsapi.ourSections){
|
||||||
|
let data = $settingsapi.ourSections[i];
|
||||||
|
if(e.section == data.section){
|
||||||
|
var pane = $(".content-column.default");
|
||||||
|
if (!pane) return;
|
||||||
|
|
||||||
|
$settingsapi._panels[data.section] = createElement('div')
|
||||||
|
.withClass('flex-vertical')
|
||||||
|
.appendTo(pane);
|
||||||
|
|
||||||
|
$settingsapi._callbacks[data.section]($settingsapi._panels[data.section]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
exports = {
|
exports = {
|
||||||
meta: {
|
manifest: {
|
||||||
author: "Cynosphere",
|
author: "Cynosphere",
|
||||||
name: "Spotify Premium Spoof",
|
name: "Spotify Premium Spoof",
|
||||||
desc: "Spoofs premium check and allows listen along without premium."
|
description: "Spoofs premium check and allows listen along without premium."
|
||||||
},
|
},
|
||||||
replacements: {
|
replacements: {
|
||||||
'r.isPremium=n':'r.isPremium=true'
|
'r.isPremium=n':'r.isPremium=true'
|
||||||
|
|
Loading…
Reference in a new issue