feat(aurora): migrated to aiosqlite
This commit is contained in:
parent
027144f35d
commit
5cbf4e7e47
9 changed files with 127 additions and 116 deletions
|
@ -1,11 +1,11 @@
|
|||
import json
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
from sqlite3 import Cursor
|
||||
from time import time
|
||||
from typing import Dict, Iterable, List, Optional, Tuple, Union
|
||||
|
||||
import discord
|
||||
from aiosqlite import Cursor
|
||||
from discord import NotFound
|
||||
from redbot.core.bot import Red
|
||||
|
||||
|
@ -115,15 +115,15 @@ class Moderation(AuroraGuildModel):
|
|||
"user_id": resolved_by,
|
||||
}))
|
||||
|
||||
self.update()
|
||||
await self.update()
|
||||
|
||||
def update(self) -> None:
|
||||
async def update(self) -> None:
|
||||
from ..utilities.database import connect
|
||||
from ..utilities.json import dumps
|
||||
query = f"UPDATE moderation_{self.guild_id} SET timestamp = ?, moderation_type = ?, target_type = ?, moderator_id = ?, role_id = ?, duration = ?, end_timestamp = ?, reason = ?, resolved = ?, resolved_by = ?, resolve_reason = ?, expired = ?, changes = ?, metadata = ? WHERE moderation_id = ?;"
|
||||
|
||||
with connect() as database:
|
||||
database.execute(query, (
|
||||
async with connect() as database:
|
||||
await database.execute(query, (
|
||||
self.timestamp.timestamp(),
|
||||
self.moderation_type,
|
||||
self.target_type,
|
||||
|
@ -206,7 +206,7 @@ class Moderation(AuroraGuildModel):
|
|||
return cls.from_dict(bot=bot, data=case)
|
||||
|
||||
@classmethod
|
||||
def execute(cls, bot: Red, guild_id: int, query: str, parameters: tuple | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
async def execute(cls, bot: Red, guild_id: int, query: str, parameters: tuple | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
from ..utilities.database import connect
|
||||
logger.trace("Executing query: %s", query)
|
||||
logger.trace("With parameters: %s", parameters)
|
||||
|
@ -214,16 +214,16 @@ class Moderation(AuroraGuildModel):
|
|||
parameters = ()
|
||||
if not cursor:
|
||||
no_cursor = True
|
||||
database = connect()
|
||||
cursor = database.cursor()
|
||||
database = await connect()
|
||||
cursor = await database.cursor()
|
||||
else:
|
||||
no_cursor = False
|
||||
|
||||
cursor.execute(query, parameters)
|
||||
results = cursor.fetchall()
|
||||
await cursor.execute(query, parameters)
|
||||
results = await cursor.fetchall()
|
||||
if no_cursor:
|
||||
cursor.close()
|
||||
database.close()
|
||||
await cursor.close()
|
||||
await database.close()
|
||||
|
||||
if results:
|
||||
cases = []
|
||||
|
@ -235,7 +235,7 @@ class Moderation(AuroraGuildModel):
|
|||
return ()
|
||||
|
||||
@classmethod
|
||||
def get_latest(cls, bot: Red, guild_id: int, limit: int | None = None, offset: int = 0, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
async def get_latest(cls, bot: Red, guild_id: int, limit: int | None = None, offset: int = 0, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
params = []
|
||||
query = f"SELECT * FROM moderation_{guild_id} ORDER BY moderation_id DESC"
|
||||
if types:
|
||||
|
@ -245,41 +245,41 @@ class Moderation(AuroraGuildModel):
|
|||
query += " LIMIT ? OFFSET ?"
|
||||
params.extend((limit, offset))
|
||||
query += ";"
|
||||
return cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=tuple(params) if params else (), cursor=cursor)
|
||||
return await cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=tuple(params) if params else (), cursor=cursor)
|
||||
|
||||
@classmethod
|
||||
def get_next_case_number(cls, bot: Red, guild_id: int, cursor: Cursor | None = None) -> int:
|
||||
result = cls.get_latest(bot=bot, guild_id=guild_id, cursor=cursor, limit=1)
|
||||
async def get_next_case_number(cls, bot: Red, guild_id: int, cursor: Cursor | None = None) -> int:
|
||||
result = await cls.get_latest(bot=bot, guild_id=guild_id, cursor=cursor, limit=1)
|
||||
return (result[0].moderation_id + 1) if result else 1
|
||||
|
||||
@classmethod
|
||||
def find_by_id(cls, bot: Red, moderation_id: int, guild_id: int, cursor: Cursor | None = None) -> "Moderation":
|
||||
async def find_by_id(cls, bot: Red, moderation_id: int, guild_id: int, cursor: Cursor | None = None) -> "Moderation":
|
||||
query = f"SELECT * FROM moderation_{guild_id} WHERE moderation_id = ?;"
|
||||
case = cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(moderation_id,), cursor=cursor)
|
||||
case = await cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(moderation_id,), cursor=cursor)
|
||||
if case:
|
||||
return case[0]
|
||||
raise ValueError(f"Case {moderation_id} not found in moderation_{guild_id}!")
|
||||
|
||||
@classmethod
|
||||
def find_by_target(cls, bot: Red, guild_id: int, target: int, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
async def find_by_target(cls, bot: Red, guild_id: int, target: int, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
query = f"SELECT * FROM moderation_{guild_id} WHERE target_id = ?"
|
||||
if types:
|
||||
query += f" AND moderation_type IN ({', '.join(['?' for _ in types])})"
|
||||
query += " ORDER BY moderation_id DESC;"
|
||||
|
||||
return cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(target, *types) if types else (target,), cursor=cursor)
|
||||
return await cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(target, *types) if types else (target,), cursor=cursor)
|
||||
|
||||
@classmethod
|
||||
def find_by_moderator(cls, bot: Red, guild_id: int, moderator: int, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
async def find_by_moderator(cls, bot: Red, guild_id: int, moderator: int, types: Iterable | None = None, cursor: Cursor | None = None) -> Tuple["Moderation"]:
|
||||
query = f"SELECT * FROM moderation_{guild_id} WHERE moderator_id = ?"
|
||||
if types:
|
||||
query += f" AND moderation_type IN ({', '.join(['?' for _ in types])})"
|
||||
query += " ORDER BY moderation_id DESC;"
|
||||
|
||||
return cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(moderator, *types) if types else (moderator,), cursor=cursor)
|
||||
return await cls.execute(bot=bot, guild_id=guild_id, query=query, parameters=(moderator, *types) if types else (moderator,), cursor=cursor)
|
||||
|
||||
@classmethod
|
||||
def log(
|
||||
async def log(
|
||||
cls,
|
||||
bot: Red,
|
||||
guild_id: int,
|
||||
|
@ -335,13 +335,12 @@ class Moderation(AuroraGuildModel):
|
|||
role_id = None
|
||||
|
||||
if not database:
|
||||
database = connect()
|
||||
database = await connect()
|
||||
close_db = True
|
||||
else:
|
||||
close_db = False
|
||||
cursor = database.cursor()
|
||||
|
||||
moderation_id = cls.get_next_case_number(bot=bot, guild_id=guild_id, cursor=cursor)
|
||||
moderation_id = cls.get_next_case_number(bot=bot, guild_id=guild_id)
|
||||
|
||||
case = {
|
||||
"moderation_id": moderation_id,
|
||||
|
@ -363,12 +362,12 @@ class Moderation(AuroraGuildModel):
|
|||
}
|
||||
|
||||
sql = f"INSERT INTO `moderation_{guild_id}` (moderation_id, timestamp, moderation_type, target_type, target_id, moderator_id, role_id, duration, end_timestamp, reason, resolved, resolved_by, resolve_reason, expired, changes, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
cursor.execute(sql, tuple(case.values()))
|
||||
await database.execute(sql, tuple(case.values()))
|
||||
|
||||
cursor.close()
|
||||
database.commit()
|
||||
await database.close()
|
||||
await database.commit()
|
||||
if close_db:
|
||||
database.close()
|
||||
await database.close()
|
||||
|
||||
logger.debug(
|
||||
"Row inserted into moderation_%s!\n%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s",
|
||||
|
@ -392,5 +391,5 @@ class Moderation(AuroraGuildModel):
|
|||
)
|
||||
|
||||
if return_obj:
|
||||
return cls.find_by_id(bot=bot, moderation_id=moderation_id, guild_id=guild_id)
|
||||
return await cls.find_by_id(bot=bot, moderation_id=moderation_id, guild_id=guild_id)
|
||||
return moderation_id
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue