aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2019-01-03 19:29:50 +0100
committerGravatar Johannes Christ <[email protected]>2019-01-03 19:29:50 +0100
commitf0078841f4f4c48b04478c5de2cbbf32f0839523 (patch)
treead8780f8f8b2f74fef6040a0be589dcf3cac9f2e
parentRemove useless `chunk_by` function. (diff)
Update users who joined and left.
-rw-r--r--bot/cogs/sync/syncers.py30
1 files changed, 27 insertions, 3 deletions
diff --git a/bot/cogs/sync/syncers.py b/bot/cogs/sync/syncers.py
index 57df2c519..1ff04e1d8 100644
--- a/bot/cogs/sync/syncers.py
+++ b/bot/cogs/sync/syncers.py
@@ -62,14 +62,16 @@ async def sync_roles(bot: Bot, guild: Guild):
)
-def get_users_for_update(
+def get_users_for_sync(
guild_users: Dict[int, User], api_users: Dict[int, User]
) -> ValuesView[User]:
"""
Obtain a set of users to update on the website.
"""
+ users_to_create = set()
users_to_update = set()
+
for api_user in api_users.values():
guild_user = guild_users.get(api_user.id)
if guild_user is not None:
@@ -79,7 +81,14 @@ def get_users_for_update(
# User left
api_user._replace(in_guild=False)
users_to_update.add(guild_user)
- return users_to_update
+
+ new_user_ids = set(guild_users.keys()) - set(api_users.keys())
+ for user_id in new_user_ids:
+ # User joined
+ new_user = guild_users[user_id]
+ users_to_create.add(new_user)
+
+ return users_to_create, users_to_update
async def sync_users(bot: Bot, guild: Guild):
@@ -104,7 +113,22 @@ async def sync_users(bot: Bot, guild: Guild):
)
for member in guild.members
}
- users_to_update = get_users_for_update(guild_users, api_users)
+ users_to_create, users_to_update = get_users_for_sync(guild_users, api_users)
+ log.info("Creating a total of `%d` users on the site.", len(users_to_create))
+ for user in users_to_create:
+ await bot.api_client.post(
+ 'bot/users',
+ json={
+ 'avatar_hash': user.avatar_hash,
+ 'discriminator': user.discriminator,
+ 'id': user.id,
+ 'in_guild': user.in_guild,
+ 'name': user.name,
+ 'roles': list(user.roles)
+ }
+ )
+ log.info("User creation complete.")
+
log.info("Updating a total of `%d` users on the site.", len(users_to_update))
for user in users_to_update:
if user is None: # ??