This commit is contained in:
Mirco Wittrien 2023-04-19 15:54:16 +02:00
parent ae30ab366c
commit 2377fd0cbb
2 changed files with 128 additions and 32 deletions

View File

@ -45,7 +45,33 @@
"center": "toastscenter", "center": "toastscenter",
"left": "toastsleft", "left": "toastsleft",
"right": "toastsright" "right": "toastsright"
} },
"UserBadges": {
"active_developer": "6bdc42827a38498929a4920da12695d9",
"bot_commands": "6f9e37f9029ff57aef81db857890005e",
"bug_hunter_lvl1": "2717692c7dca7289b35297368a940dd0",
"bug_hunter_lvl2": "848f79194d4be5ff5f81505cbd0ce1e6",
"certified_moderator": "fee1624003e2fee35cb398e125dc479b",
"guild_booster_lvl1": "51040c70d4f20a921ad6674ff86fc95c",
"guild_booster_lvl2": "0e4080d1d333bc7ad29ef6528b6f2fb7",
"guild_booster_lvl3": "72bed924410c304dbe3d00a6e593ff59",
"guild_booster_lvl4": "df199d2050d3ed4ebf84d64ae83989f8",
"guild_booster_lvl5": "996b3e870e8a22ce519b3a50e6bdd52f",
"guild_booster_lvl6": "991c9f39ee33d7537d9f408c3e53141e",
"guild_booster_lvl7": "cb3ae83c15e970e8f3d410bc62cb8b99",
"guild_booster_lvl8": "7142225d31238f6387d9f09efaa02759",
"guild_booster_lvl9": "ec92202290b48d0879b7413d2dde3bab",
"hypesquad": "bf01d1073931f921909045f3a39fd264",
"hypesquad_house_1": "8a88d63823d8a71cd5e390baa45efa02",
"hypesquad_house_2": "011940fd013da3f7fb926e4a1cd2e618",
"hypesquad_house_3": "3aa41de486fa12454c3761e8e223442e",
"partner": "3f9748e53446a137a052f3454e2de41e",
"premium": "2ba85e8026a8614b640c2837bcdfe21b",
"premium_early_supporter": "7060786766c9c840eb3019e725d2b358",
"staff": "5e74e9b61934fc1f67c65515d1f7e60d",
"verified_developer": "6df5892e0f35b051f8b61eace34f4967"
},
"UserPremiumLevels": {"1": 1, "2": 2, "3": 3, "4": 6, "5": 9, "6": 12, "7": 15, "8": 18, "9": 24}
}, },
"DiscordConstants": { "DiscordConstants": {
"ActivityTypes": ["STREAMING", "LISTENING", "CUSTOM_STATUS"], "ActivityTypes": ["STREAMING", "LISTENING", "CUSTOM_STATUS"],
@ -73,7 +99,6 @@
"ReadStateTypes": ["GUILD_EVENT", "NOTIFICATION_CENTER", "CHANNEL"], "ReadStateTypes": ["GUILD_EVENT", "NOTIFICATION_CENTER", "CHANNEL"],
"RelationshipTypes": ["FRIEND", "PENDING_INCOMING", "PENDING_OUTGOING"], "RelationshipTypes": ["FRIEND", "PENDING_INCOMING", "PENDING_OUTGOING"],
"Routes": ["CHANNEL_THREAD_VIEW", "MESSAGE_REQUESTS"], "Routes": ["CHANNEL_THREAD_VIEW", "MESSAGE_REQUESTS"],
"UserBadges": ["HYPESQUAD", "GUILD_BOOSTER_LEVEL_1", "STAFF"],
"UserFlags": ["MFA_SMS", "VERIFIED_BOT"], "UserFlags": ["MFA_SMS", "VERIFIED_BOT"],
"UserNotificationSettings": ["NULL", "NO_MESSAGES", "ALL_MESSAGES"], "UserNotificationSettings": ["NULL", "NO_MESSAGES", "ALL_MESSAGES"],
"UserSettingsActionTypes": ["SLOW_USER_ACTION", "DAILY"], "UserSettingsActionTypes": ["SLOW_USER_ACTION", "DAILY"],
@ -125,7 +150,7 @@
"saveGuildFolders": ["guildFolders"] "saveGuildFolders": ["guildFolders"]
}}, }},
"GuildBoostUtils": {"strings": ["getPremiumTypeSubscription", "PREMIUM_GUILD_TIER_1"], "exported": false, "value": "exports", "map": { "GuildBoostUtils": {"strings": ["getPremiumTypeSubscription", "PREMIUM_GUILD_TIER_1"], "exported": false, "value": "exports", "map": {
"getUserLevel": ["\"months\"", "next"] "getUserLevel": ["\"months\"", "diff"]
}}, }},
"GuildNotificationsUtils": {"props": ["updateChannelOverrideSettings", "updateGuildNotificationSettings"]}, "GuildNotificationsUtils": {"props": ["updateChannelOverrideSettings", "updateGuildNotificationSettings"]},
"GuildUtils": {"props": ["selectGuild", "transitionToGuildSync"]}, "GuildUtils": {"props": ["selectGuild", "transitionToGuildSync"]},

View File

@ -2,7 +2,7 @@
* @name ShowBadgesInChat * @name ShowBadgesInChat
* @author DevilBro * @author DevilBro
* @authorId 278543574059057154 * @authorId 278543574059057154
* @version 1.9.6 * @version 1.9.7
* @description Displays Badges (Nitro, Hypesquad, etc...) in the Chat/MemberList/DMList * @description Displays Badges (Nitro, Hypesquad, etc...) in the Chat/MemberList/DMList
* @invite Jx3TjNS * @invite Jx3TjNS
* @donate https://www.paypal.me/MircoWittrien * @donate https://www.paypal.me/MircoWittrien
@ -58,10 +58,20 @@ module.exports = (_ => {
} : (([Plugin, BDFDB]) => { } : (([Plugin, BDFDB]) => {
var _this; var _this;
var badgeConfigs = {}, loadedUsers = {}, queuedInstances = {}, requestQueue = {queue: [], timeout: null, id: null}, cacheTimeout; var badgeConfigs = {}, loadedUsers = {}, queuedInstances = {}, requestQueue = {queue: [], timeout: null, id: null}, cacheTimeout;
var specialFlag;
const places = ["chat", "memberList", "dmsList"]; const places = ["chat", "memberList", "dmsList"];
const userBadgeFlagNameMap = {
"BOT_HTTP_INTERACTIONS": "bot_commands",
"HYPESQUAD_ONLINE_HOUSE_1": "hypesquad_house_1",
"HYPESQUAD_ONLINE_HOUSE_2": "hypesquad_house_2",
"HYPESQUAD_ONLINE_HOUSE_3": "hypesquad_house_3",
"bot_commands": "BOT_HTTP_INTERACTIONS",
"hypesquad_house_1": "HYPESQUAD_ONLINE_HOUSE_1",
"hypesquad_house_2": "HYPESQUAD_ONLINE_HOUSE_2",
"hypesquad_house_3": "HYPESQUAD_ONLINE_HOUSE_3"
};
const badges = {}; const badges = {};
const indicators = { const indicators = {
@ -72,8 +82,6 @@ module.exports = (_ => {
onLoad () { onLoad () {
_this = this; _this = this;
specialFlag = BDFDB.NumberUtils.generateId() + "SPECIALFLAG";
this.modulePatches = { this.modulePatches = {
after: [ after: [
"MemberListItem", "MemberListItem",
@ -83,10 +91,10 @@ module.exports = (_ => {
] ]
}; };
for (let key of Object.keys(BDFDB.DiscordConstants.UserBadges).filter(n => isNaN(parseInt(n)))) { for (let key in BDFDB.DiscordConstants.UserBadges) {
let basicKey = key.replace(/_LEVEL_\d+/g, ""); let basicKey = key.replace(/_lvl\d+/g, "");
if (!badges[basicKey]) badges[basicKey] = {value: true, keys: []}; if (!badges[basicKey]) badges[basicKey] = {value: true, keys: []};
badges[basicKey].keys.push(BDFDB.DiscordConstants.UserBadges[key]); badges[basicKey].keys.push(key);
} }
this.css = ` this.css = `
@ -99,6 +107,7 @@ module.exports = (_ => {
margin: 0 0 0 4px; margin: 0 0 0 4px;
padding: 0; padding: 0;
user-select: none; user-select: none;
pointer-events: none !important;
} }
${BDFDB.dotCN._showbadgesinchatbadges} > * { ${BDFDB.dotCN._showbadgesinchatbadges} > * {
margin: 0; margin: 0;
@ -209,9 +218,70 @@ module.exports = (_ => {
BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.DispatchApiUtils, "dispatch", {after: e => { BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.DispatchApiUtils, "dispatch", {after: e => {
if (BDFDB.ObjectUtils.is(e.methodArguments[0]) && e.methodArguments[0].type == "USER_PROFILE_FETCH_FAILURE" && e.methodArguments[0].userId) { if (BDFDB.ObjectUtils.is(e.methodArguments[0]) && e.methodArguments[0].type == "USER_PROFILE_FETCH_FAILURE" && e.methodArguments[0].userId) {
const user = BDFDB.LibraryStores.UserStore.getUser(e.methodArguments[0].userId); const user = BDFDB.LibraryStores.UserStore.getUser(e.methodArguments[0].userId);
processUser(e.methodArguments[0].userId, {user: user || {}, flags: user ? user.publicFlags : 0}); if (!loadedUsers[user.id]) processUser(e.methodArguments[0].userId, {user: user || {}, flags: user ? user.publicFlags : 0});
}
else if (BDFDB.ObjectUtils.is(e.methodArguments[0]) && e.methodArguments[0].type == "USER_PROFILE_FETCH_SUCCESS" && e.methodArguments[0].user) {
processUser(e.methodArguments[0].user.id, e.methodArguments[0]);
}
}});
BDFDB.PatchUtils.patch(this, BDFDB.LibraryModules.MemberDisplayUtils, "getUserProfile", {after: e => {
if (typeof e.methodArguments[0] == "string" && e.methodArguments[0].indexOf("SHOWBADGES__") == 0) {
let keyName = "";
if (e.methodArguments[0] == "SHOWBADGES__NITRO") keyName = "premium";
else if (e.methodArguments[0].endsWith("__FLAG")) {
let flag = e.methodArguments[0].split("__")[1];
let userFlag = flag !== undefined && Object.entries(BDFDB.DiscordConstants.UserFlags).find(n => n && n[1] == flag);
keyName = userFlag && userFlag[0].replace("_LEVEL_", "_LVL");
keyName = (userBadgeFlagNameMap[keyName] || keyName || "").toLowerCase();
}
else if (e.methodArguments[0].startsWith("SHOWBADGES__GUILD_BOOST__")) {
keyName = `guild_booster_lvl${e.methodArguments[0].split("__").pop()}`;
}
if (keyName) return {
getBadges: _ => [{icon: BDFDB.DiscordConstants.UserBadges[keyName], id: keyName}],
getBannerURL: _ => null,
_userProfile: {badges: [{icon: BDFDB.DiscordConstants.UserBadges[keyName], id: keyName}]}
};
}
else if (!loadedUsers[e.methodArguments[0]]) return;
else if (!e.returnValue || e.returnValue._userProfile && e.returnValue._userProfile.profileFetchFailed) {
let foundBadges = [];
for (let key in BDFDB.DiscordConstants.UserFlags) if (BDFDB.DiscordConstants.UserFlags[key] < 100000000000) {
if ((loadedUsers[e.methodArguments[0]].flags | BDFDB.DiscordConstants.UserFlags[key]) == loadedUsers[e.methodArguments[0]].flags) {
let keyName = key.replace("_LEVEL_", "_LVL");
keyName = (userBadgeFlagNameMap[keyName] || keyName || "").toLowerCase();
if (badges[keyName]) foundBadges.push({icon: BDFDB.DiscordConstants.UserBadges[keyName], id: keyName});
}
}
if (loadedUsers[e.methodArguments[0]].premium_since) foundBadges.push({icon: BDFDB.DiscordConstants.UserBadges.premium, id: "premium"});
if (loadedUsers[e.methodArguments[0]].premium_guild_since) {
let level = this.getBoostLevel(new Date(loadedUsers[e.methodArguments[0]].premium_guild_since));
if (level) foundBadges.push({icon: BDFDB.DiscordConstants.UserBadges[`guild_booster_lvl${level}`], id: `guild_booster_lvl${level}`});
}
if (!foundBadges.length) return;
if (!e.returnValue) return {
getBadges: _ => foundBadges,
getBannerURL: _ => null,
premiumSince: loadedUsers[e.methodArguments[0]].premium_since ? new Date(loadedUsers[e.methodArguments[0]].premium_since) : null,
premiumGuildSince: loadedUsers[e.methodArguments[0]].premium_guild_since ? new Date(loadedUsers[e.methodArguments[0]].premium_guild_since) : null,
_userProfile: {
badges: foundBadges,
premiumSince: loadedUsers[e.methodArguments[0]].premium_since ? new Date(loadedUsers[e.methodArguments[0]].premium_since) : null,
premiumGuildSince: loadedUsers[e.methodArguments[0]].premium_guild_since ? new Date(loadedUsers[e.methodArguments[0]].premium_guild_since) : null
}
};
else {
let newProfileObject = {};
for (let key in e.returnValue) newProfileObject[key] = e.returnValue[key];
for (let key of Reflect.ownKeys(e.returnValue.constructor.prototype)) if (!newProfileObject[key] && e.returnValue[key] !== undefined) newProfileObject[key] = e.returnValue[key];
newProfileObject.getBadges = _ => foundBadges;
newProfileObject._userProfile.badges = foundBadges;
if (loadedUsers[e.methodArguments[0]].premium_since) newProfileObject.premiumSince = newProfileObject._userProfile.premiumSince = new Date(loadedUsers[e.methodArguments[0]].premium_since);
if (loadedUsers[e.methodArguments[0]].premium_guild_since) newProfileObject.premiumGuildSince = newProfileObject._userProfile.premiumGuildSince = new Date(loadedUsers[e.methodArguments[0]].premium_guild_since);
return newProfileObject;
}
} }
else if (BDFDB.ObjectUtils.is(e.methodArguments[0]) && e.methodArguments[0].type == "USER_PROFILE_FETCH_SUCCESS" && e.methodArguments[0].user) processUser(e.methodArguments[0].user.id, e.methodArguments[0])
}}); }});
this.forceUpdateAll(); this.forceUpdateAll();
@ -345,16 +415,9 @@ module.exports = (_ => {
if (e.instance.props.custom) { if (e.instance.props.custom) {
let filter = e.instance.props.place != "settings"; let filter = e.instance.props.place != "settings";
for (let i in e.returnvalue.props.children) if (e.returnvalue.props.children[i]) { for (let i in e.returnvalue.props.children) if (e.returnvalue.props.children[i]) {
let key = parseInt(e.returnvalue.props.children[i].key); let keyName = filter && Object.keys(badges).find(n => badges[n].keys.includes(e.returnvalue.props.children[i].key));
let keyName = filter && Object.keys(badges).find(n => badges[n].keys.includes(key));
if (keyName && badgeConfigs[keyName] && !badgeConfigs[keyName][e.instance.props.place]) e.returnvalue.props.children[i] = null; if (keyName && badgeConfigs[keyName] && !badgeConfigs[keyName][e.instance.props.place]) e.returnvalue.props.children[i] = null;
else if (typeof e.returnvalue.props.children[i].props.children == "function" && e.returnvalue.props.children[i].props.text) { else if (typeof e.returnvalue.props.children[i].props.children == "function" && e.returnvalue.props.children[i].props.text) {
const childrenRender = e.returnvalue.props.children[i].props.children;
e.returnvalue.props.children[i].props.children = (...args) => {
const children = childrenRender(...args);
delete children.props.onClick;
return children;
};
e.returnvalue.props.children[i] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, e.returnvalue.props.children[i].props); e.returnvalue.props.children[i] = BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, e.returnvalue.props.children[i].props);
} }
} }
@ -403,6 +466,7 @@ module.exports = (_ => {
requestQueue.id = null; requestQueue.id = null;
this.runQueue(); this.runQueue();
}, 30000); }, 30000);
BDFDB.LibraryModules.UserProfileUtils.fetchProfile(id); BDFDB.LibraryModules.UserProfileUtils.fetchProfile(id);
} }
} }
@ -410,11 +474,11 @@ module.exports = (_ => {
createBadges (user, guildId, place) { createBadges (user, guildId, place) {
let fakeGuildBoostDate; let fakeGuildBoostDate;
if (typeof user.id == "string" && user.id.startsWith(specialFlag + "GB")) { if (typeof user.id == "string" && user.id.startsWith("SHOWBADGES__GUILD_BOOST__")) {
let level = parseInt(user.id.split("_").pop()); let level = parseInt(user.id.split("__").pop());
for (let i = 0; i < 100 && !fakeGuildBoostDate; i++) { for (let i = 0; i < 100 && !fakeGuildBoostDate; i++) {
let date = new Date() - 1000*60*60*24*15 * i; let date = new Date() - 1000*60*60*24*15 * i;
if (level == BDFDB.LibraryModules.GuildBoostUtils.getUserLevel(date)) fakeGuildBoostDate = date; if (level == this.getBoostLevel(date)) fakeGuildBoostDate = date;
} }
} }
let member = guildId && BDFDB.LibraryStores.GuildMemberStore.getMember(guildId, user.id); let member = guildId && BDFDB.LibraryStores.GuildMemberStore.getMember(guildId, user.id);
@ -424,33 +488,40 @@ module.exports = (_ => {
size: BDFDB.LibraryComponents.UserBadgeComponents.Sizes.SIZE_18, size: BDFDB.LibraryComponents.UserBadgeComponents.Sizes.SIZE_18,
custom: true, custom: true,
place: place, place: place,
premiumSince: loadedUsers[user.id] && loadedUsers[user.id].premium_since ? new Date(loadedUsers[user.id].premium_since) : (user.id == (specialFlag + "NITRO") ? new Date() : null), premiumSince: loadedUsers[user.id] && loadedUsers[user.id].premium_since ? new Date(loadedUsers[user.id].premium_since) : (user.id == "SHOWBADGES__NITRO" ? new Date() : null),
premiumGuildSince: fakeGuildBoostDate || (loadedUsers[user.id] && loadedUsers[user.id].premium_guild_since ? new Date(loadedUsers[user.id].premium_guild_since) : null), premiumGuildSince: fakeGuildBoostDate || (loadedUsers[user.id] && loadedUsers[user.id].premium_guild_since ? new Date(loadedUsers[user.id].premium_guild_since) : null),
premiumCurrentGuildSince: member && member.premiumSince && new Date(member.premiumSince) || user.id == (specialFlag + "CGB") && new Date() premiumCurrentGuildSince: member && member.premiumSince && new Date(member.premiumSince) || user.id == "SHOWBADGES__CURRENT_GUILD_BOOST" && new Date()
}); });
} }
createSettingsBadges (flag) { createSettingsBadges (flag) {
let wrappers = []; let wrappers = [];
if (indicators[flag]) { if (indicators[flag]) {
let id = flag == "CURRENT_GUILD_BOOST" ? (specialFlag + "CGB") : null; let user = new BDFDB.DiscordObjects.User({flags: 0, id: "SHOWBADGES__" + flag});
let user = new BDFDB.DiscordObjects.User({flags: 0, id: id});
wrappers.push(this.createBadges(user, null, "settings")); wrappers.push(this.createBadges(user, null, "settings"));
} }
else for (let key of badges[flag].keys) { else for (let key of badges[flag].keys) {
let userFlag = flag == "PREMIUM" || flag == "GUILD_BOOSTER" ? 0 : BDFDB.DiscordConstants.UserFlags[flag]; let keyName = key.replace("_lvl", "_level_");
let keyName = BDFDB.DiscordConstants.UserBadges[key]; keyName = (userBadgeFlagNameMap[keyName] || keyName || "").toUpperCase();
let userFlag = flag == "premium" || flag == "guild_booster" ? 0 : BDFDB.DiscordConstants.UserFlags[keyName.toUpperCase()];
if (userFlag == null && keyName) userFlag = BDFDB.DiscordConstants.UserFlags[keyName] != null ? BDFDB.DiscordConstants.UserFlags[keyName] : BDFDB.DiscordConstants.UserFlags[Object.keys(BDFDB.DiscordConstants.UserFlags).find(f => f.indexOf(keyName) > -1 || keyName.indexOf(f) > -1)]; if (userFlag == null && keyName) userFlag = BDFDB.DiscordConstants.UserFlags[keyName] != null ? BDFDB.DiscordConstants.UserFlags[keyName] : BDFDB.DiscordConstants.UserFlags[Object.keys(BDFDB.DiscordConstants.UserFlags).find(f => f.indexOf(keyName) > -1 || keyName.indexOf(f) > -1)];
if (userFlag != null) { if (userFlag != null) {
let id; let id = "SHOWBADGES__" + userFlag + "__FLAG";
if (flag == "PREMIUM") id = specialFlag + "NITRO"; if (flag == "premium") id = "SHOWBADGES__NITRO";
else if (keyName && keyName.startsWith("GUILD_BOOSTER")) id = specialFlag + "GB_" + keyName.split("_").pop(); else if (flag == "guild_booster" && keyName) id = "SHOWBADGES__GUILD_BOOST__" + keyName.split("_").pop();
let user = new BDFDB.DiscordObjects.User({flags: userFlag, id: id}); let user = new BDFDB.DiscordObjects.User({flags: userFlag, id: id});
wrappers.push(this.createBadges(user, null, "settings")); wrappers.push(this.createBadges(user, null, "settings"));
} }
} }
return wrappers; return wrappers;
} }
getBoostLevel (date) {
let level = 1;
let monthDifference = BDFDB.LibraryModules.GuildBoostUtils.getUserLevel(date);
for (let i = 0, levels = Object.keys(BDFDB.DiscordConstants.UserPremiumLevels); i < levels.length; i++) if (BDFDB.DiscordConstants.UserPremiumLevels[levels[i]] < monthDifference) level = parseInt(levels[i]);
return level;
}
}; };
})(window.BDFDB_Global.PluginUtils.buildPlugin(changeLog)); })(window.BDFDB_Global.PluginUtils.buildPlugin(changeLog));
})(); })();