2020-10-20 23:25:34 +02:00
/ * *
* @ name BadgesEverywhere
2021-03-05 13:26:41 +01:00
* @ author DevilBro
2020-10-20 23:25:34 +02:00
* @ authorId 278543574059057154
2021-05-29 22:16:50 +02:00
* @ version 1.7 . 3
2021-05-27 21:33:41 +02:00
* @ description Displays Badges ( Nitro , Hypesquad , etc ... ) in the Chat / MemberList
2020-10-20 23:25:34 +02:00
* @ invite Jx3TjNS
2020-11-19 16:45:36 +01:00
* @ donate https : //www.paypal.me/MircoWittrien
* @ patreon https : //www.patreon.com/MircoWittrien
2021-03-09 15:10:55 +01:00
* @ website https : //mwittrien.github.io/
* @ source https : //github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/BadgesEverywhere/
2021-03-10 09:17:37 +01:00
* @ updateUrl https : //mwittrien.github.io/BetterDiscordAddons/Plugins/BadgesEverywhere/BadgesEverywhere.plugin.js
2020-10-20 23:25:34 +02:00
* /
2018-10-16 21:33:23 +02:00
2020-09-19 20:49:33 +02:00
module . exports = ( _ => {
2020-10-09 21:09:35 +02:00
const config = {
2020-09-19 20:49:33 +02:00
"info" : {
"name" : "BadgesEverywhere" ,
"author" : "DevilBro" ,
2021-05-29 22:16:50 +02:00
"version" : "1.7.3" ,
2021-05-27 21:33:41 +02:00
"description" : "Displays Badges (Nitro, Hypesquad, etc...) in the Chat/MemberList"
2021-04-23 12:01:44 +02:00
} ,
"changeLog" : {
2021-05-27 21:33:41 +02:00
"improved" : {
2021-05-29 21:33:18 +02:00
"Switch to the native Badge List" : "Instead of creationg the Badge List by myself, the plugin now uses the native Badge List Component, meaning anytime Discord adds a new type of Badge, the plugin will automatically include it without requiring an update"
2021-05-29 22:16:50 +02:00
} ,
"fixed" : {
"Current Guild Boost" : "Fixed the indicator showing in every server"
2021-04-23 12:01:44 +02:00
}
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
} ;
2021-02-05 21:45:34 +01:00
2020-10-09 21:09:35 +02:00
return ! window . BDFDB _Global || ( ! window . BDFDB _Global . loaded && ! window . BDFDB _Global . started ) ? class {
2021-01-06 12:38:36 +01:00
getName ( ) { return config . info . name ; }
getAuthor ( ) { return config . info . author ; }
getVersion ( ) { return config . info . version ; }
2021-02-01 17:13:13 +01:00
getDescription ( ) { return ` The Library Plugin needed for ${ config . info . name } is missing. Open the Plugin Settings to download it. \n \n ${ config . info . description } ` ; }
downloadLibrary ( ) {
require ( "request" ) . get ( "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js" , ( e , r , b ) => {
2021-03-05 13:14:18 +01:00
if ( ! e && b && r . statusCode == 200 ) require ( "fs" ) . writeFile ( require ( "path" ) . join ( BdApi . Plugins . folder , "0BDFDB.plugin.js" ) , b , _ => BdApi . showToast ( "Finished downloading BDFDB Library" , { type : "success" } ) ) ;
2021-03-06 14:59:48 +01:00
else BdApi . alert ( "Error" , "Could not download BDFDB Library Plugin. Try again later or download it manually from GitHub: https://mwittrien.github.io/downloader/?library" ) ;
2021-02-01 17:13:13 +01:00
} ) ;
}
2020-09-19 20:49:33 +02:00
2021-01-06 12:38:36 +01:00
load ( ) {
2020-11-19 16:51:14 +01:00
if ( ! window . BDFDB _Global || ! Array . isArray ( window . BDFDB _Global . pluginQueue ) ) window . BDFDB _Global = Object . assign ( { } , window . BDFDB _Global , { pluginQueue : [ ] } ) ;
2020-09-19 20:49:33 +02:00
if ( ! window . BDFDB _Global . downloadModal ) {
window . BDFDB _Global . downloadModal = true ;
2021-01-14 16:14:44 +01:00
BdApi . showConfirmationModal ( "Library Missing" , ` The Library Plugin needed for ${ config . info . name } is missing. Please click "Download Now" to install it. ` , {
2020-09-19 20:49:33 +02:00
confirmText : "Download Now" ,
cancelText : "Cancel" ,
onCancel : _ => { delete window . BDFDB _Global . downloadModal ; } ,
2020-09-20 08:15:13 +02:00
onConfirm : _ => {
delete window . BDFDB _Global . downloadModal ;
2021-02-01 17:13:13 +01:00
this . downloadLibrary ( ) ;
2020-09-20 08:15:13 +02:00
}
2020-09-19 20:49:33 +02:00
} ) ;
}
if ( ! window . BDFDB _Global . pluginQueue . includes ( config . info . name ) ) window . BDFDB _Global . pluginQueue . push ( config . info . name ) ;
2020-10-09 21:09:35 +02:00
}
2021-01-06 12:38:36 +01:00
start ( ) { this . load ( ) ; }
stop ( ) { }
getSettingsPanel ( ) {
2020-11-28 23:12:09 +01:00
let template = document . createElement ( "template" ) ;
2021-01-14 16:14:44 +01:00
template . innerHTML = ` <div style="color: var(--header-primary); font-size: 16px; font-weight: 300; white-space: pre; line-height: 22px;">The Library Plugin needed for ${ config . info . name } is missing. \n Please click <a style="font-weight: 500;">Download Now</a> to install it.</div> ` ;
2021-02-01 17:13:13 +01:00
template . content . firstElementChild . querySelector ( "a" ) . addEventListener ( "click" , this . downloadLibrary ) ;
2020-11-28 23:12:09 +01:00
return template . content . firstElementChild ;
}
2020-10-09 21:09:35 +02:00
} : ( ( [ Plugin , BDFDB ] ) => {
2021-05-29 21:33:18 +02:00
var requestedUsers = { } , loadedUsers = { } , requestQueue = { queue : [ ] , timeout : null , id : null } , cacheTimeout ;
var specialFlag ;
2020-09-19 20:49:33 +02:00
2020-10-09 21:09:35 +02:00
return class BadgesEverywhere extends Plugin {
2021-01-06 12:38:36 +01:00
onLoad ( ) {
2021-05-29 21:33:18 +02:00
specialFlag = BDFDB . NumberUtils . generateId ( ) + "SPECIALFLAG" ;
2020-09-19 20:49:33 +02:00
this . patchedModules = {
after : {
MemberListItem : "render" ,
2021-05-29 21:33:18 +02:00
MessageUsername : "default" ,
UserProfileBadgeList : "default"
2020-09-19 20:49:33 +02:00
}
} ;
2020-07-01 10:16:47 +02:00
2020-09-19 20:49:33 +02:00
this . defaults = {
2021-05-19 20:22:29 +02:00
general : {
2021-05-29 21:33:18 +02:00
useColoredVersion : { value : true , description : "Use colored Version of the Badges" }
2021-05-19 20:22:29 +02:00
} ,
places : {
chat : { value : true , description : "Chat" } ,
memberList : { value : true , description : "Member List" }
2020-04-13 20:06:13 +02:00
} ,
2021-05-29 21:33:18 +02:00
badges : { } ,
2020-09-19 20:49:33 +02:00
indicators : {
2021-05-29 21:33:18 +02:00
CURRENT _GUILD _BOOST : { value : true }
2020-09-19 20:49:33 +02:00
}
} ;
2021-05-29 21:33:18 +02:00
for ( let key of Object . keys ( BDFDB . LibraryComponents . UserBadgesKeys ) . filter ( n => isNaN ( parseInt ( n ) ) ) ) {
let basicKey = key . replace ( /_LEVEL_\d+|_WINNER/g , "" ) ;
if ( ! this . defaults . badges [ basicKey ] ) this . defaults . badges [ basicKey ] = { value : true , keys : [ ] } ;
this . defaults . badges [ basicKey ] . keys . push ( BDFDB . LibraryComponents . UserBadgesKeys [ key ] ) ;
}
2020-09-19 20:49:33 +02:00
this . css = `
2021-05-06 17:50:44 +02:00
$ { BDFDB . dotCN . _badgeseverywherebadges } {
2021-05-29 21:33:18 +02:00
display : inline - flex ! important ;
justify - content : center ;
align - items : center ;
flex - wrap : nowrap ;
position : relative ;
margin : 0 0 0 4 px ;
}
$ { BDFDB . dotCN . _badgeseverywherebadges } > * {
margin : 0 ;
}
$ { BDFDB . dotCN . _badgeseverywherebadges } > * + * {
margin - left : 4 px ;
}
$ { BDFDB . dotCNS . _badgeseverywherebadges + BDFDB . dotCN . userbadge } {
2021-05-06 17:50:44 +02:00
display : flex ;
justify - content : center ;
align - items : center ;
2021-05-29 21:33:18 +02:00
width : 14 px ;
height : 14 px ;
}
$ { BDFDB . dotCNS . _badgeseverywherebadges + BDFDB . dotCN . userbadge + BDFDB . dotCN . userbadgenitro } {
width : 16 px ;
}
$ { BDFDB . dotCNS . _badgeseverywherebadgessettings + BDFDB . dotCN . userbadge } ,
$ { BDFDB . dotCNS . _badgeseverywherebadgessettings + BDFDB . dotCN . userbadge + BDFDB . dotCN . userbadgenitro } {
width : 24 px ;
height : 20 px ;
}
$ { BDFDB . dotCN . memberpremiumicon } {
display : none ;
}
$ { BDFDB . dotCNS . _badgeseverywherebadges + BDFDB . dotCN . memberpremiumicon } {
display : block ;
position : static ;
margin : 0 ;
}
$ { BDFDB . dotCN . _badgeseverywherebadges + BDFDB . notCNS . userbadgescolored + BDFDB . dotCN . memberpremiumicon } {
color : unset ! important ;
2021-05-06 17:50:44 +02:00
}
2020-09-19 20:49:33 +02:00
$ { BDFDB . dotCN . _badgeseverywherebadgeschat } {
position : relative ;
top : 2 px ;
}
2021-01-11 14:07:57 +01:00
$ { BDFDB . dotCNS . messagerepliedmessage + BDFDB . dotCN . _badgeseverywherebadgeschat } {
top : 0 ;
}
$ { BDFDB . dotCNS . messagecompact + BDFDB . dotCN . messageusername } ~ $ { BDFDB . dotCN . _badgeseverywherebadges } ,
$ { BDFDB . dotCNS . messagerepliedmessage + BDFDB . dotCN . messageusername } ~ $ { BDFDB . dotCN . _badgeseverywherebadges } {
2020-09-19 20:49:33 +02:00
margin - right : . 25 rem ;
text - indent : 0 ;
}
2021-01-11 14:07:57 +01:00
$ { BDFDB . dotCNS . messagerepliedmessage + BDFDB . dotCN . messageusername } ~ $ { BDFDB . dotCN . _badgeseverywherebadges } {
margin - left : 0 ;
}
2020-09-19 20:49:33 +02:00
2020-11-23 19:20:23 +01:00
$ { BDFDB . dotCN . _badgeseverywherebadgessettings } {
color : var ( -- header - primary ) ;
}
2020-09-19 20:49:33 +02:00
` ;
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
2021-01-06 12:38:36 +01:00
onStart ( ) {
2020-02-04 08:20:40 +01:00
requestedUsers = { } , loadedUsers = { } ;
2020-11-19 16:51:14 +01:00
requestQueue = { queue : [ ] , timeout : null , id : null } ;
2020-06-05 12:00:46 +02:00
let badgeCache = BDFDB . DataUtils . load ( this , "badgeCache" ) ;
if ( badgeCache ) {
let now = ( new Date ( ) ) . getTime ( ) , month = 1000 * 60 * 60 * 24 * 30 ;
for ( let id in badgeCache ) {
if ( now - badgeCache [ id ] . date > month ) delete badgeCache [ id ] ;
else loadedUsers [ id ] = badgeCache [ id ] ;
}
BDFDB . DataUtils . save ( badgeCache , this , "badgeCache" ) ;
}
2020-09-11 19:31:36 +02:00
BDFDB . PatchUtils . patch ( this , BDFDB . LibraryModules . DispatchApiUtils , "dispatch" , { after : e => {
2021-05-20 15:46:19 +02:00
if ( BDFDB . ObjectUtils . is ( e . methodArguments [ 0 ] ) && e . methodArguments [ 0 ] . type == BDFDB . DiscordConstants . ActionTypes . USER _PROFILE _FETCH _SUCCESS && e . methodArguments [ 0 ] . user ) {
2020-07-01 10:16:47 +02:00
let userCopy = Object . assign ( { } , e . methodArguments [ 0 ] . user ) ;
userCopy . premium _since = e . methodArguments [ 0 ] . premium _since ;
userCopy . premium _guild _since = e . methodArguments [ 0 ] . premium _guild _since ;
loadedUsers [ e . methodArguments [ 0 ] . user . id ] = BDFDB . ObjectUtils . extract ( userCopy , "flags" , "premium_since" , "premium_guild_since" ) ;
loadedUsers [ e . methodArguments [ 0 ] . user . id ] . date = ( new Date ( ) ) . getTime ( ) ;
BDFDB . TimeUtils . clear ( cacheTimeout ) ;
cacheTimeout = BDFDB . TimeUtils . timeout ( _ => { BDFDB . DataUtils . save ( loadedUsers , this , "badgeCache" ) ; } , 5000 ) ;
if ( requestQueue . id && requestQueue . id == e . methodArguments [ 0 ] . user . id ) {
while ( requestedUsers [ requestQueue . id ] . length ) BDFDB . ReactUtils . forceUpdate ( requestedUsers [ requestQueue . id ] . pop ( ) ) ;
requestQueue . id = null ;
2021-05-29 21:33:18 +02:00
BDFDB . TimeUtils . timeout ( _ => this . runQueue ( ) , 1000 ) ;
2020-07-01 10:16:47 +02:00
}
}
2020-06-05 12:00:46 +02:00
} } ) ;
2021-05-29 21:33:18 +02:00
BDFDB . PatchUtils . patch ( this , ( BDFDB . ModuleUtils . findByString ( "hypeSquadHouseWinner" , "hasFlag" , false ) || { } ) . exports , "default" , { before : e => {
if ( e . methodArguments [ 0 ] . user && e . methodArguments [ 0 ] . user . id == ( specialFlag + "HS" ) ) e . methodArguments [ 0 ] . hypeSquadHouseWinner = parseInt ( Object . keys ( BDFDB . DiscordConstants . UserFlags ) . find ( n => BDFDB . DiscordConstants . UserFlags [ n ] == e . methodArguments [ 0 ] . user . flags ) . split ( "_" ) . pop ( ) ) ;
} } ) ;
2020-02-04 08:20:40 +01:00
this . forceUpdateAll ( ) ;
}
2020-09-19 20:49:33 +02:00
2021-01-06 12:38:36 +01:00
onStop ( ) {
2020-02-04 08:20:40 +01:00
BDFDB . TimeUtils . clear ( requestQueue . timeout ) ;
this . forceUpdateAll ( ) ;
}
2019-01-26 22:45:19 +01:00
2020-09-19 20:49:33 +02:00
getSettingsPanel ( collapseStates = { } ) {
2021-05-19 20:22:29 +02:00
let settingsPanel ;
return settingsPanel = BDFDB . PluginUtils . createSettingsPanel ( this , {
collapseStates : collapseStates ,
children : _ => {
let settingsItems = [ ] ;
2020-09-19 20:49:33 +02:00
2021-05-19 20:22:29 +02:00
for ( let key in this . defaults . general ) settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
type : "Switch" ,
plugin : this ,
keys : [ "general" , key ] ,
label : this . defaults . general [ key ] . description ,
value : this . settings . general [ key ]
} ) ) ;
settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsPanelList , {
title : "Show Badges in:" ,
children : Object . keys ( this . defaults . places ) . map ( key => BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
type : "Switch" ,
plugin : this ,
keys : [ "places" , key ] ,
label : this . defaults . places [ key ] . description ,
value : this . settings . places [ key ]
} ) )
} ) ) ;
settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsPanelList , {
title : "Display Badges:" ,
2021-05-29 21:33:18 +02:00
children : Object . keys ( this . defaults . badges ) . map ( key => BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
2021-05-19 20:22:29 +02:00
type : "Switch" ,
plugin : this ,
2021-05-29 21:33:18 +02:00
keys : [ "badges" , key ] ,
label : key . split ( "_" ) . map ( n => BDFDB . LibraryModules . StringUtils . upperCaseFirstChar ( n . toLowerCase ( ) ) ) . join ( " " ) ,
value : this . settings . badges [ key ] ,
labelChildren : this . createSettingsBadges ( key )
} ) ) . concat ( Object . keys ( this . defaults . indicators ) . map ( key => BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
2021-05-19 20:22:29 +02:00
type : "Switch" ,
plugin : this ,
2021-05-29 21:33:18 +02:00
keys : [ "indicators" , key ] ,
label : key . split ( "_" ) . map ( n => BDFDB . LibraryModules . StringUtils . upperCaseFirstChar ( n . toLowerCase ( ) ) ) . join ( " " ) ,
value : this . settings . indicators [ key ] ,
labelChildren : this . createSettingsBadges ( key )
2021-05-19 20:22:29 +02:00
} ) ) )
} ) ) ;
settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsItem , {
type : "Button" ,
color : BDFDB . LibraryComponents . Button . Colors . RED ,
label : "Reset cached Badge Data" ,
onClick : _ => BDFDB . ModalUtils . confirm ( this , "Are you sure you want to reset the Badge Cache? This will force all Badges to rerender." , _ => {
BDFDB . DataUtils . remove ( this , "badgeCache" ) ;
2021-05-29 21:33:18 +02:00
this . forceUpdateAll ( ) ;
2021-05-19 20:22:29 +02:00
} ) ,
children : BDFDB . LanguageUtils . LanguageStrings . RESET
} ) ) ;
return settingsItems ;
}
} ) ;
2020-02-04 08:20:40 +01:00
}
2019-10-30 14:03:32 +01:00
2021-01-06 12:38:36 +01:00
onSettingsClosed ( ) {
2020-09-19 20:49:33 +02:00
if ( this . SettingsUpdated ) {
delete this . SettingsUpdated ;
this . forceUpdateAll ( ) ;
}
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
2021-05-19 20:22:29 +02:00
forceUpdateAll ( ) {
2020-09-19 20:49:33 +02:00
BDFDB . PatchUtils . forceAllUpdates ( this ) ;
BDFDB . MessageUtils . rerenderAll ( ) ;
2020-02-04 08:20:40 +01:00
}
2019-09-04 12:34:02 +02:00
2020-09-19 20:49:33 +02:00
processMemberListItem ( e ) {
2021-05-19 20:22:29 +02:00
if ( e . instance . props . user && this . settings . places . memberList ) {
2021-05-29 22:16:50 +02:00
this . injectBadges ( e . instance , BDFDB . ObjectUtils . get ( e . returnvalue , "props.decorators.props.children" ) , e . instance . props . user , e . instance . props . channel . guild _id , "list" ) ;
2020-09-19 20:49:33 +02:00
}
2020-02-04 08:20:40 +01:00
}
2019-01-26 22:45:19 +01:00
2020-10-07 10:20:55 +02:00
processMessageUsername ( e ) {
2021-05-19 20:22:29 +02:00
if ( e . instance . props . message && this . settings . places . chat ) {
2021-05-29 22:16:50 +02:00
this . injectBadges ( e . instance , ( BDFDB . LibraryModules . ChannelStore . getChannel ( e . instance . props . message . channel _id ) || { } ) . guild _id , e . returnvalue . props . children , e . instance . props . message . author , "chat" ) ;
2020-09-19 20:49:33 +02:00
}
2020-02-04 08:20:40 +01:00
}
2021-05-29 21:33:18 +02:00
processUserProfileBadgeList ( e ) {
if ( e . instance . props . custom ) {
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 = e . instance . props . filter && Object . keys ( this . defaults . badges ) . find ( n => this . defaults . badges [ n ] . keys . includes ( key ) ) ;
if ( keyName && ! this . settings . badges [ keyName ] ) e . returnvalue . props . children [ i ] = null ;
else if ( e . returnvalue . props . children [ i ] . type . displayName == "TooltipContainer" ) e . returnvalue . props . children [ i ] = BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . TooltipContainer , e . returnvalue . props . children [ i ] . props ) ;
}
2021-05-29 22:16:50 +02:00
if ( ( this . settings . indicators . CURRENT _GUILD _BOOST || ! e . instance . props . filter ) && e . instance . props . premiumCurrentGuildSince ) e . returnvalue . props . children . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . TooltipContainer , {
text : BDFDB . LanguageUtils . LanguageStringsFormat ( "PREMIUM_GUILD_SUBSCRIPTION_TOOLTIP" , e . instance . props . premiumCurrentGuildSince ) ,
2021-05-29 21:33:18 +02:00
children : BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . Clickable , {
className : BDFDB . disCN . userbadge ,
children : BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SvgIcon , {
className : BDFDB . disCN . memberpremiumicon ,
name : BDFDB . LibraryComponents . SvgIcon . Names . BOOST
} )
} )
} ) ) ;
if ( ! e . returnvalue . props . children . filter ( n => n ) . length ) return null ;
}
}
2020-09-19 20:49:33 +02:00
2021-05-29 22:16:50 +02:00
injectBadges ( instance , children , user , guildId , type ) {
2020-09-19 20:49:33 +02:00
if ( ! BDFDB . ArrayUtils . is ( children ) || ! user || user . bot ) return ;
2021-05-29 22:16:50 +02:00
if ( loadedUsers [ user . id ] && ( ( new Date ( ) ) . getTime ( ) - loadedUsers [ user . id ] . date < 1000 * 60 * 60 * 24 * 7 ) ) children . push ( this . createBadges ( user , guildId , type , this . settings . general . useColoredVersion ) ) ;
2020-09-19 20:49:33 +02:00
else if ( ! BDFDB . ArrayUtils . is ( requestedUsers [ user . id ] ) ) {
requestedUsers [ user . id ] = [ instance ] ;
requestQueue . queue . push ( user . id ) ;
this . runQueue ( ) ;
}
else requestedUsers [ user . id ] . push ( instance ) ;
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
2021-01-06 12:38:36 +01:00
runQueue ( ) {
2020-09-19 20:49:33 +02:00
if ( ! requestQueue . id ) {
let id = requestQueue . queue . shift ( ) ;
if ( id ) {
requestQueue . id = id ;
BDFDB . TimeUtils . clear ( requestQueue . timeout ) ;
requestQueue . timeout = BDFDB . TimeUtils . timeout ( _ => {
requestQueue . id = null ;
this . runQueue ( ) ;
} , 30000 ) ;
BDFDB . LibraryModules . UserProfileUtils . fetchProfile ( id ) ;
}
}
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
2021-05-29 22:16:50 +02:00
createBadges ( user , guildId , type , colored ) {
2021-05-29 21:33:18 +02:00
let fakeGuildBoostDate ;
if ( typeof user . id == "string" && user . id . startsWith ( specialFlag + "GB" ) ) {
let level = parseInt ( user . id . split ( "_" ) . pop ( ) ) ;
for ( let i = 0 ; i < 100 && ! fakeGuildBoostDate ; i ++ ) {
let date = new Date ( ) - 1000 * 60 * 60 * 24 * 15 * i ;
if ( level == BDFDB . LibraryModules . GuildBoostUtils . getUserLevel ( date ) ) fakeGuildBoostDate = date ;
}
2021-05-29 21:07:54 +02:00
}
2021-05-29 22:16:50 +02:00
let member = guildId && BDFDB . LibraryModules . MemberStore . getMember ( guildId , user . id ) ;
2021-05-29 21:33:18 +02:00
return BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . UserBadges . default , {
className : BDFDB . DOMUtils . formatClassName ( BDFDB . disCN . _badgeseverywherebadges , BDFDB . disCN [ ` _badgeseverywherebadges ${ type } ` ] ) ,
colored : colored ,
user : user ,
custom : true ,
filter : type != "settings" ,
premiumSince : loadedUsers [ user . id ] && loadedUsers [ user . id ] . premium _since ? new Date ( loadedUsers [ user . id ] . premium _since ) : ( user . id == ( specialFlag + "NITRO" ) ? new Date ( ) : null ) ,
2021-05-29 22:16:50 +02:00
premiumGuildSince : fakeGuildBoostDate || ( loadedUsers [ user . id ] && loadedUsers [ user . id ] . premium _guild _since ? new Date ( loadedUsers [ user . id ] . premium _guild _since ) : null ) ,
premiumCurrentGuildSince : member && member . premiumSince || user . id == ( specialFlag + "CGB" ) && new Date ( )
2020-09-19 20:49:33 +02:00
} ) ;
2019-06-07 11:39:54 +02:00
}
2020-06-08 10:34:09 +02:00
2020-09-19 20:49:33 +02:00
createSettingsBadges ( flag ) {
2021-05-29 21:33:18 +02:00
let wrappers = [ ] ;
if ( this . defaults . indicators [ flag ] ) {
let id = flag == "CURRENT_GUILD_BOOST" ? ( specialFlag + "CGB" ) : null ;
let user = new BDFDB . DiscordObjects . User ( { flags : 0 , id : id } ) ;
wrappers . push ( [
2021-05-29 22:16:50 +02:00
this . createBadges ( user , null , "settings" , false ) ,
this . createBadges ( user , null , "settings" , true )
2021-05-29 21:33:18 +02:00
] ) ;
2020-09-19 20:49:33 +02:00
}
2021-05-29 21:33:18 +02:00
else for ( let key of this . defaults . badges [ flag ] . keys ) {
let userFlag = flag == "PREMIUM" || flag == "PREMIUM_GUILD_SUBSCRIPTION" ? 0 : BDFDB . DiscordConstants . UserFlags [ flag ] ;
let keyName = BDFDB . LibraryComponents . UserBadgesKeys [ key ] ;
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 ) {
let id ;
if ( flag == "PREMIUM" ) id = specialFlag + "NITRO" ;
else if ( keyName && keyName . endsWith ( "_WINNER" ) ) id = specialFlag + "HS" ;
else if ( keyName && keyName . startsWith ( "PREMIUM_GUILD_SUBSCRIPTION" ) ) id = specialFlag + "GB_" + keyName . split ( "_" ) . pop ( ) ;
let user = new BDFDB . DiscordObjects . User ( { flags : userFlag , id : id } ) ;
wrappers . push ( flag == "PREMIUM_GUILD_SUBSCRIPTION" ? BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . Flex , {
direction : BDFDB . LibraryComponents . Flex . Direction . VERTICAL ,
grow : 0 ,
children : [
2021-05-29 22:16:50 +02:00
this . createBadges ( user , null , "settings" , false ) ,
this . createBadges ( user , null , "settings" , true )
2021-05-29 21:33:18 +02:00
]
} ) : [
2021-05-29 22:16:50 +02:00
this . createBadges ( user , null , "settings" , false ) ,
this . createBadges ( user , null , "settings" , true )
2021-05-29 21:33:18 +02:00
] ) ;
}
2020-09-19 20:49:33 +02:00
}
2021-05-29 21:33:18 +02:00
return wrappers ;
2020-09-19 20:49:33 +02:00
}
} ;
2020-10-09 21:09:35 +02:00
} ) ( window . BDFDB _Global . PluginUtils . buildPlugin ( config ) ) ;
2020-09-19 20:49:33 +02:00
} ) ( ) ;