user-infractions shows total severity.

Command user-infractions now shows the total severity/weight and number of infractions.
This commit is contained in:
Vegard Berg 2022-07-23 01:10:45 +02:00
parent a9920e44d1
commit c02ff3f8f8
1 changed files with 49 additions and 21 deletions

View File

@ -15,6 +15,7 @@ from naff import (
Button, Button,
ButtonStyles, ButtonStyles,
) )
from peewee import fn
from database import ( from database import (
GuildSettings, GuildSettings,
Infractions as InfractionsModel, Infractions as InfractionsModel,
@ -49,8 +50,11 @@ class Infractions(Extension):
EmbedField( EmbedField(
name="**Received**", name="**Received**",
value=f"<t:{int(infraction.at_time.timestamp())}:F>", value=f"<t:{int(infraction.at_time.timestamp())}:F>",
inline=True,
),
EmbedField(
name="**Severity**", value=f"{infraction.weight}", inline=True
), ),
EmbedField(name="**Severity**", value=f"{infraction.weight}"),
], ],
) )
embeds.append(embed) embeds.append(embed)
@ -73,35 +77,59 @@ class Infractions(Extension):
await ctx.defer(ephemeral=False) await ctx.defer(ephemeral=False)
infractions: List[InfractionsModel] = InfractionsModel.select().where( infractions: List[InfractionsModel] = InfractionsModel.select().where(
InfractionsModel.guild_id == int(ctx.guild_id), InfractionsModel.guild_id == int(ctx.guild_id),
InfractionsModel.user_id == int(ctx.author.id), InfractionsModel.user_id == int(user.id),
) )
if len(infractions) == 0: if len(infractions) == 0:
await ctx.send(f"{user.mention} has no infractions.") await ctx.send(f"{user.mention} has no infractions.")
return return
infractions_weight: List[InfractionsModel] = InfractionsModel.select(
InfractionsModel.user_id,
fn.SUM(InfractionsModel.weight).alias("total_weight"),
fn.COUNT(InfractionsModel.id).alias("total_infractions"),
).where(
InfractionsModel.guild_id == int(ctx.guild_id),
InfractionsModel.user_id == int(user.id),
)
embeds: List[Embed] = [] embeds: List[Embed] = []
for infraction in infractions: # pylint: disable=not-an-iterable for infraction in infractions: # pylint: disable=not-an-iterable
issuer = await self.client.fetch_member( issuer = await self.client.fetch_member(
guild_id=ctx.guild, user_id=infraction.given_by guild_id=ctx.guild, user_id=infraction.given_by
) )
embed = Embed( embed = Embed(
title=f"Infraction for user {user.display_name} ({user.username}#{user.discriminator}, {user.id})", # pylint: disable=line-too-long title=f"Infraction for user {user.display_name} ({user.username}#{user.discriminator}, {user.id})", # pylint: disable=line-too-long
description=f"{infraction.reason}", description=f"{infraction.reason}",
color=infraction_colour(infraction.weight), color=infraction_colour(infraction.weight),
fields=[ fields=[
EmbedField(name="**ID**", value=f"{infraction.id}"), EmbedField(name="**ID**", value=f"{infraction.id}", inline=True),
EmbedField( EmbedField(
name="**Received**", name="**Received**",
value=f"<t:{int(infraction.at_time.timestamp())}:F>", value=f"<t:{int(infraction.at_time.timestamp())}:F>",
inline=True,
),
EmbedField(
name="**Severity**", value=f"{infraction.weight}", inline=True
),
EmbedField(
name="**Issued by**",
value=f"{issuer.display_name}",
inline=True,
), ),
EmbedField(name="**Severity**", value=f"{infraction.weight}"),
EmbedField(name="**Issued by**", value=f"{issuer.display_name}"),
], ],
) )
embeds.append(embed) embeds.append(embed)
await ctx.send(embed=embeds, ephemeral=False) print(infractions.count())
print(infractions_weight.count())
await ctx.send(
content=f"{user.mention} has {infractions_weight[0].total_infractions} infractions, for a total weight of {infractions_weight[0].total_weight:.2f}"
if infractions_weight.count() > 0
else None,
embed=embeds,
ephemeral=False,
)
@slash_command( @slash_command(
name="warn", name="warn",
@ -183,20 +211,20 @@ class Infractions(Extension):
ephemeral=True, ephemeral=True,
) )
guild_settings: Optional[GuildSettings] = GuildSettings.get_or_none(GuildSettings.guild_id == int(ctx.guild_id)) # TODO: Add this in again when GuildSettings is implemented
if guild_settings is not None:
if guild_settings.admin_channel is not None: # guild_settings: Optional[GuildSettings] = GuildSettings.get_or_none(GuildSettings.guild_id == int(ctx.guild_id))
admin_channel = self.client.fetch_channel(int(guild_settings.admin_channel)) # if guild_settings is not None:
if admin_channel is not None: # if guild_settings.admin_channel is not None:
await admin_channel.send(embed=Embed( # admin_channel = self.client.fetch_channel(int(guild_settings.admin_channel))
title=f"Warned {user.display_name} ({user.username}#{user.discriminator}, {user.id})", # if admin_channel is not None:
description=f"{reason}", # await admin_channel.send(embed=Embed(
color=infraction_colour(0x0000FF), # title=f"Warned {user.display_name} ({user.username}#{user.discriminator}, {user.id})",
fields=[ # description=f"{reason}",
EmbedField(name="**Severity**", value=f"{weight}"), # color=infraction_colour(0x0000FF),
EmbedField("**Issued by**", f"{ctx.author.display_name}"), # fields=[
], # ],
)) # ))
if not silent and warning_msg is None: if not silent and warning_msg is None:
await ctx.send( await ctx.send(