141 lines
9.8 KiB
JavaScript
141 lines
9.8 KiB
JavaScript
//META{"name":"AccountDetailsPlus","displayName":"AccountDetailsPlus","website":"https://github.com/rauenzi/BetterDiscordAddons/tree/master/Plugins/AccountDetailsPlus","source":"https://raw.githubusercontent.com/rauenzi/BetterDiscordAddons/master/Plugins/AccountDetailsPlus/AccountDetailsPlus.plugin.js"}*//
|
|
|
|
var AccountDetailsPlus = (() => {
|
|
const config = {"info":{"name":"AccountDetailsPlus","authors":[{"name":"Zerebos","discord_id":"249746236008169473","github_username":"rauenzi","twitter_username":"ZackRauen"}],"version":"0.1.2","description":"Lets you view popout, nickname and more from your account panel at the bottom. Support Server: bit.ly/ZeresServer","github":"https://github.com/rauenzi/BetterDiscordAddons/tree/master/Plugins/AccountDetailsPlus","github_raw":"https://raw.githubusercontent.com/rauenzi/BetterDiscordAddons/master/Plugins/AccountDetailsPlus/AccountDetailsPlus.plugin.js"},"defaultConfig":[{"type":"category","id":"popout","name":"User Popout","collapsible":true,"shown":false,"settings":[{"type":"switch","id":"avatar","name":"Avatar","note":"Opens your popout when clicking your avatar.","value":true},{"type":"switch","id":"username","name":"Username","note":"Opens your popout when clicking your username.","value":true}]},{"type":"category","id":"statusPicker","name":"Status Picker","collapsible":true,"shown":false,"settings":[{"type":"switch","id":"avatar","name":"Avatar","note":"Opens your popout when right clicking your avatar.","value":true},{"type":"switch","id":"username","name":"Username","note":"Opens your popout when right clicking your username.","value":true}]},{"type":"category","id":"nickname","name":"Nickname","collapsible":true,"shown":false,"settings":[{"type":"dropdown","id":"showNickname","name":"Name Shown","value":true,"options":[{"label":"Username","value":false},{"label":"Nickname","value":true}]},{"type":"switch","id":"oppositeOnHover","name":"Opposite On Hover","note":"Shows the opposite on hover. e.g. if you are showing nickname, hovering will show your username.","value":true}]}],"changelog":[{"title":"Bugs Squashed","type":"fixed","items":["Fixed that one issue where it didn't work."]}],"main":"index.js"};
|
|
|
|
return !global.ZeresPluginLibrary ? class {
|
|
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() {window.BdApi.alert("Library Missing",`The library plugin needed for ${config.info.name} is missing.<br /><br /> <a href="https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js" target="_blank">Click here to download the library!</a>`);}
|
|
start() {}
|
|
stop() {}
|
|
} : (([Plugin, Api]) => {
|
|
const plugin = (Plugin, Api) => {
|
|
const {PluginUtilities, DiscordModules, DiscordSelectors, ReactTools, DOMTools} = Api;
|
|
return class AccountDetailsPlus extends Plugin {
|
|
constructor() {
|
|
super();
|
|
this.usernameCSS = `.container-iksrDt .nameTag-26T3kW { cursor: pointer; }`;
|
|
this.popoutOpen = false;
|
|
}
|
|
|
|
async onStart() {
|
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
this.FluxContainer = DiscordModules.UserPopout;
|
|
this.currentUser = DiscordModules.UserStore.getCurrentUser();
|
|
this.popoutWrapper = ReactTools.getReactProperty(document.querySelector(DiscordSelectors.AccountDetails.container + " .inner-1W0Bkn"), "return.return.return.return.return.return.return.stateNode");
|
|
this.originalRender = this.popoutWrapper.props.render;
|
|
|
|
this.activateShit();
|
|
}
|
|
|
|
onStop() {
|
|
this.popoutWrapper.props.render = this.originalRender;
|
|
PluginUtilities.removeStyle(this.getName() + "-css");
|
|
DOMTools.off(".AccountDetailsPlus");
|
|
this.saveSettings();
|
|
}
|
|
|
|
activateShit() {
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).off("." + this.getName());
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + " .inner-1W0Bkn").off("." + this.getName());
|
|
this.usernameCSS = DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag + "{ cursor: pointer; }";
|
|
PluginUtilities.removeStyle(this.getName() + "-css");
|
|
DOMTools.off(document, "mousemove." + this.getName());
|
|
document.querySelector(DiscordSelectors.AccountDetails.container.descend(".username")).textContent = this.currentUser.username;
|
|
|
|
if (this.settings.nickname.showNickname || this.settings.nickname.oppositeOnHover) {
|
|
DOMTools.on(document, "mousemove." + this.getName(), (e) => { this.adjustNickname(e); });
|
|
}
|
|
if (this.settings.popout.username) {
|
|
PluginUtilities.addStyle(this.getName() + "-css", this.usernameCSS);
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).on("mousedown." + this.getName(), () => { this.popoutOpen = this.popoutWrapper.state.isOpen; });
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).on("click." + this.getName(), (e) => { if (!this.popoutOpen) this.showUserPopout(e); });
|
|
}
|
|
if (this.settings.popout.avatar) {
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).on("mousedown." + this.getName(), () => { this.popoutOpen = this.popoutWrapper.state.isOpen; });
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + " .inner-1W0Bkn").on("click." + this.getName(), (e) => { if (!this.popoutOpen) this.showUserPopout(e); });
|
|
}
|
|
if (this.settings.statusPicker.username) {
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).on("mousedown." + this.getName(), () => { this.popoutOpen = this.popoutWrapper.state.isOpen; });
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + DiscordSelectors.AccountDetails.nameTag).on("contextmenu." + this.getName(), (e) => {
|
|
if (!this.popoutOpen) this.showStatusPicker(e);
|
|
});
|
|
}
|
|
if (this.settings.statusPicker.avatar) {
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + " .inner-1W0Bkn").on("mousedown." + this.getName(), () => { this.popoutOpen = this.popoutWrapper.state.isOpen; });
|
|
document.querySelector(DiscordSelectors.AccountDetails.container + " .inner-1W0Bkn").on("contextmenu." + this.getName(), (e) => {
|
|
if (!this.popoutOpen) this.showStatusPicker(e);
|
|
});
|
|
}
|
|
}
|
|
|
|
adjustNickname(e) {
|
|
if (!e || !e.target || !(e.target instanceof Element)) return;
|
|
let accountDetails = document.querySelector(DiscordSelectors.AccountDetails.container);
|
|
if (!accountDetails) return;
|
|
|
|
let isHovering = accountDetails.contains(e.target);
|
|
let nameElement = accountDetails.querySelector(".username");
|
|
|
|
let nick = DiscordModules.GuildMemberStore.getNick(DiscordModules.SelectedGuildStore.getGuildId(), this.currentUser.id);
|
|
nick = nick ? nick : this.currentUser.username;
|
|
|
|
if (isHovering && this.settings.nickname.oppositeOnHover) {
|
|
if (this.settings.nickname.showNickname) nameElement.textContent = this.currentUser.username;
|
|
else if (!this.settings.nickname.showNickname) nameElement.textContent = nick;
|
|
}
|
|
else {
|
|
if (this.settings.nickname.showNickname) nameElement.textContent = nick;
|
|
else nameElement.textContent = this.currentUser.username;
|
|
}
|
|
}
|
|
|
|
setRender(renderer, options = {}) {
|
|
this.popoutWrapper.props.render = renderer;
|
|
Object.assign(this.popoutWrapper.props, options);
|
|
}
|
|
|
|
showStatusPicker(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
this.setRender(this.originalRender, {position: "top-left", animationType: "spring"});
|
|
this.popoutWrapper.toggle(e);
|
|
}
|
|
|
|
showUserPopout(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
var element = document.querySelector(DiscordSelectors.AccountDetails.container);
|
|
// e.target = e.currentTarget = e.toElement = e.delegateTarget = document.querySelector(DiscordSelectors.AccountDetails.container);
|
|
this.setRender((props) => {
|
|
let guild = DiscordModules.SelectedGuildStore.getGuildId();
|
|
let channel = DiscordModules.SelectedChannelStore.getChannelId();
|
|
return DiscordModules.React.createElement(this.FluxContainer, Object.assign({}, props, {
|
|
user: this.currentUser,
|
|
guildId: guild,
|
|
channelId: channel
|
|
}));
|
|
}, {position: "top-left", animationType: "default"});
|
|
|
|
this.popoutWrapper.toggle(Object.assign({}, e, {
|
|
target: element,
|
|
toElement: element,
|
|
currentTarget: element,
|
|
delegateTarget: element
|
|
}));
|
|
}
|
|
|
|
getSettingsPanel() {
|
|
const panel = this.buildSettingsPanel();
|
|
panel.addListener(this.updateSettings.bind(this));
|
|
return panel.getElement();
|
|
}
|
|
|
|
};
|
|
};
|
|
return plugin(Plugin, Api);
|
|
})(global.ZeresPluginLibrary.buildPlugin(config));
|
|
})(); |