@@ -1182,54 +1182,7 @@ async def _send_dummy_events_to_fill_extremities(self):
11821182 )
11831183
11841184 for room_id in room_ids :
1185- # For each room we need to find a joined member we can use to send
1186- # the dummy event with.
1187-
1188- latest_event_ids = await self .store .get_prev_events_for_room (room_id )
1189-
1190- members = await self .state .get_current_users_in_room (
1191- room_id , latest_event_ids = latest_event_ids
1192- )
1193- dummy_event_sent = False
1194- for user_id in members :
1195- if not self .hs .is_mine_id (user_id ):
1196- continue
1197- requester = create_requester (user_id )
1198- try :
1199- event , context = await self .create_event (
1200- requester ,
1201- {
1202- "type" : "org.matrix.dummy_event" ,
1203- "content" : {},
1204- "room_id" : room_id ,
1205- "sender" : user_id ,
1206- },
1207- prev_event_ids = latest_event_ids ,
1208- )
1209-
1210- event .internal_metadata .proactively_send = False
1211-
1212- # Since this is a dummy-event it is OK if it is sent by a
1213- # shadow-banned user.
1214- await self .send_nonmember_event (
1215- requester ,
1216- event ,
1217- context ,
1218- ratelimit = False ,
1219- ignore_shadow_ban = True ,
1220- )
1221- dummy_event_sent = True
1222- break
1223- except ConsentNotGivenError :
1224- logger .info (
1225- "Failed to send dummy event into room %s for user %s due to "
1226- "lack of consent. Will try another user" % (room_id , user_id )
1227- )
1228- except AuthError :
1229- logger .info (
1230- "Failed to send dummy event into room %s for user %s due to "
1231- "lack of power. Will try another user" % (room_id , user_id )
1232- )
1185+ dummy_event_sent = await self ._send_dummy_event_for_room (room_id )
12331186
12341187 if not dummy_event_sent :
12351188 # Did not find a valid user in the room, so remove from future attempts
@@ -1242,6 +1195,59 @@ async def _send_dummy_events_to_fill_extremities(self):
12421195 now = self .clock .time_msec ()
12431196 self ._rooms_to_exclude_from_dummy_event_insertion [room_id ] = now
12441197
1198+ async def _send_dummy_event_for_room (self , room_id : str ) -> bool :
1199+ """Attempt to send a dummy event for the given room.
1200+
1201+ Args:
1202+ room_id: room to try to send an event from
1203+
1204+ Returns:
1205+ True if a dummy event was successfully sent. False if no user was able
1206+ to send an event.
1207+ """
1208+
1209+ # For each room we need to find a joined member we can use to send
1210+ # the dummy event with.
1211+ latest_event_ids = await self .store .get_prev_events_for_room (room_id )
1212+ members = await self .state .get_current_users_in_room (
1213+ room_id , latest_event_ids = latest_event_ids
1214+ )
1215+ for user_id in members :
1216+ if not self .hs .is_mine_id (user_id ):
1217+ continue
1218+ requester = create_requester (user_id )
1219+ try :
1220+ event , context = await self .create_event (
1221+ requester ,
1222+ {
1223+ "type" : "org.matrix.dummy_event" ,
1224+ "content" : {},
1225+ "room_id" : room_id ,
1226+ "sender" : user_id ,
1227+ },
1228+ prev_event_ids = latest_event_ids ,
1229+ )
1230+
1231+ event .internal_metadata .proactively_send = False
1232+
1233+ # Since this is a dummy-event it is OK if it is sent by a
1234+ # shadow-banned user.
1235+ await self .send_nonmember_event (
1236+ requester , event , context , ratelimit = False , ignore_shadow_ban = True ,
1237+ )
1238+ return True
1239+ except ConsentNotGivenError :
1240+ logger .info (
1241+ "Failed to send dummy event into room %s for user %s due to "
1242+ "lack of consent. Will try another user" % (room_id , user_id )
1243+ )
1244+ except AuthError :
1245+ logger .info (
1246+ "Failed to send dummy event into room %s for user %s due to "
1247+ "lack of power. Will try another user" % (room_id , user_id )
1248+ )
1249+ return False
1250+
12451251 def _expire_rooms_to_exclude_from_dummy_event_insertion (self ):
12461252 expire_before = self .clock .time_msec () - _DUMMY_EVENT_ROOM_EXCLUSION_EXPIRY
12471253 to_expire = set ()
0 commit comments