From 19d3d03fa17a075aaee12fffe188c4002cd8446a Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 29 Jul 2021 00:48:42 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20commandes=20personnalis=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/db/.gitkeep | 0 src/main.py | 2 ++ src/modules/commandes.py | 57 ++++++++++++++++++++++++++++++++++++++++ src/utils/commands.py | 39 +++++++++++++++++++++++++++ src/utils/db.py | 50 +++++++++++++++++++++++++++++++++++ 6 files changed, 149 insertions(+) create mode 100644 src/db/.gitkeep create mode 100644 src/modules/commandes.py create mode 100644 src/utils/commands.py create mode 100644 src/utils/db.py diff --git a/.gitignore b/.gitignore index 3b72af0..69a3508 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .env __pycache__ +*.sqlite3 diff --git a/src/db/.gitkeep b/src/db/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main.py b/src/main.py index e0db51e..fcb545a 100644 --- a/src/main.py +++ b/src/main.py @@ -1,6 +1,7 @@ from twitchio.ext import commands from os import listdir from utils.core import load +from utils.commands import CommandesDB class Bot(commands.Bot): def __init__(self): @@ -8,6 +9,7 @@ class Bot(commands.Bot): super().__init__(token=self.keys["ACCESS_TOKEN"], prefix=self.keys["PREFIX"], initial_channels=self.keys["CHANNEL"]) async def event_ready(self): + CommandesDB().creationTable() print(f"Logged in as {self.nick}") async def event_message(self, message): diff --git a/src/modules/commandes.py b/src/modules/commandes.py new file mode 100644 index 0000000..b6e8c81 --- /dev/null +++ b/src/modules/commandes.py @@ -0,0 +1,57 @@ +from twitchio.ext import commands +from utils.core import load +from utils.commands import CommandesDB + +def prepare(bot: commands.Bot): + bot.add_cog(Commandes(bot)) + +class Commandes(commands.Cog): + def __init__(self, client: commands.Bot): + self.client = client + self.keys = load(["PREFIX"]) + + @commands.command() + async def add(self, ctx: commands.Context, commandName = None, commandMessage = None): + """Ajoute une commande de la base de donnée du bot : add nomDeLaCommande messageDeLaCommande""" + if commandName == None or commandMessage == None: + return + if ctx.author.is_mod: + CommandesDB().ajoutCommande(commandName, commandMessage) + await ctx.send(f"Commande {commandName} ajoutée !") + + @commands.command() + async def remove(self, ctx: commands.Context, commandName = None): + """Supprime une commande de la base de donnée du bot : remove nomDeLaCommande""" + if commandName == None: + return + if ctx.author.is_mod: + CommandesDB().suppressionCommande(commandName) + await ctx.send(f"Commande {commandName} supprimée !") + + @commands.command() + async def list(self, ctx: commands.Context): + """Affiche la liste des commandes de la base de donnée du bot""" + commandes = CommandesDB().listeCommande() + if len(commandes) > 0: + message = "" + for commande in commandes: + message += f"{self.keys['PREFIX']}{commande[0]} -> {commande[1]}\n" + await ctx.send(message) + + @commands.command() + async def edit(self, ctx: commands.Context, commandName = None, commandMessage = None): + """Modifie une commande de la base de donnée du bot : add nomDeLaCommande nouveauMessageDeLaCommande""" + if commandName == None or commandMessage == None: + return + if ctx.author.is_mod: + CommandesDB().suppressionCommande(commandName) + CommandesDB().ajoutCommande(commandName, commandMessage) + await ctx.send(f"Commande {commandName} modifiée !") + + @commands.Cog.event() + async def event_message(self, message): + if message.content.startswith(self.keys["PREFIX"]): + commandes = CommandesDB().listeCommande() + for commande in commandes: + if commande[0] == message.content[1:]: + await message.channel.send(commande[1]) diff --git a/src/utils/commands.py b/src/utils/commands.py new file mode 100644 index 0000000..c8ed590 --- /dev/null +++ b/src/utils/commands.py @@ -0,0 +1,39 @@ +from utils.db import Database + +class CommandesDB(Database): + def __init__(self): + super().__init__(r"db/bot.sqlite3") + + def creationTable(self): + """Créer la table qui stocker les commandes.""" + requete = """ + CREATE TABLE IF NOT EXISTS commandes ( + name_str TEXT, + content_str TEXT + ); + """ + self.requete(requete) + + def ajoutCommande(self, name = str, message = str): + """Ajoute une commande.""" + requete = """ + INSERT INTO commandes ( + name_str, + content_str + ) VALUES ( + ?, ? + ); + """ + self.requete(requete, [name, message]) + + def suppressionCommande(self, name = str): + """Supprime une commande.""" + requete = """ + DELETE FROM commandes + WHERE name_str = ?; + """ + self.requete(requete, name) + + def listeCommande(self): + """Retourne la liste des commandes.""" + return self.affichageResultat(self.requete("SELECT * FROM commandes;")) diff --git a/src/utils/db.py b/src/utils/db.py new file mode 100644 index 0000000..275171b --- /dev/null +++ b/src/utils/db.py @@ -0,0 +1,50 @@ +import sqlite3 + +class Database: + def __init__(self, urlDatabase: str): + self.connexion = self.createConnection(urlDatabase) + + def createConnection(self, path): + """Connexion à une base de donnée SQLite""" + if not self.isFileExists(path): + open(path, "x") + connnexion = None + try: + connnexion = sqlite3.connect(path) + except sqlite3.Error as e: + print(e) + return connnexion + + def isFileExists(self, path): + """Vérifie qu'un fichier existe""" + try: + open(path, "r") + except FileNotFoundError: + return False + else: + return True + + def requete(self, requete, valeurs = None): + """Envois une requête vers la base de données""" + try: + curseur = self.connexion.cursor() + if valeurs: + if type(valeurs) not in [list, tuple]: + valeurs = [valeurs] + curseur.execute(requete, valeurs) + else: + curseur.execute(requete) + self.connexion.commit() + return (curseur, curseur.lastrowid) + except sqlite3.Error as e: + print(e) + + def affichageResultat(self, curseur): + """Affiche le résultat d'une requête""" + tableau = [] + if curseur == None: + return tableau + lignes = curseur[0].fetchall() + for ligne in lignes: + tableau.append(ligne) + return tableau