diff options
author | 2020-08-25 19:57:57 +0100 | |
---|---|---|
committer | 2020-08-25 19:57:57 +0100 | |
commit | c4ea4f0f5474a3e28e47adb7b306fb40cc68157a (patch) | |
tree | 0c65994f78eda3e92eeb3d642b5f0b229d9d0af7 | |
parent | Linting (diff) |
Add in_guild column to represent membership
-rw-r--r-- | alembic/versions/5683123ff89a_add_in_guild_column.py | 28 | ||||
-rw-r--r-- | metricity/bot.py | 20 | ||||
-rw-r--r-- | metricity/models.py | 4 |
3 files changed, 50 insertions, 2 deletions
diff --git a/alembic/versions/5683123ff89a_add_in_guild_column.py b/alembic/versions/5683123ff89a_add_in_guild_column.py new file mode 100644 index 0000000..12d67a1 --- /dev/null +++ b/alembic/versions/5683123ff89a_add_in_guild_column.py @@ -0,0 +1,28 @@ +"""add in_guild column + +Revision ID: 5683123ff89a +Revises: 2743389eb63e +Create Date: 2020-08-25 19:57:41.958297 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '5683123ff89a' +down_revision = '2743389eb63e' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('users', sa.Column('in_guild', sa.Boolean(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('users', 'in_guild') + # ### end Alembic commands ### diff --git a/metricity/bot.py b/metricity/bot.py index 5b5b961..09eda54 100644 --- a/metricity/bot.py +++ b/metricity/bot.py @@ -121,6 +121,8 @@ async def on_guild_available(guild: Guild) -> None: log.info("Beginning user synchronisation process") + await User.update.values(in_guild=False) + users = [] for user in guild.members: @@ -131,7 +133,8 @@ async def on_guild_available(guild: Guild) -> None: "joined_at": user.joined_at, "created_at": user.created_at, "is_staff": BotConfig.staff_role_id in [role.id for role in user.roles], - "bot": user.bot + "bot": user.bot, + "in_guild": True }) log.info(f"Performing bulk upsert of {len(users)} rows") @@ -179,6 +182,20 @@ async def on_member_join(member: Member) -> None: @bot.event +async def on_member_remove(member: Member) -> None: + """On a user leaving the server mark in_guild as False.""" + await sync_process_complete.wait() + + if member.guild.id != BotConfig.guild_id: + return + + if db_user := await User.get(str(member.id)): + await db_user.update( + in_guild=False + ).apply() + + async def on_member_update(_before: Member, member: Member) -> None: """When a member updates their profile, update the DB record.""" await sync_process_complete.wait() @@ -231,6 +248,7 @@ async def on_message(message: DiscordMessage) -> None: if message.guild.id != BotConfig.guild_id: return + await sync_process_complete.wait() await channel_sync_in_progress.wait() if author := await User.get(str(message.author.id)): diff --git a/metricity/models.py b/metricity/models.py index 0489e8c..a2be73d 100644 --- a/metricity/models.py +++ b/metricity/models.py @@ -45,6 +45,7 @@ class User(db.Model): is_staff = db.Column(db.Boolean, nullable=False) opt_out = db.Column(db.Boolean, default=False) bot = db.Column(db.Boolean, default=False) + in_guild = db.Column(db.Boolean, default=True) @classmethod def bulk_upsert(cls: type, users: List[Dict[str, Any]]) -> Any: @@ -57,7 +58,8 @@ class User(db.Model): "joined_at", "is_staff", "opt_out", - "bot" + "bot", + "in_guild" ] return qs.on_conflict_do_update( |