Fix various issues

This commit is contained in:
Zeva Rose 2022-05-04 23:08:37 -06:00
parent c47d0373d4
commit d0ec406e1e

View file

@ -1,4 +1,5 @@
"""Custom JARVIS client.""" """Custom JARVIS client."""
import asyncio
import logging import logging
import re import re
import traceback import traceback
@ -30,7 +31,7 @@ from naff.api.events.discord import (
from naff.api.events.internal import Button from naff.api.events.internal import Button
from naff.client.errors import CommandCheckFailure, CommandOnCooldown, HTTPException from naff.client.errors import CommandCheckFailure, CommandOnCooldown, HTTPException
from naff.client.utils.misc_utils import find, find_all, get from naff.client.utils.misc_utils import find, find_all, get
from naff.models.discord.channel import DMChannel, GuildText from naff.models.discord.channel import DMChannel
from naff.models.discord.embed import Embed, EmbedField from naff.models.discord.embed import Embed, EmbedField
from naff.models.discord.enums import AuditLogEventType, Permissions from naff.models.discord.enums import AuditLogEventType, Permissions
from naff.models.discord.message import Message from naff.models.discord.message import Message
@ -298,7 +299,9 @@ class Jarvis(Client):
async def process_verify(self, before: Member, after: Member) -> Embed: async def process_verify(self, before: Member, after: Member) -> Embed:
"""Process user verification.""" """Process user verification."""
auditlog = await after.guild.fetch_audit_log(user_id=before.id, action_type=AuditLogEventType.MEMBER_ROLE_UPDATE) auditlog = await after.guild.fetch_audit_log(
user_id=before.id, action_type=AuditLogEventType.MEMBER_ROLE_UPDATE
)
audit_event = get(auditlog.events, reason="Verification passed") audit_event = get(auditlog.events, reason="Verification passed")
if audit_event: if audit_event:
admin_mention = "[N/A]" admin_mention = "[N/A]"
@ -308,9 +311,14 @@ class Jarvis(Client):
admin_text = f"{admin.username}#{admin.discriminator}" admin_text = f"{admin.username}#{admin.discriminator}"
fields = ( fields = (
EmbedField(name="Moderator", value=f"{admin_mention} ({admin_text})"), EmbedField(name="Moderator", value=f"{admin_mention} ({admin_text})"),
EmbedField(name="Reason", value=audit_event.reason) EmbedField(name="Reason", value=audit_event.reason),
)
embed = build_embed(
title="User Verified",
description=f"{after.mention} was verified",
fields=fields,
color="#fc9e3f",
) )
embed = build_embed(title="User Verified", description=f"{after.mention} was verified", fields=fields, color="#fc9e3f")
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url) embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}") embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
return embed return embed
@ -320,7 +328,9 @@ class Jarvis(Client):
if before.roles == after.roles: if before.roles == after.roles:
return return
auditlog = await after.guild.fetch_audit_log(user_id=before.id, action_type=AuditLogEventType.MEMBER_ROLE_UPDATE) auditlog = await after.guild.fetch_audit_log(
user_id=before.id, action_type=AuditLogEventType.MEMBER_ROLE_UPDATE
)
new_roles = {} new_roles = {}
removed_roles = {} removed_roles = {}
@ -337,28 +347,47 @@ class Jarvis(Client):
reason = entry.reason reason = entry.reason
new_roles[role] = reason new_roles[role] = reason
new_text = "\n".join(f"k [v]" for k, v in new_roles.items()) or "None" new_text = "\n".join(f"{k} [{v}]" for k, v in new_roles.items()) or "None"
removed_text = "\n".join(f"k [v]" for k, v in removed_roles.items()) or "None" removed_text = "\n".join(f"{k} [{v}]" for k, v in removed_roles.items()) or "None"
fields = ( fields = (
EmbedField(name="Added Roles", value=new_text), EmbedField(name="Added Roles", value=new_text),
EmbedField(name="Removed Roles", value=removed_text), EmbedField(name="Removed Roles", value=removed_text),
) )
embed = build_embed(title="User Roles Changed", description=f"{after.mention} had roles changed", fields=fields, color="#fc9e3f") embed = build_embed(
title="User Roles Changed",
description=f"{after.mention} had roles changed",
fields=fields,
color="#fc9e3f",
)
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url) embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}") embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
return embed return embed
async def process_rename(self, before: Member, after: Member) -> None: async def process_rename(self, before: Member, after: Member) -> None:
"""Process name change.""" """Process name change."""
if before.nickname == after.nickname and before.discriminator == after.discriminator and before.username == after.username: if (
before.nickname == after.nickname
and before.discriminator == after.discriminator
and before.username == after.username
):
return return
fields = ( fields = (
EmbedField(name="Before", value=f"{before.display_name} ({before.username}#{before.discriminator})"), EmbedField(
EmbedField(name="After", value=f"{after.display_name} ({after.username}#{after.discriminator})"), name="Before",
value=f"{before.display_name} ({before.username}#{before.discriminator})",
),
EmbedField(
name="After", value=f"{after.display_name} ({after.username}#{after.discriminator})"
),
)
embed = build_embed(
title="User Renamed",
description=f"{after.mention} changed their name",
fields=fields,
color="#fc9e3f",
) )
embed = build_embed(title="User Renamed", description=f"{after.mention} changed their name", fields=fields, color="#fc9e3f")
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url) embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}") embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
return embed return embed
@ -369,7 +398,9 @@ class Jarvis(Client):
before = event.before before = event.before
after = event.after after = event.after
if (before.display_name == after.display_name and before.roles == after.roles) or (not after or not before): if (before.display_name == after.display_name and before.roles == after.roles) or (
not after or not before
):
return return
log = await Setting.find_one(q(guild=before.guild.id, setting="activitylog")) log = await Setting.find_one(q(guild=before.guild.id, setting="activitylog"))
@ -378,7 +409,7 @@ class Jarvis(Client):
await asyncio.sleep(0.5) # Wait for audit log await asyncio.sleep(0.5) # Wait for audit log
embed = None embed = None
if before._role_ids != after._role_ids: if before._role_ids != after._role_ids:
verified = await Settings.find_one(q(guild=before.guild.id, setting="verified")) verified = await Setting.find_one(q(guild=before.guild.id, setting="verified"))
v_role = None v_role = None
if verified: if verified:
v_role = await before.guild.fetch_role(verified.value) v_role = await before.guild.fetch_role(verified.value)
@ -389,7 +420,9 @@ class Jarvis(Client):
if not before.has_role(v_role) and after.has_role(v_role): if not before.has_role(v_role) and after.has_role(v_role):
embed = await self.process_verify(before, after) embed = await self.process_verify(before, after)
if not embed: if not embed:
embed = self.process_rolechange(before, after) or self.process_rename(before, after) embed = self.process_rolechange(before, after) or self.process_rename(
before, after
)
if embed: if embed:
await channel.send(embed=embed) await channel.send(embed=embed)