mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-21 18:27:59 -05:00
adds function to modlg API to get cases by member (#2453)
adds command using this to view all of a member's cases demonstrating this closes #2266
This commit is contained in:
@@ -19,6 +19,7 @@ __all__ = [
|
||||
"get_next_case_number",
|
||||
"get_case",
|
||||
"get_all_cases",
|
||||
"get_cases_for_member",
|
||||
"create_case",
|
||||
"get_casetype",
|
||||
"get_all_casetypes",
|
||||
@@ -431,6 +432,92 @@ async def get_all_cases(guild: discord.Guild, bot: Red) -> List[Case]:
|
||||
return case_list
|
||||
|
||||
|
||||
async def get_cases_for_member(
|
||||
guild: discord.Guild, bot: Red, *, member: discord.Member = None, member_id: int = None
|
||||
) -> List[Case]:
|
||||
"""
|
||||
Gets all cases for the specified member or member id in a guild.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
guild: `discord.Guild`
|
||||
The guild to get the cases from
|
||||
bot: Red
|
||||
The bot's instance
|
||||
member: `discord.Member`
|
||||
The member to get cases about
|
||||
member_id: int
|
||||
The id of the member to get cases about
|
||||
|
||||
Returns
|
||||
-------
|
||||
list
|
||||
A list of all matching cases.
|
||||
|
||||
Raises
|
||||
------
|
||||
ValueError
|
||||
If at least one of member or member_id is not provided
|
||||
`discord.NotFound`
|
||||
A user with this ID does not exist.
|
||||
`discord.Forbidden`
|
||||
The bot does not have permission to fetch the modlog message which was sent.
|
||||
`discord.HTTPException`
|
||||
Fetching the user failed.
|
||||
"""
|
||||
|
||||
cases = await _conf.guild(guild).get_raw("cases")
|
||||
|
||||
if not (member_id or member):
|
||||
raise ValueError("Expected a member or a member id to be provided.") from None
|
||||
|
||||
if not member_id:
|
||||
member_id = member.id
|
||||
|
||||
if not member:
|
||||
member = guild.get_member(member_id)
|
||||
if not member:
|
||||
member = await bot.get_user_info(member_id)
|
||||
|
||||
try:
|
||||
mod_channel = await get_modlog_channel(guild)
|
||||
except RuntimeError:
|
||||
mod_channel = None
|
||||
|
||||
async def make_case(data: dict) -> Case:
|
||||
|
||||
message = None
|
||||
if data["message"] and mod_channel:
|
||||
try:
|
||||
message = await mod_channel.get_message(data["message"])
|
||||
except discord.NotFound:
|
||||
pass
|
||||
|
||||
return Case(
|
||||
bot=bot,
|
||||
guild=bot.get_guild(data["guild"]),
|
||||
created_at=data["created_at"],
|
||||
action_type=data["action_type"],
|
||||
user=member,
|
||||
moderator=guild.get_member(data["moderator"]),
|
||||
case_number=data["case_number"],
|
||||
reason=data["reason"],
|
||||
until=data["until"],
|
||||
channel=guild.get_channel(data["channel"]),
|
||||
amended_by=guild.get_member(data["amended_by"]),
|
||||
modified_at=data["modified_at"],
|
||||
message=message,
|
||||
)
|
||||
|
||||
cases = [
|
||||
await make_case(case_data)
|
||||
for case_data in cases.values()
|
||||
if case_data["user"] == member_id
|
||||
]
|
||||
|
||||
return cases
|
||||
|
||||
|
||||
async def create_case(
|
||||
bot: Red,
|
||||
guild: discord.Guild,
|
||||
|
||||
Reference in New Issue
Block a user