File tree Expand file tree Collapse file tree 2 files changed +66
-0
lines changed
Expand file tree Collapse file tree 2 files changed +66
-0
lines changed Original file line number Diff line number Diff line change @@ -132,3 +132,52 @@ pub(super) async fn room_prune_empty(&self, force: bool) -> Result {
132132
133133 Ok ( ( ) )
134134}
135+
136+ #[ admin_command]
137+ pub ( super ) async fn room_delete_rooms (
138+ & self ,
139+ page : Option < usize > ,
140+ room_index : Vec < usize > ,
141+ force : bool ,
142+ exclude_disabled : bool ,
143+ exclude_banned : bool ,
144+ ) -> Result {
145+ let page = page. unwrap_or ( 1 ) ;
146+ let mut rooms = self
147+ . services
148+ . metadata
149+ . iter_ids ( )
150+ . filter_map ( async |room_id| {
151+ ( !exclude_disabled || !self . services . metadata . is_disabled ( room_id) . await )
152+ . then_some ( room_id)
153+ } )
154+ . filter_map ( async |room_id| {
155+ ( !exclude_banned || !self . services . metadata . is_banned ( room_id) . await )
156+ . then_some ( room_id)
157+ } )
158+ . then ( |room_id| get_room_info ( self . services , room_id) )
159+ . collect :: < Vec < _ > > ( )
160+ . await ;
161+
162+ rooms. sort_by_key ( |r| r. 1 ) ;
163+ rooms. reverse ( ) ;
164+ let rooms = rooms
165+ . into_iter ( )
166+ . skip ( page. saturating_sub ( 1 ) . saturating_mul ( PAGE_SIZE ) )
167+ . take ( PAGE_SIZE )
168+ . collect :: < Vec < _ > > ( ) ;
169+ // get room_id from room_index
170+ let rooms = room_index
171+ . iter ( )
172+ . filter_map ( |i| {
173+ i. checked_sub ( 1 )
174+ . and_then ( |idx| rooms. get ( idx) . cloned ( ) )
175+ } )
176+ . collect :: < Vec < _ > > ( ) ;
177+ // call the delete_room function for each room
178+ for room in rooms {
179+ self . room_delete ( room. 0 , force) . await ?;
180+ }
181+
182+ Ok ( ( ) )
183+ }
Original file line number Diff line number Diff line change @@ -69,4 +69,21 @@ pub(super) enum RoomCommand {
6969 #[ arg( short, long) ]
7070 force : bool ,
7171 } ,
72+
73+ /// - Delete rooms
74+ DeleteRooms {
75+ #[ arg( long) ]
76+ page : Option < usize > ,
77+
78+ room_index : Vec < usize > ,
79+
80+ #[ arg( short, long) ]
81+ force : bool ,
82+
83+ #[ arg( long) ]
84+ exclude_disabled : bool ,
85+
86+ #[ arg( long) ]
87+ exclude_banned : bool ,
88+ } ,
7289}
You can’t perform that action at this time.
0 commit comments