22import discord
33import re
44
5- from core import EventListener , event , Server , utils , get_translation , Coalition , DataObjectFactory , PersistentReport , \
6- Player
5+ from core import EventListener , event , Server , utils , get_translation , Coalition , DataObjectFactory , Player , Report
76from datetime import datetime , timedelta
87from psycopg .errors import UniqueViolation
98from psycopg .types .json import Json
@@ -90,17 +89,20 @@ async def cleanup(self, server: Server):
9089 await server .shutdown ()
9190 self .plugin .reset_serversettings (server )
9291
93- async def render_highscore (self , server : Server ):
92+ async def render_aar (self , server : Server , match : dict ):
9493 config = self .get_config (server )
9594 channel = self .bot .get_channel (config .get ('channels' , {}).get ('results' , - 1 ))
9695 if not channel :
9796 return
9897
9998 tournament = self .tournaments .get (server .name )
100- report = PersistentReport (self .bot , self .plugin_name , 'highscore.json' ,
101- embed_name = f"tournament_{ tournament ['tournament_id' ]} _highscore" ,
102- channel_id = channel .id )
103- await report .render (interaction = None , server_name = None , flt = CampaignFilter (period = tournament ['name' ]))
99+ report = Report (self .bot , self .plugin_name , 'aar.json' )
100+ env = await report .render (server_name = None , flt = CampaignFilter (period = tournament ['name' ]), match = match )
101+ try :
102+ await channel .send (embed = env .embed , file = discord .File (env .buffer , filename = 'aar.png' ))
103+ finally :
104+ if env .buffer :
105+ env .buffer .close ()
104106
105107 async def processEvent (self , name : str , server : Server , data : dict ) -> None :
106108 try :
@@ -113,6 +115,7 @@ async def processEvent(self, name: str, server: Server, data: dict) -> None:
113115 async def registerDCSServer (self , server : Server , data : dict ) -> None :
114116 tournament_id = await self .get_active_tournament (server )
115117 if not tournament_id :
118+ self .log .debug (f"registerDCSServer: No active tournament for { server .name } ." )
116119 self .tournaments .pop (server .name , None )
117120 return
118121
@@ -178,8 +181,10 @@ async def countdown_with_warnings(self, server: Server, delayed_start: int):
178181 async def onSimulationResume (self , server : Server , data : dict ) -> None :
179182 config = self .get_config (server )
180183 if 'delayed_start' in config :
184+ self .log .debug (f"onSimulationResume: Delayed start for { server .name } is set to { config ['delayed_start' ]} seconds." )
181185 self .tasks [server .name ] = asyncio .create_task (self .countdown_with_warnings (server , config ['delayed_start' ]))
182186 else :
187+ self .log .debug (f"onSimulationResume: Delayed start for { server .name } is not set." )
183188 self .round_started [server .name ] = True
184189
185190 async def disqualify (self , server : Server , player : Player , reason : str ) -> None :
@@ -403,7 +408,7 @@ async def check_tournament_finished(self, tournament_id: int) -> bool:
403408
404409 @event (name = "onMatchFinished" )
405410 async def onMatchFinished (self , server : Server , data : dict ) -> None :
406- winner = data ['winner' ]. lower ()
411+ winner = data ['winner' ]
407412 match_id = await self .get_active_match (server )
408413 if self .tasks .get (server .name ):
409414 self .tasks .pop (server .name ).cancel ()
@@ -442,8 +447,8 @@ async def onMatchFinished(self, server: Server, data: dict) -> None:
442447 # pause the server
443448 asyncio .create_task (server .current_mission .pause ())
444449
445- # update the highscore
446- asyncio .create_task (self .render_highscore (server ))
450+ # render an AAR
451+ asyncio .create_task (self .render_aar (server , data ))
447452
448453 # check if the match is finished
449454 await self .check_match_finished (server , match_id )
0 commit comments