fix (rank refresh): Insert correctly.

This commit is contained in:
2023-08-24 18:53:18 +03:00
parent 77792d3a4a
commit 38ba7f1ded

View File

@@ -9,6 +9,7 @@ from discord.app_commands.transformers import AppCommandOptionType
from cachetools import LRUCache from cachetools import LRUCache
from meta import LionBot, LionContext, LionCog from meta import LionBot, LionContext, LionCog
from meta.logger import log_wrap
from wards import high_management_ward, high_management_iward from wards import high_management_ward, high_management_iward
from core.data import RankType from core.data import RankType
from utils.ui import ChoicedEnum, Transformed from utils.ui import ChoicedEnum, Transformed
@@ -462,6 +463,7 @@ class RankCog(LionCog):
async def on_xp_update(self, *xp_data): async def on_xp_update(self, *xp_data):
... ...
@log_wrap(action='interactive rank refresh')
async def interactive_rank_refresh(self, interaction: discord.Interaction, guild: discord.Guild): async def interactive_rank_refresh(self, interaction: discord.Interaction, guild: discord.Guild):
""" """
Interactively update ranks for everyone in the given guild. Interactively update ranks for everyone in the given guild.
@@ -469,7 +471,7 @@ class RankCog(LionCog):
t = self.bot.translator.t t = self.bot.translator.t
if not interaction.response.is_done(): if not interaction.response.is_done():
await interaction.response.defer(thinking=True, ephemeral=False) await interaction.response.defer(thinking=True, ephemeral=False)
ui = RankRefreshUI(self.bot, guild, callerid=interaction.user.id) ui = RankRefreshUI(self.bot, guild, callerid=interaction.user.id, timeout=None)
await ui.run(interaction) await ui.run(interaction)
# Retrieve fresh rank roles # Retrieve fresh rank roles
@@ -637,22 +639,14 @@ class RankCog(LionCog):
# First clear the member rank data entirely # First clear the member rank data entirely
await self.data.MemberRank.table.delete_where(guildid=guild.id) await self.data.MemberRank.table.delete_where(guildid=guild.id)
column = self._get_rankid_column(rank_type) column = self._get_rankid_column(rank_type)
tmptable = TemporaryTable( values = [
'_gid', '_uid', '_rankid', '_roleid',
types=('BIGINT', 'BIGINT', 'BIGINT', 'BIGINT')
)
tmptable.values = [
(guild.id, memberid, rank.rankid, rank.roleid) (guild.id, memberid, rank.rankid, rank.roleid)
for memberid, rank in true_member_ranks.items() for memberid, rank in true_member_ranks.items()
] ]
if tmptable.values: await self.data.MemberRank.table.insert_many(
await self.data.MemberRank.table.update_where( ('guildid', 'userid', column, 'last_roleid'),
guildid=tmptable['_gid'], *values
userid=tmptable['_uid'] )
).set(
**{column: tmptable['_rankid'], 'last_roleid': tmptable['_roleid']}
).from_expr(tmptable)
self.flush_guild_ranks(guild.id) self.flush_guild_ranks(guild.id)
await ui.set_done() await ui.set_done()
await ui.wait() await ui.wait()