mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-07 11:48:55 -05:00
Accept discord.Objects for cases, add last_known_username param in create_case() (#4326)
* [Modlog] Fix typehints for create_case * Simplify Logic after review * discord.abc.User to catch both member and user objects and other potential discord.Object's being sent * fix typehints and Case.edit() * fix docstrings in create_case * Add note about last_known_username * fix the weird thing that scared me
This commit is contained in:
parent
6162b0f2bd
commit
fec25fcaba
@ -240,13 +240,13 @@ class Case:
|
||||
guild: discord.Guild,
|
||||
created_at: int,
|
||||
action_type: str,
|
||||
user: Union[discord.User, int],
|
||||
moderator: Optional[Union[discord.User, int]],
|
||||
user: Union[discord.Object, discord.abc.User, int],
|
||||
moderator: Optional[Union[discord.Object, discord.abc.User, int]],
|
||||
case_number: int,
|
||||
reason: str = None,
|
||||
until: int = None,
|
||||
channel: Optional[Union[discord.TextChannel, discord.VoiceChannel, int]] = None,
|
||||
amended_by: Optional[Union[discord.User, int]] = None,
|
||||
amended_by: Optional[Union[discord.Object, discord.abc.User, int]] = None,
|
||||
modified_at: Optional[int] = None,
|
||||
message: Optional[discord.Message] = None,
|
||||
last_known_username: Optional[str] = None,
|
||||
@ -256,12 +256,18 @@ class Case:
|
||||
self.created_at = created_at
|
||||
self.action_type = action_type
|
||||
self.user = user
|
||||
if isinstance(user, discord.Object):
|
||||
self.user = user.id
|
||||
self.last_known_username = last_known_username
|
||||
self.moderator = moderator
|
||||
if isinstance(moderator, discord.Object):
|
||||
self.moderator = moderator.id
|
||||
self.reason = reason
|
||||
self.until = until
|
||||
self.channel = channel
|
||||
self.amended_by = amended_by
|
||||
if isinstance(amended_by, discord.Object):
|
||||
self.amended_by = amended_by.id
|
||||
self.modified_at = modified_at
|
||||
self.case_number = case_number
|
||||
self.message = message
|
||||
@ -280,9 +286,12 @@ class Case:
|
||||
data.pop("case_number", None)
|
||||
# last username is set based on passed user object
|
||||
data.pop("last_known_username", None)
|
||||
|
||||
for item in list(data.keys()):
|
||||
setattr(self, item, data[item])
|
||||
for item, value in data.items():
|
||||
if isinstance(value, discord.Object):
|
||||
# probably expensive to call but meh should capture all cases
|
||||
setattr(self, item, value.id)
|
||||
else:
|
||||
setattr(self, item, value)
|
||||
|
||||
# update last known username
|
||||
if not isinstance(self.user, int):
|
||||
@ -388,12 +397,10 @@ class Case:
|
||||
user = f"[{translated}] ({self.user})"
|
||||
else:
|
||||
user = f"{self.last_known_username} ({self.user})"
|
||||
avatar_url = None
|
||||
else:
|
||||
user = escape_spoilers(
|
||||
filter_invites(f"{self.user} ({self.user.id})")
|
||||
) # Invites and spoilers get rendered even in embeds.
|
||||
avatar_url = self.user.avatar_url
|
||||
|
||||
if embed:
|
||||
emb = discord.Embed(title=title, description=reason)
|
||||
@ -800,11 +807,12 @@ async def create_case(
|
||||
guild: discord.Guild,
|
||||
created_at: datetime,
|
||||
action_type: str,
|
||||
user: Union[discord.User, discord.Member],
|
||||
moderator: Optional[Union[discord.User, discord.Member]] = None,
|
||||
user: Union[discord.Object, discord.abc.User, int],
|
||||
moderator: Optional[Union[discord.Object, discord.abc.User, int]] = None,
|
||||
reason: Optional[str] = None,
|
||||
until: Optional[datetime] = None,
|
||||
channel: Optional[discord.TextChannel] = None,
|
||||
last_known_username: Optional[str] = None,
|
||||
) -> Optional[Case]:
|
||||
"""
|
||||
Creates a new case.
|
||||
@ -823,9 +831,9 @@ async def create_case(
|
||||
(similarly to how Python treats naive `datetime` objects).
|
||||
action_type: str
|
||||
The type of action that was taken
|
||||
user: Union[discord.User, discord.Member]
|
||||
user: Union[discord.Object, discord.abc.User, int]
|
||||
The user target by the action
|
||||
moderator: Optional[Union[discord.User, discord.Member]]
|
||||
moderator: Optional[Union[discord.Object, discord.abc.User, int]]
|
||||
The moderator who took the action
|
||||
reason: Optional[str]
|
||||
The reason the action was taken
|
||||
@ -835,6 +843,10 @@ async def create_case(
|
||||
(similarly to how Python treats naive `datetime` objects).
|
||||
channel: Optional[discord.TextChannel]
|
||||
The channel the action was taken in
|
||||
last_known_username: Optional[str]
|
||||
The last known username of the user
|
||||
Note: This is ignored if a Member or User object is provided
|
||||
in the user field
|
||||
"""
|
||||
case_type = await get_casetype(action_type, guild)
|
||||
if case_type is None:
|
||||
@ -865,6 +877,7 @@ async def create_case(
|
||||
amended_by=None,
|
||||
modified_at=None,
|
||||
message=None,
|
||||
last_known_username=last_known_username,
|
||||
)
|
||||
await _config.custom(_CASES, str(guild.id), str(next_case_number)).set(case.to_json())
|
||||
await _config.guild(guild).latest_case_number.set(next_case_number)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user