@@ -10,7 +10,7 @@ def __init__(self, autosave_file: str = None):
1010
1111 # Persistent storage
1212 self .registrations = set ()
13- self .memberships = {}
13+ self .members = {}
1414 self .power_levels = {}
1515
1616 # Non-persistent storage
@@ -25,7 +25,7 @@ def save(self, file: str):
2525
2626 json .dump ({
2727 "registrations" : list (self .registrations ),
28- "memberships " : self .memberships ,
28+ "members " : self .members ,
2929 "power_levels" : self .power_levels ,
3030 }, output )
3131
@@ -44,8 +44,8 @@ def load(self, file: str):
4444 data = json .load (input_source )
4545 if "registrations" in data :
4646 self .registrations = set (data ["registrations" ])
47- if "memberships " in data :
48- self .memberships = data ["memberships " ]
47+ if "members " in data :
48+ self .members = data ["members " ]
4949 if "power_levels" in data :
5050 self .power_levels = data ["power_levels" ]
5151
@@ -86,18 +86,42 @@ def registered(self, user: str):
8686 self .registrations .add (user )
8787 self ._autosave ()
8888
89+ def update_state (self , event : dict ):
90+ event_type = event ["type" ]
91+ if event_type == "m.room.power_levels" :
92+ self .set_power_levels (event ["room_id" ], event ["content" ])
93+ elif event_type == "m.room.member" :
94+ self .set_member (event ["room_id" ], event ["state_key" ], event ["content" ])
95+
96+ def get_member (self , room : str , user : str ) -> dict :
97+ return self .members .get (room , {}).get (user , {})
98+
99+ def set_member (self , room : str , user : str , member : dict ):
100+ if room not in self .members :
101+ self .members [room ] = {}
102+ self .members [room ][user ] = member
103+ self ._autosave ()
104+
105+ def set_membership (self , room : str , user : str , membership : str ):
106+ if room not in self .members :
107+ self .members [room ] = {
108+ user : {
109+ "membership" : membership
110+ }
111+ }
112+ elif user not in self .members [room ]:
113+ self .members [room ][user ] = {
114+ "membership" : membership
115+ }
116+ else :
117+ self .members [room ][user ]["membership" ] = membership
118+
89119 def get_membership (self , room : str , user : str ) -> str :
90- return self .memberships . get (room , {} ).get (user , "left" )
120+ return self .get_member (room , user ).get ("membership" , "left" )
91121
92122 def is_joined (self , room : str , user : str ) -> bool :
93123 return self .get_membership (room , user ) == "join"
94124
95- def set_membership (self , room : str , user : str , membership : str ):
96- if room not in self .memberships :
97- self .memberships [room ] = {}
98- self .memberships [room ][user ] = membership
99- self ._autosave ()
100-
101125 def joined (self , room : str , user : str ):
102126 return self .set_membership (room , user , "join" )
103127
0 commit comments