1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-02 18:03:12 +00:00

refactor: Add error message for case not found

This commit is contained in:
wlinator 2024-07-18 12:24:57 -04:00
parent 509304ae28
commit 8823e9eb2a
4 changed files with 84 additions and 34 deletions

View file

@ -30,6 +30,8 @@
"error_lumi_exception_description": "{0}",
"error_missing_permissions_author": "Missing Permissions",
"error_missing_permissions_description": "you lack the required permissions to run this command.",
"error_no_case_found_author": "Case Not Found",
"error_no_case_found_description": "no case found with that ID.",
"error_no_private_message_author": "Guild Only",
"error_no_private_message_description": "this command can only be used in servers.",
"error_not_allowed_in_channel_author": "Not Allowed In Channel",

View file

@ -1,7 +1,7 @@
import discord
from discord.ext import bridge, commands
from modules.moderation import ban
from modules.moderation import ban, cases
class Moderation(commands.Cog):
@ -46,6 +46,22 @@ class Moderation(commands.Cog):
):
await ban.unban_user(ctx, target, reason)
@bridge.bridge_command(
name="case",
aliases=["c"],
description="View a case by its number.",
help="Views a case by its number in the server.",
guild_only=True,
)
@bridge.has_permissions(view_audit_log=True)
@commands.guild_only()
async def case_command(
self,
ctx,
case_number: int,
):
await cases.view_case_by_number(ctx, ctx.guild.id, case_number)
def setup(client):
client.add_cog(Moderation(client))

View file

@ -1,5 +1,8 @@
from discord.ext import pages
from discord.ext.commands import UserConverter
from services.moderation.case_service import CaseService
from modules.moderation.utils.case_embed import create_case_embed
from lib.embed_builder import EmbedBuilder
from lib.constants import CONST
case_service = CaseService()
@ -8,47 +11,58 @@ 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:
return await ctx.send("No case found with that ID.")
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)
await ctx.send(
f"Case {case['case_number']}: {case['action_type']} - {case['reason']}",
target = await UserConverter().convert(ctx, str(case["target_id"]))
embed = create_case_embed(
ctx,
target,
case["case_number"],
case["action_type"],
case["reason"],
)
await ctx.respond(embed=embed)
async def view_all_cases_in_guild(ctx, guild_id: int):
cases = case_service.fetch_all_cases_in_guild(guild_id)
# async def view_all_cases_in_guild(ctx, guild_id: int):
# cases = case_service.fetch_all_cases_in_guild(guild_id)
if not cases:
return await ctx.send("No cases found for this guild.")
# if not cases:
# return await ctx.send("No cases found for this guild.")
pages_list = [
f"Case {case['case_number']}: {case['action_type']} - {case['reason']}"
for case in cases
]
paginator = pages.Paginator(pages=pages_list, loop_pages=True)
await paginator.send(ctx)
# pages_list = [
# f"Case {case['case_number']}: {case['action_type']} - {case['reason']}"
# for case in cases
# ]
# paginator = pages.Paginator(pages=pages_list, loop_pages=True)
# await paginator.send(ctx)
async def view_all_cases_by_mod(ctx, guild_id: int, mod_id: int):
cases = case_service.fetch_all_cases_by_mod(guild_id, mod_id)
# async def view_all_cases_by_mod(ctx, guild_id: int, mod_id: int):
# cases = case_service.fetch_all_cases_by_mod(guild_id, mod_id)
if not cases:
return await ctx.send("No cases found for this moderator in this guild.")
# if not cases:
# return await ctx.send("No cases found for this moderator in this guild.")
pages_list = [
f"Case {case['case_number']}: {case['action_type']} - {case['reason']}"
for case in cases
]
paginator = pages.Paginator(pages=pages_list, loop_pages=True)
await paginator.send(ctx)
# pages_list = [
# f"Case {case['case_number']}: {case['action_type']} - {case['reason']}"
# for case in cases
# ]
# paginator = pages.Paginator(pages=pages_list, loop_pages=True)
# await paginator.send(ctx)
async def edit_case_reason(ctx, guild_id: int, case_number: int, new_reason: str):
changes = {"reason": new_reason}
case_service.edit_case(guild_id, case_number, changes)
await ctx.respond(f"Case {case_number} reason updated to: {new_reason}")
# async def edit_case_reason(ctx, guild_id: int, case_number: int, new_reason: str):
# changes = {"reason": new_reason}
# case_service.edit_case(guild_id, case_number, changes)
# await ctx.respond(f"Case {case_number} reason updated to: {new_reason}")
async def close_case(ctx, guild_id: int, case_number: int):
case_service.close_case(guild_id, case_number)
await ctx.respond(f"Case {case_number} has been closed.")
# async def close_case(ctx, guild_id: int, case_number: int):
# case_service.close_case(guild_id, case_number)
# await ctx.respond(f"Case {case_number} has been closed.")

View file

@ -83,9 +83,27 @@ class CaseService:
SELECT * FROM cases
WHERE guild_id = %s AND case_number = %s
ORDER BY case_number DESC
LIMIT 1
"""
result = select_query_one(query, (guild_id, case_number))
return dict(result) if result else None
result = select_query(query, (guild_id, case_number))
if result:
case = result[0] # Get the first result from the list
return {
"id": case[0],
"guild_id": case[1],
"case_number": case[2],
"target_id": case[3],
"moderator_id": case[4],
"action_type": case[5],
"reason": case[6],
"duration": case[7],
"expires_at": case[8],
"modlog_message_id": case[9],
"is_closed": case[10],
"created_at": case[11],
"updated_at": case[12],
}
return None
def fetch_cases_by_guild(self, guild_id):
query = """