@@ -112,6 +112,31 @@ def __init__(self, user, channel):
112112 self .status = []
113113 super ().__init__ ()
114114
115+ def add_status (self , status , sort = True ):
116+ if status in self .status :
117+ logger .warning (
118+ "[chantrack] Attempted to add existing status to channel member: %s %s" ,
119+ self , status
120+ )
121+ else :
122+ self .status .append (status )
123+ if sort :
124+ self .sort_status ()
125+
126+ def remove_status (self , status ):
127+ if status not in self .status :
128+ logger .warning (
129+ "[chantrack] Attempted to remove status not set on member: %s %s" ,
130+ self , status
131+ )
132+ else :
133+ self .status .remove (status )
134+
135+ def sort_status (self ):
136+ status = list (set (self .status ))
137+ status .sort (key = attrgetter ("level" ), reverse = True )
138+ self .status = status
139+
115140 def __init__ (self , name ):
116141 self .name = name
117142 self .users = KeyFoldDict ()
@@ -268,15 +293,6 @@ def get_chan_data(bot):
268293 update_conn_data (conn )
269294
270295
271- def sort_member_status (member ):
272- """
273- :type member: Channel.Member
274- """
275- status = list (set (member .status ))
276- status .sort (key = attrgetter ("level" ), reverse = True )
277- member .status = status
278-
279-
280296def clean_user_data (user ):
281297 """
282298 :type user: User
@@ -612,21 +628,14 @@ def on_mode(chan, irc_paramlist, conn):
612628 user = get_users (conn ).getuser (nick )
613629 memb = chan_data .get_member (user , create = True )
614630 status = statuses [status_char ]
615- memb_status = memb .status
616631 if change .adding :
617- memb_status . append (status )
632+ memb . add_status (status , sort = False )
618633 to_sort [user .nick ] = memb
619634 else :
620- if status in memb_status :
621- memb_status .remove (status )
622- else :
623- logger .debug (
624- "[%s|chantrack] Attempt to remove status %s from user %s in channel %s" ,
625- conn .name , status , user ['nick' ], chan
626- )
635+ memb .remove_status (status )
627636
628637 for member in to_sort .values ():
629- sort_member_status ( member )
638+ member . sort_status ( )
630639
631640
632641@hook .irc_raw ('PART' )
0 commit comments