1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-02 22:23:13 +00:00
Lumi/modules/moderation/cases.py

112 lines
3.3 KiB
Python

import asyncio
import discord
from discord.ext.commands import UserConverter
from services.moderation.case_service import CaseService
from modules.moderation.utils.case_embed import (
create_case_embed,
create_case_list_embed,
)
from lib.embed_builder import EmbedBuilder
from lib.constants import CONST
from discord.ext import pages
from lib.formatter import format_case_number
from modules.moderation.utils.case_handler import edit_case_modlog
case_service = CaseService()
async def view_case_by_number(ctx, guild_id: int, case_number: int):
case = case_service.fetch_case_by_guild_and_number(guild_id, case_number)
if not case:
embed = EmbedBuilder.create_error_embed(
ctx,
author_text=CONST.STRINGS["error_no_case_found_author"],
description=CONST.STRINGS["error_no_case_found_description"],
)
return await ctx.respond(embed=embed)
target = await UserConverter().convert(ctx, str(case["target_id"]))
embed = create_case_embed(
ctx,
target,
case["case_number"],
case["action_type"],
case["reason"],
case["created_at"],
)
await ctx.respond(embed=embed)
async def view_all_cases_in_guild(ctx, guild_id: int):
cases = case_service.fetch_cases_by_guild(guild_id)
if not cases:
embed = EmbedBuilder.create_error_embed(
ctx,
author_text=CONST.STRINGS["case_guild_no_cases_author"],
description=CONST.STRINGS["case_guild_no_cases"],
)
return await ctx.respond(embed=embed)
pages_list = []
for i in range(0, len(cases), 10):
chunk = cases[i : i + 10]
embed = create_case_list_embed(
ctx,
chunk,
CONST.STRINGS["case_guild_cases_author"],
)
pages_list.append(embed)
paginator = pages.Paginator(pages=pages_list)
await paginator.respond(ctx)
async def view_all_cases_by_mod(ctx, guild_id: int, moderator: discord.User):
cases = case_service.fetch_cases_by_moderator(guild_id, moderator.id)
if not cases:
embed = EmbedBuilder.create_error_embed(
ctx,
author_text=CONST.STRINGS["case_mod_no_cases_author"],
description=CONST.STRINGS["case_mod_no_cases"],
)
return await ctx.respond(embed=embed)
pages_list = []
for i in range(0, len(cases), 10):
chunk = cases[i : i + 10]
embed = create_case_list_embed(
ctx,
chunk,
CONST.STRINGS["case_mod_cases_author"].format(moderator.name),
)
pages_list.append(embed)
paginator = pages.Paginator(pages=pages_list)
await paginator.respond(ctx)
async def edit_case_reason(ctx, guild_id: int, case_number: int, new_reason: str):
case_service.edit_case_reason(
guild_id,
case_number,
new_reason,
)
embed = EmbedBuilder.create_success_embed(
ctx,
author_text=CONST.STRINGS["case_reason_update_author"],
description=CONST.STRINGS["case_reason_update_description"].format(
format_case_number(case_number),
),
)
async def update_tasks():
await asyncio.gather(
ctx.respond(embed=embed),
edit_case_modlog(ctx, guild_id, case_number, new_reason),
)
await update_tasks()