diff options
| author | 2020-09-12 02:38:43 +0100 | |
|---|---|---|
| committer | 2020-09-12 02:38:43 +0100 | |
| commit | 83869109fe2a1a2405289263c85286368ba1ba3a (patch) | |
| tree | 954ff0ffbd3489fe415c9dc167abce5e31579ef4 | |
| parent | Add some new staff categories (diff) | |
Store user verification date
| -rw-r--r-- | alembic/versions/aa3517f1b1bd_add_verified_at_column.py | 28 | ||||
| -rw-r--r-- | metricity/bot.py | 16 | ||||
| -rw-r--r-- | metricity/models.py | 3 | 
3 files changed, 44 insertions, 3 deletions
diff --git a/alembic/versions/aa3517f1b1bd_add_verified_at_column.py b/alembic/versions/aa3517f1b1bd_add_verified_at_column.py new file mode 100644 index 0000000..f7ea257 --- /dev/null +++ b/alembic/versions/aa3517f1b1bd_add_verified_at_column.py @@ -0,0 +1,28 @@ +"""Add verified_at column + +Revision ID: aa3517f1b1bd +Revises: 45973dacf7da +Create Date: 2020-09-12 02:34:11.722267 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'aa3517f1b1bd' +down_revision = '45973dacf7da' +branch_labels = None +depends_on = None + + +def upgrade(): +    # ### commands auto generated by Alembic - please adjust! ### +    op.add_column('users', sa.Column('verified_at', sa.DateTime(), nullable=True)) +    # ### end Alembic commands ### + + +def downgrade(): +    # ### commands auto generated by Alembic - please adjust! ### +    op.drop_column('users', 'verified_at') +    # ### end Alembic commands ### diff --git a/metricity/bot.py b/metricity/bot.py index 65a5e19..bcd003c 100644 --- a/metricity/bot.py +++ b/metricity/bot.py @@ -1,6 +1,7 @@  """Creating and configuring a Discord client for Metricity."""  import asyncio +from datetime import datetime  import logging  from typing import Any, Generator, List @@ -212,7 +213,7 @@ async def on_member_remove(member: Member) -> None:  @bot.event -async def on_member_update(_before: Member, member: Member) -> None: +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() @@ -223,6 +224,16 @@ async def on_member_update(_before: Member, member: Member) -> None:      if not member.joined_at:          return +    before_roles = set([r.id for r in before.roles]) +    after_roles = set([r.id for r in member.roles]) + +    diff = after_roles - before_roles + +    verified_at = None + +    if BotConfig.role_gate_id in diff: +        verified_at = datetime.now() +      roles = set([role.id for role in member.roles])      if db_user := await User.get(str(member.id)): @@ -240,7 +251,8 @@ async def on_member_update(_before: Member, member: Member) -> None:                  created_at=member.created_at,                  is_staff=BotConfig.staff_role_id in roles,                  is_verified=BotConfig.role_gate_id in roles, -                public_flags=dict(member.public_flags) +                public_flags=dict(member.public_flags), +                verified_at=verified_at or db_user.verified_at              ).apply()      else:          try: diff --git a/metricity/models.py b/metricity/models.py index cf6b9c9..79c3cfd 100644 --- a/metricity/models.py +++ b/metricity/models.py @@ -48,6 +48,7 @@ class User(db.Model):      in_guild = db.Column(db.Boolean, default=True)      is_verified = db.Column(db.Boolean, default=False)      public_flags = db.Column(db.JSON, default={}) +    verified_at = db.Column(db.DateTime, nullable=True)      @classmethod      def bulk_upsert(cls: type, users: List[Dict[str, Any]]) -> Any: @@ -62,7 +63,7 @@ class User(db.Model):              "bot",              "in_guild",              "is_verified", -            "public_flags", +            "public_flags"          ]          return qs.on_conflict_do_update(  |