mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -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:
parent
77a0a67029
commit
9966668307
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Optional, Union
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
@ -6,6 +6,8 @@ from redbot.core import checks, modlog, commands
|
|||||||
from redbot.core.bot import Red
|
from redbot.core.bot import Red
|
||||||
from redbot.core.i18n import Translator, cog_i18n
|
from redbot.core.i18n import Translator, cog_i18n
|
||||||
from redbot.core.utils.chat_formatting import box
|
from redbot.core.utils.chat_formatting import box
|
||||||
|
from redbot.core.utils.menus import menu, DEFAULT_CONTROLS
|
||||||
|
|
||||||
|
|
||||||
_ = Translator("ModLog", __file__)
|
_ = Translator("ModLog", __file__)
|
||||||
|
|
||||||
@ -105,6 +107,37 @@ class ModLog(commands.Cog):
|
|||||||
else:
|
else:
|
||||||
await ctx.send(await case.message_content(embed=False))
|
await ctx.send(await case.message_content(embed=False))
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
@commands.guild_only()
|
||||||
|
async def casesfor(self, ctx: commands.Context, member: Union[discord.Member, int]):
|
||||||
|
"""
|
||||||
|
Displays the cases for the specified member
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
if isinstance(member, int):
|
||||||
|
cases = await modlog.get_cases_for_member(
|
||||||
|
bot=ctx.bot, guild=ctx.guild, member_id=member
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cases = await modlog.get_cases_for_member(
|
||||||
|
bot=ctx.bot, guild=ctx.guild, member=member
|
||||||
|
)
|
||||||
|
except discord.NotFound:
|
||||||
|
return await ctx.send(_("That user does not exist."))
|
||||||
|
except discord.HTTPException:
|
||||||
|
return await ctx.send(
|
||||||
|
_("Something unexpected went wrong while fetching that user by ID.")
|
||||||
|
)
|
||||||
|
|
||||||
|
if not cases:
|
||||||
|
return await ctx.send(_("That user does not have any cases."))
|
||||||
|
|
||||||
|
embed_requested = await ctx.embed_requested()
|
||||||
|
|
||||||
|
rendered_cases = [await case.message_content(embed=embed_requested) for case in cases]
|
||||||
|
|
||||||
|
await menu(ctx, rendered_cases, DEFAULT_CONTROLS)
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
async def reason(self, ctx: commands.Context, case: Optional[int], *, reason: str):
|
async def reason(self, ctx: commands.Context, case: Optional[int], *, reason: str):
|
||||||
|
|||||||
@ -19,6 +19,7 @@ __all__ = [
|
|||||||
"get_next_case_number",
|
"get_next_case_number",
|
||||||
"get_case",
|
"get_case",
|
||||||
"get_all_cases",
|
"get_all_cases",
|
||||||
|
"get_cases_for_member",
|
||||||
"create_case",
|
"create_case",
|
||||||
"get_casetype",
|
"get_casetype",
|
||||||
"get_all_casetypes",
|
"get_all_casetypes",
|
||||||
@ -431,6 +432,92 @@ async def get_all_cases(guild: discord.Guild, bot: Red) -> List[Case]:
|
|||||||
return case_list
|
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(
|
async def create_case(
|
||||||
bot: Red,
|
bot: Red,
|
||||||
guild: discord.Guild,
|
guild: discord.Guild,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user