@@ -714,26 +714,23 @@ async def _prune(self, interaction: discord.Interaction,
714714 else :
715715 await interaction .followup .send ("{} is not a valid UCID!" .format (user ))
716716 return
717- for plugin in self .bot .cogs .values (): # type: Plugin
718- await plugin .prune (conn , ucids = [ucid ])
719- await cursor .execute ('DELETE FROM players WHERE ucid = %s' , (ucid , ))
720- await cursor .execute ('DELETE FROM players_hist WHERE ucid = %s' , (ucid , ))
717+ await cursor .execute ('DELETE FROM players WHERE ucid = %s' , (ucid , ))
721718 if isinstance (user , discord .Member ):
722719 await interaction .followup .send (_ ("Data of user {} deleted." ).format (user .display_name ))
723720 else :
724721 await interaction .followup .send (_ ("Data of UCID {} deleted." ).format (ucid ))
725722 return
726723 elif _server :
727- for plugin in self .bot .cogs .values (): # type: Plugin
728- await plugin .prune (conn , server = _server )
729- await cursor .execute ('DELETE FROM servers WHERE server_name = %s' , (_server , ))
730- await cursor .execute ('DELETE FROM instances WHERE server_name = %s' , (_server , ))
731- await cursor .execute ('DELETE FROM message_persistence WHERE server_name = %s' , (_server , ))
724+ await cursor .execute ('DELETE FROM servers WHERE server_name = %s' , (_server , ))
725+ await cursor .execute ('VACCUM FULL statistics' )
726+ await cursor .execute ('VACUUM FULL missionstats' )
732727 await interaction .followup .send (_ ("Data of server {} deleted." ).format (_server ))
733728 return
734729 elif view .what in ['users' , 'non-members' ]:
735- sql = (f"SELECT ucid FROM players "
736- f"WHERE last_seen < (DATE((now() AT TIME ZONE 'utc')) - interval '{ view .age } days')" )
730+ sql = f"""
731+ SELECT ucid FROM players
732+ WHERE last_seen < (DATE((now() AT TIME ZONE 'utc')) - interval '{ view .age } days')
733+ """
737734 if view .what == 'non-members' :
738735 sql += ' AND discord_id = -1'
739736 await cursor .execute (sql )
@@ -745,20 +742,20 @@ async def _prune(self, interaction: discord.Interaction,
745742 interaction , _ ("This will delete {} players incl. their stats from the database.\n "
746743 "Are you sure?" ).format (len (ucids )), ephemeral = ephemeral ):
747744 return
748- for plugin in self .bot .cogs .values (): # type: Plugin
749- await plugin .prune (conn , ucids = ucids )
750745 for ucid in ucids :
751746 await cursor .execute ('DELETE FROM players WHERE ucid = %s' , (ucid , ))
752- await cursor .execute ('DELETE FROM players_hist WHERE ucid = %s' , (ucid ,))
753747 await interaction .followup .send (f"{ len (ucids )} players pruned." , ephemeral = ephemeral )
754748 elif view .what == 'data' :
755749 days = int (view .age )
756750 if not await utils .yn_question (
757751 interaction , _ ("This will delete all data older than {} days from the database.\n "
758752 "Are you sure?" ).format (days ), ephemeral = ephemeral ):
759753 return
754+ # some plugins need to prune their data based on the provided days
760755 for plugin in self .bot .cogs .values (): # type: Plugin
761- await plugin .prune (conn , days = days )
756+ await plugin .prune (conn , days )
757+ await cursor .execute ('VACCUM FULL statistics' )
758+ await cursor .execute ('VACUUM FULL missionstats' )
762759 await interaction .followup .send (_ ("All data older than {} days pruned." ).format (days ),
763760 ephemeral = ephemeral )
764761 await self .bot .audit (f'pruned the database' , user = interaction .user )
0 commit comments