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,
|
guild: discord.Guild,
|
||||||
created_at: int,
|
created_at: int,
|
||||||
action_type: str,
|
action_type: str,
|
||||||
user: Union[discord.User, int],
|
user: Union[discord.Object, discord.abc.User, int],
|
||||||
moderator: Optional[Union[discord.User, int]],
|
moderator: Optional[Union[discord.Object, discord.abc.User, int]],
|
||||||
case_number: int,
|
case_number: int,
|
||||||
reason: str = None,
|
reason: str = None,
|
||||||
until: int = None,
|
until: int = None,
|
||||||
channel: Optional[Union[discord.TextChannel, discord.VoiceChannel, 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,
|
modified_at: Optional[int] = None,
|
||||||
message: Optional[discord.Message] = None,
|
message: Optional[discord.Message] = None,
|
||||||
last_known_username: Optional[str] = None,
|
last_known_username: Optional[str] = None,
|
||||||
@ -256,12 +256,18 @@ class Case:
|
|||||||
self.created_at = created_at
|
self.created_at = created_at
|
||||||
self.action_type = action_type
|
self.action_type = action_type
|
||||||
self.user = user
|
self.user = user
|
||||||
|
if isinstance(user, discord.Object):
|
||||||
|
self.user = user.id
|
||||||
self.last_known_username = last_known_username
|
self.last_known_username = last_known_username
|
||||||
self.moderator = moderator
|
self.moderator = moderator
|
||||||
|
if isinstance(moderator, discord.Object):
|
||||||
|
self.moderator = moderator.id
|
||||||
self.reason = reason
|
self.reason = reason
|
||||||
self.until = until
|
self.until = until
|
||||||
self.channel = channel
|
self.channel = channel
|
||||||
self.amended_by = amended_by
|
self.amended_by = amended_by
|
||||||
|
if isinstance(amended_by, discord.Object):
|
||||||
|
self.amended_by = amended_by.id
|
||||||
self.modified_at = modified_at
|
self.modified_at = modified_at
|
||||||
self.case_number = case_number
|
self.case_number = case_number
|
||||||
self.message = message
|
self.message = message
|
||||||
@ -280,9 +286,12 @@ class Case:
|
|||||||
data.pop("case_number", None)
|
data.pop("case_number", None)
|
||||||
# last username is set based on passed user object
|
# last username is set based on passed user object
|
||||||
data.pop("last_known_username", None)
|
data.pop("last_known_username", None)
|
||||||
|
for item, value in data.items():
|
||||||
for item in list(data.keys()):
|
if isinstance(value, discord.Object):
|
||||||
setattr(self, item, data[item])
|
# probably expensive to call but meh should capture all cases
|
||||||
|
setattr(self, item, value.id)
|
||||||
|
else:
|
||||||
|
setattr(self, item, value)
|
||||||
|
|
||||||
# update last known username
|
# update last known username
|
||||||
if not isinstance(self.user, int):
|
if not isinstance(self.user, int):
|
||||||
@ -388,12 +397,10 @@ class Case:
|
|||||||
user = f"[{translated}] ({self.user})"
|
user = f"[{translated}] ({self.user})"
|
||||||
else:
|
else:
|
||||||
user = f"{self.last_known_username} ({self.user})"
|
user = f"{self.last_known_username} ({self.user})"
|
||||||
avatar_url = None
|
|
||||||
else:
|
else:
|
||||||
user = escape_spoilers(
|
user = escape_spoilers(
|
||||||
filter_invites(f"{self.user} ({self.user.id})")
|
filter_invites(f"{self.user} ({self.user.id})")
|
||||||
) # Invites and spoilers get rendered even in embeds.
|
) # Invites and spoilers get rendered even in embeds.
|
||||||
avatar_url = self.user.avatar_url
|
|
||||||
|
|
||||||
if embed:
|
if embed:
|
||||||
emb = discord.Embed(title=title, description=reason)
|
emb = discord.Embed(title=title, description=reason)
|
||||||
@ -800,11 +807,12 @@ async def create_case(
|
|||||||
guild: discord.Guild,
|
guild: discord.Guild,
|
||||||
created_at: datetime,
|
created_at: datetime,
|
||||||
action_type: str,
|
action_type: str,
|
||||||
user: Union[discord.User, discord.Member],
|
user: Union[discord.Object, discord.abc.User, int],
|
||||||
moderator: Optional[Union[discord.User, discord.Member]] = None,
|
moderator: Optional[Union[discord.Object, discord.abc.User, int]] = None,
|
||||||
reason: Optional[str] = None,
|
reason: Optional[str] = None,
|
||||||
until: Optional[datetime] = None,
|
until: Optional[datetime] = None,
|
||||||
channel: Optional[discord.TextChannel] = None,
|
channel: Optional[discord.TextChannel] = None,
|
||||||
|
last_known_username: Optional[str] = None,
|
||||||
) -> Optional[Case]:
|
) -> Optional[Case]:
|
||||||
"""
|
"""
|
||||||
Creates a new case.
|
Creates a new case.
|
||||||
@ -823,9 +831,9 @@ async def create_case(
|
|||||||
(similarly to how Python treats naive `datetime` objects).
|
(similarly to how Python treats naive `datetime` objects).
|
||||||
action_type: str
|
action_type: str
|
||||||
The type of action that was taken
|
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
|
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
|
The moderator who took the action
|
||||||
reason: Optional[str]
|
reason: Optional[str]
|
||||||
The reason the action was taken
|
The reason the action was taken
|
||||||
@ -835,6 +843,10 @@ async def create_case(
|
|||||||
(similarly to how Python treats naive `datetime` objects).
|
(similarly to how Python treats naive `datetime` objects).
|
||||||
channel: Optional[discord.TextChannel]
|
channel: Optional[discord.TextChannel]
|
||||||
The channel the action was taken in
|
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)
|
case_type = await get_casetype(action_type, guild)
|
||||||
if case_type is None:
|
if case_type is None:
|
||||||
@ -865,6 +877,7 @@ async def create_case(
|
|||||||
amended_by=None,
|
amended_by=None,
|
||||||
modified_at=None,
|
modified_at=None,
|
||||||
message=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.custom(_CASES, str(guild.id), str(next_case_number)).set(case.to_json())
|
||||||
await _config.guild(guild).latest_case_number.set(next_case_number)
|
await _config.guild(guild).latest_case_number.set(next_case_number)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user