Ajout commandes personnalisés
This commit is contained in:
parent
143e93b3da
commit
19d3d03fa1
6 changed files with 149 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
.env
|
||||
__pycache__
|
||||
*.sqlite3
|
||||
|
|
0
src/db/.gitkeep
Normal file
0
src/db/.gitkeep
Normal file
|
@ -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):
|
||||
|
|
57
src/modules/commandes.py
Normal file
57
src/modules/commandes.py
Normal file
|
@ -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])
|
39
src/utils/commands.py
Normal file
39
src/utils/commands.py
Normal file
|
@ -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;"))
|
50
src/utils/db.py
Normal file
50
src/utils/db.py
Normal file
|
@ -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
|
Loading…
Reference in a new issue