aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-12-19 01:49:16 +0000
committerGravatar GitHub <[email protected]>2020-12-19 01:49:16 +0000
commit80dd2302cd647531631c55a4328ff1709eef0c16 (patch)
tree40d2b72e7922e027ad09c8b3ac4876222172321d
parentUpdate verification.py (diff)
parentCorrectly check if the user is pending (diff)
Merge pull request #1329 from python-discord/native-gating
Better handle native gated users
-rw-r--r--bot/exts/moderation/verification.py27
1 files changed, 15 insertions, 12 deletions
diff --git a/bot/exts/moderation/verification.py b/bot/exts/moderation/verification.py
index 7aa559617..cc8abee42 100644
--- a/bot/exts/moderation/verification.py
+++ b/bot/exts/moderation/verification.py
@@ -182,6 +182,8 @@ class Verification(Cog):
self.bot = bot
self.bot.loop.create_task(self._maybe_start_tasks())
+ self.pending_members = set()
+
def cog_unload(self) -> None:
"""
Cancel internal tasks.
@@ -570,18 +572,7 @@ class Verification(Cog):
# We will send them an alternate DM once they verify with the welcome
# video.
if raw_member.get("pending"):
- await self.member_gating_cache.set(member.id, True)
-
- # TODO: Temporary, remove soon after asking joe.
- await self.mod_log.send_log_message(
- icon_url=self.bot.user.avatar_url,
- colour=discord.Colour.blurple(),
- title="New native gated user",
- channel_id=constants.Channels.user_log,
- text=f"<@{member.id}> ({member.id})",
- )
-
- return
+ self.pending_members.add(member.id)
log.trace(f"Sending on join message to new member: {member.id}")
try:
@@ -590,6 +581,18 @@ class Verification(Cog):
log.exception("DM dispatch failed on unexpected error code")
@Cog.listener()
+ async def on_socket_response(self, msg: dict) -> None:
+ """Check if the users pending status has changed and send them them a welcome message."""
+ if msg.get("t") == "GUILD_MEMBER_UPDATE":
+ user_id = int(msg["d"]["user"]["id"])
+
+ if msg["d"]["pending"] is False:
+ if user_id in self.pending_members:
+ self.pending_members.remove(user_id)
+ if member := self.bot.get_guild(constants.Guild.id).get_member(user_id):
+ await safe_dm(member.send(ALTERNATE_VERIFIED_MESSAGE))
+
+ @Cog.listener()
async def on_member_update(self, before: discord.Member, after: discord.Member) -> None:
"""Check if we need to send a verification DM to a gated user."""
before_roles = [role.id for role in before.roles]