aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Chris Lovering <[email protected]>2024-06-18 20:25:50 +0100
committerGravatar Chris Lovering <[email protected]>2024-06-18 20:25:50 +0100
commit7389936010367287fd03a00a36ce2efad829ee31 (patch)
tree96d3a933e2b67f240ec049a0903774dd5d485fa9
parentBump version to 2.6.2 (diff)
Improve user in-guild sync processimprove-user-in-guild-sync
Closes #157 Previously we set all users in_guild to False, and relied on users being set back to in_guild when iterating through guild.members However, this caused two problems 1. For a short window a users in_guild status was incorrect 2. It required an update for all users in_guild to be sent to postgres to update in_guild back to True. This diff changes that, so instead only users who are not found in the guild have in_guild set to False
-rw-r--r--metricity/exts/event_listeners/startup_sync.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/metricity/exts/event_listeners/startup_sync.py b/metricity/exts/event_listeners/startup_sync.py
index 0f6264f..9452bca 100644
--- a/metricity/exts/event_listeners/startup_sync.py
+++ b/metricity/exts/event_listeners/startup_sync.py
@@ -35,9 +35,6 @@ class StartupSyncer(commands.Cog):
await _syncer_utils.sync_thread_archive_state(guild)
log.info("Beginning user synchronisation process")
- async with async_session() as sess:
- await sess.execute(update(models.User).values(in_guild=False))
- await sess.commit()
users = (
{
@@ -89,11 +86,25 @@ class StartupSyncer(commands.Cog):
created += [obj[0] == 0 for obj in objs].count(True)
updated += [obj[0] != 0 for obj in objs].count(True)
- log.info("User upsert: inserted %d rows, updated %d rows, done %d rows, %d rows remaining",
- created, updated, created + updated, total_users - (created + updated))
+ log.info(
+ "User upsert: inserted %d rows, updated %d rows, done %d rows, %d rows remaining",
+ created,
+ updated,
+ created + updated,
+ total_users - (created + updated),
+ )
await sess.commit()
+ log.info("Syncing user in-guild status")
+ in_guild_user_ids = {str(member.id) for member in guild.members}
+ async with async_session() as sess:
+ await sess.execute(
+ update(models.User)
+ .where(~models.User.id.in_(in_guild_user_ids))
+ .values(in_guild=False),
+ )
+ await sess.commit()
log.info("User upsert complete")
self.bot.sync_process_complete.set()