@@ -90,12 +90,18 @@ def change_instance_3_3(instance: dict):
9090 instance ['timezone' ] = 'UTC'
9191 action ['times' ] = action .pop ('utc_times' )
9292
93+ def change_instance_3_4 (instance : dict ):
94+ if 'warn' in instance and 'text' in instance ['warn' ]:
95+ instance ['warn' ]['message' ] = instance ['warn' ].pop ('text' )
96+
9397 if new_version == '3.1' :
9498 change_instance = change_instance_3_1
9599 elif new_version == '3.2' :
96100 change_instance = change_instance_3_2
97101 elif new_version == '3.3' :
98102 change_instance = change_instance_3_3
103+ elif new_version == '3.4' :
104+ change_instance = change_instance_3_4
99105 else :
100106 return
101107
@@ -245,7 +251,7 @@ async def warn_users(self, server: Server, config: dict, rconf: dict, max_warn_t
245251 times : list | dict = warn .get ('times' , [0 ])
246252 if isinstance (times , list ):
247253 warn_times = sorted (times , reverse = True )
248- warn_text = warn .get ('text ' , '!!! {item} will {what} in {when} !!!' )
254+ warn_text = warn .get ('message ' , '!!! {item} will {what} in {when} !!!' )
249255 elif isinstance (times , dict ):
250256 warn_times = sorted (times .keys (), reverse = True )
251257 else :
@@ -292,8 +298,26 @@ async def do_warn(warn_time: int):
292298 if math .ceil (i / (60 if i >= 60 else 1 )) <= math .ceil (restart_in / (60 if i >= 60 else 1 ))
293299 ]
294300 await utils .run_parallel_nofail (* tasks )
295- # sleep until the restart should happen
296- await asyncio .sleep (min (restart_in , min (warn_times )))
301+
302+ if warn .get ('countdown' ):
303+ timer = min (restart_in , min (warn_times ))
304+ countdown = warn ['countdown' ].get ('time' , 10 )
305+ warn_text = warn .get ('message' , warn ['countdown' ].get ('message' , 0 ))
306+ while timer > countdown :
307+ await asyncio .sleep (1 )
308+ timer -= 1
309+ while timer != 0 :
310+ message = warn_text .format (item = item , what = action , when = utils .format_time (timer ))
311+ await server .sendPopupMessage (Coalition .ALL , message , 1 )
312+ await server .sendChatMessage (Coalition .ALL , message )
313+ await asyncio .sleep (1 )
314+ timer -= 1
315+
316+ # sleep until the countdown should happen
317+ await asyncio .sleep (min (restart_in , min (warn_times )))
318+ else :
319+ # sleep until the restart should happen
320+ await asyncio .sleep (min (restart_in , min (warn_times )))
297321
298322 async def teardown_dcs (self , server : Server , member : discord .Member | None = None ):
299323 await self .bot .bus .send_to_node ({"command" : "onShutdown" , "server_name" : server .name })
0 commit comments