Files
arindOS/dotfiles/.config/BetterDiscord/plugins/DisplayUsernames.plugin.js
T

289 lines
8.2 KiB
JavaScript

/**
* @name DisplayUsernames
* @author HG
* @authorId 124667638298181632
* @authorLink https://youtube.com/HudsonGTV
* @description Displays Discord handle next to display names in chat and adds '@' symbol in profile cards.
* @version 1.4.2
* @website https://hudsongreen.com/
* @invite H3bebA97tV
* @donate https://www.paypal.com/donate/?business=REFHYLZAZUWHJ
* @source https://github.com/HudsonGTV/BetterDiscordPlugins/blob/main/DisplayUsernames/DisplayUsernames.plugin.js
*/
const request = require("request");
const fs = require("fs");
const path = require("path");
const config = {
info: {
name: "DisplayUsernames",
authors: [
{
name: "HG",
discord_id: "124667638298181632",
github_username: "HudsonGTV",
twitter_username: "HudsonKazuto"
}
],
version: "1.4.2",
description: "Displays Discord handle next to display names in chat and adds '`@`' symbol in profile cards.",
github: "https://github.com/HudsonGTV/BetterDiscordPlugins/blob/main/DisplayUsernames/DisplayUsernames.plugin.js",
github_raw: "https://raw.githubusercontent.com/HudsonGTV/BetterDiscordPlugins/main/DisplayUsernames/DisplayUsernames.plugin.js"
},
changelog: [
{
title: "Fixes",
type: "fixed",
items: [
"`[1.4.2]` Fixed bug with usernames appearing in command replies",
"`[1.4.1]` Fixed bug with seperator symbol in replies",
"`[1.4.0]` Fixed username prefix not appearing due to recent Discord revamp.",
"`[1.4.0]` Fixed bug with username handle in chat being black with certain themes."
]
},
{
title: "Additions",
type: "added",
items: [
"`[1.4.2]` Added ability to hide the username in replies.",
"`[1.4.1]` Added ability to change seperator color seperately.",
"`[1.4.0]` Added ability to change username handle color in chat."
]
},
/*{
title: "Improvements",
type: "improved",
items: [
"`[1.2.0]` Settings now apply without the need to restart Discord (Except handle symbol changes)."
]
}*/
],
defaultConfig: [
{
type: "textbox",
id: "handlesymbol",
name: "[Needs restart to fully apply] Username Handle Prefix Symbol",
note: "The symbol used as a prefix for usernames (the @ in @username).",
placeholder: "Blank for none; default: @",
value: "@"
},
{
type: "color",
id: "usernamecolor",
name: "Username Color",
note: "The color used when displaying the username in the chat",
value: "#949BA4"
},
{
type: "color",
id: "seperatorcolor",
name: "Seperator Color",
note: "The color used for the symbol that either seperates the username from the message timestamp (@username • timestamp) or the suffix in replies (@username: message)",
value: "#949BA4"
},
{
type: "switch",
id: "usernamechat",
name: "Show Username In Chat",
note: "Display the message author's username next to the message timestamp.",
value: true
},
{
type: "switch",
id: "showinreplies",
name: "Show Username in Chat Replies",
note: "Shows the username in the replied message text.",
value: true
},
{
type: "switch",
id: "profilecard",
name: "Show Handle Prefix In Profile Card & Friends List",
note: "Display the username handle prefix in profile cards/popups as well as the friends list.",
value: true
},
{
type: "switch",
id: "friendslist",
name: "Always Show Friends List Username",
note: "Force Discord to always display usernames next to display names in friends list. Turn off for default Discord behavior (only show on hover).",
value: true
}
]
};
module.exports = !global.ZeresPluginLibrary ? class {
constructor() {
this._config = config;
}
load() {
BdApi.showConfirmationModal("Library plugin is needed",
`The library plugin needed for ZeresPluginLibrary is missing. Please click Download Now to install it.`, {
confirmText: "Download",
cancelText: "Cancel",
onConfirm: () => {
request.get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", (error, response, body) => {
if (error)
return electron.shell.openExternal("https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js");
fs.writeFileSync(path.join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body);
});
}
});
}
start() { }
stop() { }
} : (([Plugin, Library]) => {
const { DiscordModules, WebpackModules, Patcher, PluginUtilities } = Library;
const { React } = DiscordModules;
class plugin extends Plugin {
constructor() {
super();
}
onStart() {
// Apply CSS Styles
this.applyStyles();
// Bind usernames if enabled
if(this.settings.usernamechat) this.applyUsername();
}
onStop() {
Patcher.unpatchAll();
this.removeStyles();
}
// Manage settings panel
getSettingsPanel() {
const panel = this.buildSettingsPanel();
// Listen for changes in settings
panel.addListener((id, val) => {
switch(id) {
case "usernamechat":
// Check bool val
if(val)
this.applyUsername();
else
Patcher.unpatchAll(); // Change this if I add more patches to plugin
break;
case "showinreplies":
case "usernamecolor":
case "seperatorcolor":
case "profilecard":
case "friendslist":
// Reload CSS
this.removeStyles();
this.applyStyles();
break;
default:
break;
}
});
// Display settings panel
return panel.getElement();
}
applyStyles() {
// Chat message username styles (required - configured via applyUsername())
PluginUtilities.addStyle(
"DisplayUsernames-ChatMessage",
`
/* style username in messages */
.hg-username-handle {
margin-left: 0.25rem;
font-size: 0.75rem;
color: ${this.settings.usernamecolor};
}
/* seperator dot */
.hg-username-handle::after {
margin-left: 0.5rem;
content: "•";
color: ${this.settings.seperatorcolor};
}
/* fix timestamp margin (discord likes to change it randomly) */
.roleDot_c01716, .cozy_f5c119 .headerText_f47574, .compact__54ecc .headerText_f47574 {
margin-right: 0 !important;
}
/* hide username in command replies */
.repliedMessage_f9f2ca > .hg-username-handle {
display: none;
}
/* but dont hide handle in normal replies if user wants them visible */
[id*="message-reply-context-"] > .hg-username-handle {
margin-left: 0;
display: ${this.settings.showinreplies ? "inline" : "none"};
}
/* change seperator in replies */
[id*="message-reply-context-"] > .hg-username-handle::after {
margin-left: 0;
content: ": ";
}
`
);
// Display handle symbol infront of username in profile card/friends list
if(this.settings.profilecard) PluginUtilities.addStyle(
"DisplayUsernames-ProfileCard",
`
/* display handle symbol infront of username */
span.userTagUsername_c32acf::before, /* profile cards */
span.discriminator_f3939d::before /* friends list */ {
color: #777;
content: "${this.settings.handlesymbol}";
}
`
);
// Always display usernames in friends list
if(this.settings.friendslist) PluginUtilities.addStyle(
"DisplayUsernames-FriendsList",
`
/* always show username in friends list */
.discriminator_f3939d {
visibility: visible !important;
}
`
);
}
removeStyles() {
PluginUtilities.removeStyle("DisplayUsernames-ChatMessage");
PluginUtilities.removeStyle("DisplayUsernames-ProfileCard");
PluginUtilities.removeStyle("DisplayUsernames-FriendsList");
}
applyUsername() {
const [ module, key ] = BdApi.Webpack.getWithKey(BdApi.Webpack.Filters.byStrings("userOverride", "withMentionPrefix"), { searchExports: false });
Patcher.after(module, key, (_, args, ret) => {
let author = args[0].message.author;
let discrim = author.discriminator;
// Ensure this is not a webhook or system message
if(discrim != "0000")
ret.props.children.push(
React.createElement("span", { class: "hg-username-handle" }, this.settings.handlesymbol + author.username + (discrim != "0" ? "#" + discrim : ""))
);
});
}
}
return plugin;
})(global.ZeresPluginLibrary.buildPlugin(config));