diff options
author | 2020-08-29 17:20:25 +0100 | |
---|---|---|
committer | 2020-08-29 17:20:25 +0100 | |
commit | 173d2e13d7abc96bca33f529e28bdf94124b1365 (patch) | |
tree | d914265bc7072d50b0b44bfe24bf2b6933ce1094 | |
parent | Linting fixes (diff) |
Add support for measuring role gate effectiveness
-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( |