feat(moderation): Implement notes and warnings.
This commit is contained in:
66
src/modules/moderation/tickets/warning.py
Normal file
66
src/modules/moderation/tickets/warning.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from typing import TYPE_CHECKING, Optional
|
||||
import datetime as dt
|
||||
|
||||
import discord
|
||||
from meta import LionBot
|
||||
from utils.lib import utc_now
|
||||
|
||||
from ..ticket import Ticket, ticket_factory
|
||||
from ..data import TicketType, TicketState, ModerationData
|
||||
from .. import logger, babel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..cog import ModerationCog
|
||||
|
||||
_p = babel._p
|
||||
|
||||
|
||||
@ticket_factory(TicketType.WARNING)
|
||||
class WarnTicket(Ticket):
|
||||
__slots__ = ()
|
||||
|
||||
@classmethod
|
||||
async def create(
|
||||
cls, bot: LionBot, guildid: int, userid: int,
|
||||
moderatorid: int, content: Optional[str], expiry=None,
|
||||
**kwargs
|
||||
):
|
||||
modcog: 'ModerationCog' = bot.get_cog('ModerationCog')
|
||||
ticket_data = await modcog.data.Ticket.create(
|
||||
guildid=guildid,
|
||||
targetid=userid,
|
||||
ticket_type=TicketType.WARNING,
|
||||
ticket_state=TicketState.OPEN,
|
||||
moderator_id=moderatorid,
|
||||
content=content,
|
||||
expiry=expiry,
|
||||
created_at=utc_now().replace(tzinfo=None),
|
||||
**kwargs
|
||||
)
|
||||
|
||||
lguild = await bot.core.lions.fetch_guild(guildid)
|
||||
new_ticket = cls(lguild, ticket_data)
|
||||
await new_ticket.post()
|
||||
|
||||
if expiry:
|
||||
cls.expiring.schedule_task(ticket_data.ticketid, expiry.timestamp())
|
||||
|
||||
return new_ticket
|
||||
|
||||
@classmethod
|
||||
async def count_warnings_for(
|
||||
cls, bot: LionBot, guildid: int, userid: int, **kwargs
|
||||
):
|
||||
modcog: 'ModerationCog' = bot.get_cog('ModerationCog')
|
||||
Ticket = modcog.data.Ticket
|
||||
record = await Ticket.table.select_one_where(
|
||||
(Ticket.ticket_state != TicketState.PARDONED),
|
||||
guildid=guildid,
|
||||
targetid=userid,
|
||||
ticket_type=TicketType.WARNING,
|
||||
**kwargs
|
||||
).select(ticket_count='COUNT(*)').with_no_adapter()
|
||||
return (record[0]['ticket_count'] or 0) if record else 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user