From 10173132a2fcf5f170dfbecc679ebf820b25e8f2 Mon Sep 17 00:00:00 2001 From: Mathis Date: Sat, 3 Jan 2026 22:13:37 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20syst=C3=A8me=20de?= =?UTF-8?q?=20bienvenue=20=C2=A7=20ajout=20de=20plusieurs=20fonctionnalit?= =?UTF-8?q?=C3=A9s=20de=20personnalisation=20(message=20perso,=20banni?= =?UTF-8?q?=C3=A8re=20perso=20etc...)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- banners/banner_1369669999345537145.png | Bin 0 -> 17515 bytes bot.py | 1 - commandes/fun.py | 17 --- commandes/welcome.py | 154 +++++++++++++++++----- config.db | Bin 8192 -> 8192 bytes data/logs/member_events_2026-01-03.json | 58 ++++++++ data/member_logs/1456390746167967932.json | 42 ++++++ 7 files changed, 221 insertions(+), 51 deletions(-) create mode 100644 banners/banner_1369669999345537145.png delete mode 100755 commandes/fun.py create mode 100644 data/logs/member_events_2026-01-03.json create mode 100644 data/member_logs/1456390746167967932.json diff --git a/banners/banner_1369669999345537145.png b/banners/banner_1369669999345537145.png new file mode 100644 index 0000000000000000000000000000000000000000..cddf163bb4792bb96fbd0df34f0fc1babc1e47cf GIT binary patch literal 17515 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" + embed = discord.Embed(title=f"Merci d'accueillir {member} 🤝", - description="Bienvenue dans le serveur Omega Kube !\nSi vous cherchez des RolePlay de qualité,\nVous êtes au bon endroit. ", + description=channel_description, color=discord.Color.dark_purple()) embed.set_image(url="attachment://welcome.png") await channel.send(content=member.mention, embed=embed, file=discord.File(img, filename="welcome.png")) - @app_commands.command(name="setwelcome", description="Définit le salon et le message DM de bienvenue") + async def save_banner_attachment(self, attachment: discord.Attachment, guild_id: int) -> str: + """Sauvegarde l'attachment et retourne le chemin du fichier""" + base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "banners")) + os.makedirs(base_dir, exist_ok=True) + + # Vérifier que c'est une image + if not attachment.content_type or not attachment.content_type.startswith('image/'): + raise ValueError("Le fichier doit être une image.") + + # Vérifier le format PNG + if not attachment.filename.lower().endswith('.png'): + raise ValueError("Le fichier doit être au format PNG.") + + # Vérifier les dimensions + banner_path = os.path.join(base_dir, f"banner_{guild_id}.png") + + async with aiohttp.ClientSession() as session: + async with session.get(attachment.url) as resp: + if resp.status == 200: + # Vérifier les dimensions avant de sauvegarder + img_data = await resp.read() + from io import BytesIO + with Image.open(BytesIO(img_data)) as img: + width, height = img.size + if width != 1000 or height != 300: + raise ValueError(f"Les dimensions doivent être 1000x300 pixels (votre image: {width}x{height})") + + with open(banner_path, 'wb') as f: + f.write(img_data) + + return banner_path + + @app_commands.command(name="setwelcome", description="Définit le salon, les messages de bienvenue et le fond de la bannière") @app_commands.checks.has_permissions(administrator=True) - async def set_welcome(self, interaction: discord.Interaction, channel: discord.TextChannel, message_dm: str = None): + async def set_welcome(self, interaction: discord.Interaction, channel: discord.TextChannel, message_dm: str, message_salon: str, server_name: str, banner_file: discord.Attachment = None): + banner_path = None + + # Si un fichier est uploadé, le sauvegarder + if banner_file: + try: + banner_path = await self.save_banner_attachment(banner_file, interaction.guild_id) + except Exception as e: + await interaction.response.send_message(f"❌ Erreur avec le fichier: {e}", ephemeral=True) + return + conn = sqlite3.connect(self.db_path) cursor = conn.cursor() - cursor.execute('''INSERT INTO server_configs (server_id, welcome_channel, welcome_dm_message) - VALUES (?, ?, ?) ON CONFLICT(server_id) + cursor.execute('''INSERT INTO server_configs (server_id, welcome_channel, welcome_dm_message, welcome_server_name, welcome_banner_background, welcome_channel_message) + VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(server_id) DO UPDATE SET welcome_channel=excluded.welcome_channel, - welcome_dm_message=COALESCE(excluded.welcome_dm_message, welcome_dm_message)''', - (interaction.guild_id, channel.id, message_dm)) + welcome_dm_message=excluded.welcome_dm_message, + welcome_server_name=excluded.welcome_server_name, + welcome_banner_background=COALESCE(excluded.welcome_banner_background, welcome_banner_background), + welcome_channel_message=excluded.welcome_channel_message''', + (interaction.guild_id, channel.id, message_dm, server_name, banner_path, message_salon)) conn.commit() conn.close() - await interaction.response.send_message("Configuration de bienvenue enregistrée !", ephemeral=True) + + bg_used = "background_template.png" if not banner_path else (banner_path.split('/')[-1]) + await interaction.response.send_message(f"✅ Configuration de bienvenida enregistrée !\nFond utilisé: {bg_used}", ephemeral=True) async def setup(bot): - await bot.add_cog(Welcome(bot)) \ No newline at end of file + await bot.add_cog(Welcome(bot)) + diff --git a/config.db b/config.db index a98dafef77e9156d9f32661d6eaabc2c9caab99d..e23f846d19f920a2a8d91f5a3d0e61a436ff6cf6 100644 GIT binary patch delta 417 zcmZp0XmFSyEy&5hz`z8=Fu*!d$C#g!L9eWn7bwKY*TulswXsl!kE^MekzHIBu)S|M~qWHYT+*E}S*N6~=Oj2TUc6w2MXoC;LN3^i I1&Nt?01?WD761SM delta 114 zcmZp0XmFSyEy&Ekz`z8=Fu*ub$C!_qL9eWn7bwKY&%nUHSx{gyA6H{7BfGe!CS$Yd y4HGI^8Q9nugqgT!&vRkmg3$n`FBrf8 diff --git a/data/logs/member_events_2026-01-03.json b/data/logs/member_events_2026-01-03.json new file mode 100644 index 0000000..a9007a8 --- /dev/null +++ b/data/logs/member_events_2026-01-03.json @@ -0,0 +1,58 @@ +[ + { + "timestamp": "2026-01-03T21:25:17.730927", + "event_type": "member_leave", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null, + "roles": { + "role_ids": [ + 1369669999366770721 + ], + "role_names": [ + "Faux banquier" + ], + "permissions": [ + 8192 + ] + }, + "joined_at": "2026-01-01T21:00:26.074000+00:00" + }, + { + "timestamp": "2026-01-03T21:25:28.894683", + "event_type": "member_join", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null + }, + { + "timestamp": "2026-01-03T21:49:33.975462", + "event_type": "member_leave", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null, + "roles": { + "role_ids": [ + 1369669999366770721 + ], + "role_names": [ + "Faux banquier" + ], + "permissions": [ + 8192 + ] + }, + "joined_at": "2026-01-03T20:25:28.737000+00:00" + }, + { + "timestamp": "2026-01-03T21:49:55.375389", + "event_type": "member_join", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null + } +] \ No newline at end of file diff --git a/data/member_logs/1456390746167967932.json b/data/member_logs/1456390746167967932.json new file mode 100644 index 0000000..a9cc32a --- /dev/null +++ b/data/member_logs/1456390746167967932.json @@ -0,0 +1,42 @@ +[ + { + "timestamp": "2026-01-03T21:25:17.730927", + "event_type": "member_leave", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null, + "roles": { + "role_ids": [ + 1369669999366770721 + ], + "role_names": [ + "Faux banquier" + ], + "permissions": [ + 8192 + ] + }, + "joined_at": "2026-01-01T21:00:26.074000+00:00" + }, + { + "timestamp": "2026-01-03T21:49:33.975462", + "event_type": "member_leave", + "member_id": 1456390746167967932, + "member_name": "juibu_66388", + "member_discriminator": "0", + "member_avatar": null, + "roles": { + "role_ids": [ + 1369669999366770721 + ], + "role_names": [ + "Faux banquier" + ], + "permissions": [ + 8192 + ] + }, + "joined_at": "2026-01-03T20:25:28.737000+00:00" + } +] \ No newline at end of file