diff options
| -rw-r--r-- | alembic/versions/451f61f7f7cb_add_is_verified_column.py | 28 | ||||
| -rw-r--r-- | config-default.toml | 3 | ||||
| -rw-r--r-- | metricity/bot.py | 17 | ||||
| -rw-r--r-- | metricity/config.py | 1 | ||||
| -rw-r--r-- | metricity/models.py | 4 | 
5 files changed, 47 insertions, 6 deletions
diff --git a/alembic/versions/451f61f7f7cb_add_is_verified_column.py b/alembic/versions/451f61f7f7cb_add_is_verified_column.py new file mode 100644 index 0000000..2c03698 --- /dev/null +++ b/alembic/versions/451f61f7f7cb_add_is_verified_column.py @@ -0,0 +1,28 @@ +"""Add is_verified column + +Revision ID: 451f61f7f7cb +Revises: 5683123ff89a +Create Date: 2020-08-29 17:19:32.029529 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '451f61f7f7cb' +down_revision = '5683123ff89a' +branch_labels = None +depends_on = None + + +def upgrade(): +    # ### commands auto generated by Alembic - please adjust! ### +    op.add_column('users', sa.Column('is_verified', sa.Boolean(), nullable=True)) +    # ### end Alembic commands ### + + +def downgrade(): +    # ### commands auto generated by Alembic - please adjust! ### +    op.drop_column('users', 'is_verified') +    # ### end Alembic commands ### diff --git a/config-default.toml b/config-default.toml index 1af0e9e..6333771 100644 --- a/config-default.toml +++ b/config-default.toml @@ -41,6 +41,9 @@ ignore_categories = [  # Respond to opt-in/opt-out commands in the following channel  bot_commands_channel = 267659945086812160 +# Role ID that is used as a role gate on the server +role_gate_id = 352427296948486144 +  [database]  # Postgres! diff --git a/metricity/bot.py b/metricity/bot.py index da12a59..b8f4b0e 100644 --- a/metricity/bot.py +++ b/metricity/bot.py @@ -142,7 +142,8 @@ async def on_guild_available(guild: Guild) -> None:              "created_at": user.created_at,              "is_staff": BotConfig.staff_role_id in [role.id for role in user.roles],              "bot": user.bot, -            "in_guild": True +            "in_guild": True, +            "is_verified": BotConfig.role_gate_id in [role.id for role in user.roles],          })      log.info(f"Performing bulk upsert of {len(users)} rows") @@ -174,7 +175,8 @@ async def on_member_join(member: Member) -> None:              avatar_hash=member.avatar,              joined_at=member.joined_at,              created_at=member.created_at, -            is_staff=BotConfig.staff_role_id in [role.id for role in member.roles] +            is_staff=BotConfig.staff_role_id in [role.id for role in member.roles], +            is_verified=False          ).apply()      else:          try: @@ -184,7 +186,8 @@ async def on_member_join(member: Member) -> None:                  avatar_hash=member.avatar,                  joined_at=member.joined_at,                  created_at=member.created_at, -                is_staff=BotConfig.staff_role_id in [role.id for role in member.roles] +                is_staff=BotConfig.staff_role_id in [role.id for role in member.roles], +                is_verified=False              )          except UniqueViolationError:              pass @@ -217,6 +220,8 @@ async def on_member_update(_before: Member, member: Member) -> None:      if not member.joined_at:          return +    roles = set([role.id for role in member.roles]) +      if db_user := await User.get(str(member.id)):          if (              db_user.name != member.name or @@ -230,7 +235,8 @@ async def on_member_update(_before: Member, member: Member) -> None:                  avatar_hash=member.avatar,                  joined_at=member.joined_at,                  created_at=member.created_at, -                is_staff=BotConfig.staff_role_id in [role.id for role in member.roles] +                is_staff=BotConfig.staff_role_id in roles, +                is_verified=BotConfig.role_gate_id in roles              ).apply()      else:          try: @@ -240,7 +246,8 @@ async def on_member_update(_before: Member, member: Member) -> None:                  avatar_hash=member.avatar,                  joined_at=member.joined_at,                  created_at=member.created_at, -                is_staff=BotConfig.staff_role_id in [role.id for role in member.roles] +                is_staff=BotConfig.staff_role_id in roles, +                is_verified=BotConfig.role_gate_id in roles              )          except UniqueViolationError:              pass diff --git a/metricity/config.py b/metricity/config.py index 1cf7dfa..2078acc 100644 --- a/metricity/config.py +++ b/metricity/config.py @@ -114,6 +114,7 @@ class BotConfig(metaclass=ConfigSection):      guild_id: int      staff_role_id: int +    role_gate_id: int      staff_categories: List[int]      ignore_categories: List[int] diff --git a/metricity/models.py b/metricity/models.py index 3ce965e..7e9bda7 100644 --- a/metricity/models.py +++ b/metricity/models.py @@ -46,6 +46,7 @@ class User(db.Model):      opt_out = db.Column(db.Boolean, default=False)      bot = db.Column(db.Boolean, default=False)      in_guild = db.Column(db.Boolean, default=True) +    is_verified = db.Column(db.Boolean, default=False)      @classmethod      def bulk_upsert(cls: type, users: List[Dict[str, Any]]) -> Any: @@ -58,7 +59,8 @@ class User(db.Model):              "joined_at",              "is_staff",              "bot", -            "in_guild" +            "in_guild", +            "is_verified"          ]          return qs.on_conflict_do_update(  |