from discord import app_commands import discord from GammaRPBot_Define import GammaRPBot import aiosqlite import base64 import io from public_env import * _sql_table="""CREATE TABLE personnages ( nom_court varchar(255), nom_complet text, image text, histoire text, pouvoirs text, uuid TEXT, age INTEGER, sexe TEXT, guild_id INTEGER NULL )""" async def setup(bot:GammaRPBot): bot.tree.add_command(PersoCommands(bot)) class PersoCommands(app_commands.Group): bot:GammaRPBot def __init__(self,bot): super().__init__(name="perso",description="Commandes pour les personnages") self.bot=bot @app_commands.command(name="créer",description="Crée un personnage") @app_commands.describe(short_name="Le nom court du personnage (son ID)", full_name="Le nom complet du personnage", story="L'histoire du personnage",powers="Les pouvoirs du personnage",age="L'âge du personnage", sexe="Le sexe du personnage", global_character="Le personnage est il global ou reservé à ce serveur", image="L'image du personnage") async def create_character(self,interaction:discord.Interaction,short_name:str,full_name:str,image:discord.Attachment,story:str,powers:str,age:int,sexe:str, global_character:bool=False ): nom_court = short_name nom_complet= full_name if image.content_type!="image/png" and image.content_type!="image/jpeg": await interaction.response.send_message("L'image doit être un fichier PNG ou JPEG",ephemeral=True) return if " " in nom_court: await interaction.response.send_message("Le nom court ne doit pas contenir d'espaces",ephemeral=True) return check_exist = await self.bot.db.execute("SELECT * FROM personnages WHERE nom_court=?", (nom_court,)) if check_exist.rowcount>0 or await check_exist.fetchone() is not None: await interaction.response.send_message("Ce nom court est déjà utilisé",ephemeral=True) return histoire = story pouvoirs = powers uuid=interaction.user.id guild_id = interaction.guild.id image_blob_raw=await image.read() a = await self.bot.get_guild(1037663859621765160).get_channel(1317876780635394068).send(file=discord.File(io.BytesIO(image_blob_raw),filename=image.filename)) perso_image_url = a.attachments[0].url print(nom_court,nom_complet,histoire,pouvoirs,age,sexe,uuid,guild_id) print(image.filename) print(image.url) try: res if global_character: res = await self.bot.db.execute("INSERT INTO personnages (nom_court,nom_complet,histoire,pouvoirs,age,sexe,uuid,image) VALUES (?,?,?,?,?,?,?,?)",(nom_court,nom_complet,histoire,pouvoirs,age,sexe,uuid,perso_image_url)) else: res=await self.bot.db.execute("INSERT INTO personnages (nom_court,nom_complet,histoire,pouvoirs,age,sexe,uuid,image,guild_id) VALUES (?,?,?,?,?,?,?,?)",(nom_court,nom_complet,histoire,pouvoirs,age,sexe,uuid,perso_image_url,guild_id)) print(res) await res.close() await self.bot.db.commit() except Exception as e: print(e) await interaction.response.send_message("Erreur lors de la création du personnage",ephemeral=True) return except aiosqlite.Warning as w: print(w) await interaction.response.send_message("Erreur lors de la création du personnage",ephemeral=True) return except aiosqlite.Error as e: print(e) await interaction.response.send_message("Erreur lors de la création du personnage",ephemeral=True) return await interaction.response.send_message("Personnage créé",ephemeral=True) @app_commands.command(name="afficher",description="Affiche un personnage") @app_commands.describe(short_name="Le nom court du personnage") async def show_character(self,interaction:discord.Interaction,short_name:str): res = await self.bot.db.execute("SELECT * FROM personnages WHERE nom_court=? AND uuid=? AND (guild_id=? OR guild_id IS NULL)",(short_name,interaction.user.id,interaction.guild.id)) row = await res.fetchone() await res.close() if row is None: await interaction.response.send_message("Personnage non trouvé",ephemeral=True) return embed = await perso_embed(self.bot,row) await interaction.response.send_message(f"Affichage de {row['nom_complet']}({row['nom_court']})",embed=embed) @show_character.autocomplete(name="short_name") async def autocomplete_short_name(self,interaction:discord.Interaction,current:str): res = await self.bot.db.execute("SELECT nom_court FROM personnages WHERE uuid=? AND (guild_id=? OR guild_id IS NULL)",(interaction.user.id,interaction.guild.id)) rows = await res.fetchall() await res.close() return [app_commands.OptionChoice(name=row["nom_court"],value=row["nom_court"]) for row in rows] @app_commands.command(name="lister",description="Liste les personnages sur le serveur") async def list_characters(self,interaction:discord.Interaction,output_hidden:bool=True): res = await self.bot.db.execute("SELECT * FROM personnages WHERE guild_id=? OR guild_id IS NULL",(interaction.guild.id,)) rows = await res.fetchall() await res.close() embeds = [] for row in rows: embeds.append(await perso_embed(self.bot,row)) await interaction.response.send_message("Liste des personnages",embeds=embeds,ephemeral=output_hidden) @app_commands.command(name="lister_tout",description="Liste tous les personnages") async def list_characters(self,interaction:discord.Interaction,output_hidden:bool=True): #admin if interaction.user.id !=super_owner_id: await interaction.response.send_message("Vous n'avez pas la permission d'exécuter cette commande",ephemeral=True) return print("perso list") res = await self.bot.db.execute("SELECT * FROM personnages") rows = await res.fetchall() await res.close() embeds = [] for row in rows: embeds.append(await perso_embed(self.bot,row)) await interaction.response.send_message("Liste des personnages\n",embeds=embeds,ephemeral=output_hidden) async def perso_embed(bot:GammaRPBot,perso_datas)->discord.embeds.Embed: embed = discord.Embed(title=perso_datas["nom_complet"],description=perso_datas["histoire"]) embed.add_field(name="Pouvoirs",value=perso_datas["pouvoirs"]) embed.add_field(name="Age",value=perso_datas["age"]) embed.add_field(name="Sexe",value=perso_datas["sexe"]) embed.set_footer(text=f"Nom court (ID): {perso_datas['nom_court']}") embed.set_thumbnail(url=perso_datas["image"]) return embed