feat(moderation): added the basis of the database system
Some checks failed
Pylint / Pylint (push) Failing after 1m12s
Some checks failed
Pylint / Pylint (push) Failing after 1m12s
This commit is contained in:
parent
da5fa2da45
commit
6017fbdd20
3 changed files with 82 additions and 3 deletions
|
@ -1,5 +1,9 @@
|
||||||
|
import logging
|
||||||
import discord
|
import discord
|
||||||
from redbot.core import checks, commands, Config
|
import mysql.connector
|
||||||
|
from pytimeparse2 import disable_dateutil
|
||||||
|
from redbot.core import Config, checks, commands
|
||||||
|
|
||||||
|
|
||||||
class Moderation(commands.Cog):
|
class Moderation(commands.Cog):
|
||||||
"""Custom cog moderation cog, meant to copy GalacticBot.
|
"""Custom cog moderation cog, meant to copy GalacticBot.
|
||||||
|
@ -14,9 +18,73 @@ class Moderation(commands.Cog):
|
||||||
mysql_user = " ",
|
mysql_user = " ",
|
||||||
mysql_password = " "
|
mysql_password = " "
|
||||||
)
|
)
|
||||||
|
disable_dateutil()
|
||||||
|
|
||||||
|
async def cog_load(self):
|
||||||
|
"""This method prepares the database schema for all of the guilds the bot is currently in."""
|
||||||
|
guilds: list[discord.Guild] = self.bot.guilds
|
||||||
|
for guild in guilds:
|
||||||
|
await self.create_guild_table(guild)
|
||||||
|
|
||||||
|
@commands.Cog.listener('on_guild_join')
|
||||||
|
async def db_generate_guild_join(self, guild: discord.Guild):
|
||||||
|
"""This method prepares the database schema whenever the bot joins a guild."""
|
||||||
|
await self.create_guild_table(guild)
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
"""Connects to the MySQL database."""
|
"""Connects to the MySQL database, and returns a connection object."""
|
||||||
|
conf = await self.check_conf([
|
||||||
|
'mysql_address',
|
||||||
|
'mysql_database',
|
||||||
|
'mysql_user',
|
||||||
|
'mysql_password'
|
||||||
|
])
|
||||||
|
if conf:
|
||||||
|
raise LookupError
|
||||||
|
connection = mysql.connector.connect(
|
||||||
|
host=await self.config.mysql_address(),
|
||||||
|
user=await self.config.mysql_user(),
|
||||||
|
password=await self.config.mysql_password(),
|
||||||
|
database=await self.config.mysql_db()
|
||||||
|
)
|
||||||
|
return connection
|
||||||
|
|
||||||
|
async def create_guild_table(self, guild: discord.Guild):
|
||||||
|
database = await self.connect()
|
||||||
|
cursor = database.cursor()
|
||||||
|
try:
|
||||||
|
cursor.execute(f"SELECT * FROM `{guild.id}_moderation`")
|
||||||
|
logging.info(f"MySQL Table exists for server {guild.name} ({guild.id})")
|
||||||
|
except mysql.connector.errors.ProgrammingError:
|
||||||
|
query = f"""
|
||||||
|
CREATE TABLE `{guild.id}_moderation` (
|
||||||
|
moderation_id INT UNIQUE PRIMARY KEY NOT NULL,
|
||||||
|
timestamp INT NOT NULL,
|
||||||
|
moderation_type LONGTEXT NOT NULL,
|
||||||
|
target_id LONGTEXT NOT NULL,
|
||||||
|
moderator_id LONGTEXT NOT NULL,
|
||||||
|
duration LONGTEXT,
|
||||||
|
end_timestamp INT,
|
||||||
|
reason LONGTEXT,
|
||||||
|
resolved BOOL NOT NULL,
|
||||||
|
resolve_reason LONGTEXT,
|
||||||
|
expired BOOL NOT NULL
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
cursor.execute(query)
|
||||||
|
insert_query = f"""
|
||||||
|
INSERT INTO `{guild.id}_moderation`
|
||||||
|
(moderation_id, timestamp, moderation_type, target_id, moderator_id, duration, end_timestamp, reason, resolved, resolve_reason, expired)
|
||||||
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||||
|
"""
|
||||||
|
insert_values = (0, 0, "NULL", 0, 0, "NULL", 0, "NULL", 0, "NULL", 0)
|
||||||
|
cursor.execute(insert_query, insert_values)
|
||||||
|
database.commit()
|
||||||
|
database.close()
|
||||||
|
logging.info(f"MySQL Table created for {guild.name} ({guild.id})\n{guild.id}_moderation")
|
||||||
|
else:
|
||||||
|
database.close()
|
||||||
|
return
|
||||||
|
|
||||||
async def check_conf(self, config: list):
|
async def check_conf(self, config: list):
|
||||||
"""Checks if any required config options are not set."""
|
"""Checks if any required config options are not set."""
|
||||||
|
|
12
poetry.lock
generated
12
poetry.lock
generated
|
@ -1138,6 +1138,16 @@ files = [
|
||||||
{file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"},
|
{file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mysql-connector"
|
||||||
|
version = "2.2.9"
|
||||||
|
description = "MySQL driver written in Python"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "mysql-connector-2.2.9.tar.gz", hash = "sha256:1733e6ce52a049243de3264f1fbc22a852cb35458c4ad739ba88189285efdf32"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nodeenv"
|
name = "nodeenv"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
|
@ -2345,4 +2355,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = ">=3.11,<3.12"
|
python-versions = ">=3.11,<3.12"
|
||||||
content-hash = "634e8b087e541f788c43821efee6c592a16030cb93e6fc0a4e98891abc90b061"
|
content-hash = "9abb44d966d5eaab361627f12ac0d479abee1dd213979040187ffad74ca324fe"
|
||||||
|
|
|
@ -12,6 +12,7 @@ Red-DiscordBot = "^3.5.5"
|
||||||
pytimeparse2 = "^1.7.1"
|
pytimeparse2 = "^1.7.1"
|
||||||
yt-dlp = "^2023.9.24"
|
yt-dlp = "^2023.9.24"
|
||||||
prisma = "^0.10.0"
|
prisma = "^0.10.0"
|
||||||
|
mysql-connector = "^2.2.9"
|
||||||
|
|
||||||
[tool.poetry.group.dev]
|
[tool.poetry.group.dev]
|
||||||
optional = true
|
optional = true
|
||||||
|
|
Loading…
Reference in a new issue