aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alembic/versions/451f61f7f7cb_add_is_verified_column.py28
-rw-r--r--config-default.toml3
-rw-r--r--metricity/bot.py17
-rw-r--r--metricity/config.py1
-rw-r--r--metricity/models.py4
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(