@@ -22,6 +22,8 @@ import { decodeTime } from "ulid";
2222import type { ServerCollection } from "../collections/ServerCollection.js" ;
2323import { hydrate } from "../hydration/index.js" ;
2424import type { ServerFlags } from "../hydration/server.js" ;
25+ import { HydratedServerMember } from "../hydration/serverMember.js" ;
26+ import { HydratedUser } from "../hydration/user.js" ;
2527import {
2628 bitwiseAndEq ,
2729 calculatePermission ,
@@ -675,79 +677,46 @@ export class Server {
675677
676678 #synced: undefined | "partial" | "full" ;
677679
678- async syncMembers (
679- excludeOffline ?: boolean ,
680- excludeOfflineUserCap ?: number ,
681- ) : Promise < void > {
680+ async syncMembers ( excludeOffline ?: boolean ) : Promise < void > {
682681 if ( this . #synced && ( this . #synced === "full" || excludeOffline ) ) return ;
683682
684683 const data = await this . #collection. client . api . get (
685684 `/servers/${ this . id as "" } /members` ,
686685 { exclude_offline : excludeOffline } ,
687686 ) ;
688687
689- batch ( ( ) => {
690- if ( excludeOffline && excludeOfflineUserCap ) {
691- // quick fix to cap users
692- let count = 0 ;
693-
694- for (
695- let i = 0 ;
696- i < data . users . length && count < excludeOfflineUserCap ;
697- i ++
698- ) {
699- const user = data . users [ i ] ;
700- if ( user . online && data . members [ i ] . roles ?. length ) {
701- this . #collection. client . users . getOrCreate ( user . _id , user ) ;
702- this . #collection. client . serverMembers . getOrCreate (
703- data . members [ i ] . _id ,
704- data . members [ i ] ,
705- ) ;
706-
707- count ++ ;
708- }
709- }
688+ const newUsers : HydratedUser [ ] = [ ] ;
689+ const newServerMembers : HydratedServerMember [ ] = [ ] ;
710690
711- for (
712- let i = 0 ;
713- i < data . users . length && count < excludeOfflineUserCap ;
714- i ++
715- ) {
716- const user = data . users [ i ] ;
717- if ( user . online && ! data . members [ i ] . roles ?. length ) {
718- this . #collection. client . users . getOrCreate ( user . _id , user ) ;
719- this . #collection. client . serverMembers . getOrCreate (
720- data . members [ i ] . _id ,
721- data . members [ i ] ,
722- ) ;
723-
724- count ++ ;
725- }
726- }
727- // end quick fix
728- } else if ( excludeOffline ) {
729- for ( let i = 0 ; i < data . users . length ; i ++ ) {
730- const user = data . users [ i ] ;
731- if ( user . online ) {
732- this . #collection. client . users . getOrCreate ( user . _id , user ) ;
733- this . #collection. client . serverMembers . getOrCreate (
734- data . members [ i ] . _id ,
735- data . members [ i ] ,
736- ) ;
737- }
691+ for ( let i = 0 ; i < data . users . length ; i ++ ) {
692+ const user = data . users [ i ] ;
693+ if ( ! excludeOffline || user . online ) {
694+ const newUser = this . #collection. client . users . hydrateIfNotHas (
695+ user . _id ,
696+ user ,
697+ ) ;
698+ if ( newUser ) {
699+ newUsers . push ( newUser ) ;
738700 }
739- } else {
740- for ( let i = 0 ; i < data . users . length ; i ++ ) {
741- this . #collection. client . users . getOrCreate (
742- data . users [ i ] . _id ,
743- data . users [ i ] ,
744- ) ;
745- this . #collection. client . serverMembers . getOrCreate (
746- data . members [ i ] . _id ,
747- data . members [ i ] ,
748- ) ;
701+ const newMember = this . #collection. client . serverMembers . hydrateIfNotHas (
702+ data . members [ i ] . _id ,
703+ data . members [ i ] ,
704+ ) ;
705+ if ( newMember ) {
706+ newServerMembers . push ( newMember ) ;
749707 }
750708 }
709+ }
710+
711+ batch ( ( ) => {
712+ for ( const newUser of newUsers ) {
713+ this . #collection. client . users . addHydratedUser ( newUser ) ;
714+ }
715+ for ( const newServerMember of newServerMembers ) {
716+ this . #collection. client . serverMembers . addHydratedServerMember (
717+ newServerMember ,
718+ ) ;
719+ }
751720 } ) ;
752721 }
753722
0 commit comments