Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bot/core/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ def setup_logging(level: str = "INFO") -> None:
class BotApp(commands.Bot):
def __init__(self, guild_id: int) -> None:
intents = discord.Intents.default()
intents.message_content = True
intents.guilds = True
intents.members = True
super().__init__(command_prefix="!", intents=intents)
self.guild = discord.Object(id=guild_id)

Expand Down
97 changes: 97 additions & 0 deletions features/utils/feature.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import datetime

import discord
from discord import app_commands

from bot.core.checks import is_staff

FEATURE = {
"slug": "utils",
"name": "Utils Feature",
Expand Down Expand Up @@ -38,4 +42,97 @@ async def help_commands(interaction: discord.Interaction):
help_message, ephemeral=config.get("ephemeral_default", True) if isinstance(config, dict) else True
)

@group.command(name="serverinfo", description="Affiche les informations du serveur")
async def server_info_command(interaction: discord.Interaction):
guild = interaction.guild
if not guild:
await interaction.response.send_message(
"❌ Impossible de récupérer les informations du serveur.", ephemeral=True
)
return
embed = discord.Embed(title=f"Informations sur {guild.name}", color=discord.Color.blue())
embed.set_image(url=guild.banner.url if guild.banner else None)
embed.add_field(name="Date de création", value=guild.created_at.strftime("%d/%m/%Y"), inline=False)
embed.add_field(name="ID", value=guild.id, inline=False)
if guild.owner:
embed.add_field(name="Propriétaire", value=guild.owner.name if guild.owner else "Inconnu", inline=False)
embed.add_field(name="Membres", value=guild.member_count, inline=True)
embed.add_field(name="Rôles", value=len(guild.roles), inline=True)
embed.add_field(name="Salons", value=len(guild.channels), inline=True)
embed.add_field(name="Emojis", value=len(guild.emojis), inline=True)
embed.add_field(name="Boosts", value=f"{guild.premium_subscription_count}", inline=True)
embed.set_thumbnail(url=guild.icon.url if guild.icon else None)
embed.set_footer(
text="PyBot - Utils Feature",
icon_url=interaction.client.user.avatar.url if interaction.client.user.avatar else None,
)
await interaction.response.send_message(
embed=embed, ephemeral=config.get("ephemeral_default", True) if isinstance(config, dict) else True
)

@group.command(name="remind", description="Créer un rappel")
async def remind(interaction: discord.Interaction, count: int, unit: str, *, message: str):
time_units = {"s": 1, "m": 60, "h": 3600, "d": 86400}
if unit not in time_units:
await interaction.response.send_message(
"❌ Unité de temps invalide. Utilisez 's' pour secondes, 'm' pour minutes, 'h' pour heures ou 'd' pour jours.",
ephemeral=True,
)
return
delay = count * time_units[unit]
await interaction.response.send_message(
f"⏰ Rappel créé ! Je vous rappellerai dans {count} {unit}.", ephemeral=True
)
await discord.utils.sleep_until(discord.utils.utcnow() + datetime.timedelta(seconds=delay))
await interaction.user.send(f"⏰ Rappel : {message}")

@group.command(name="ping", description="Affiche la latence du bot")
async def ping(interaction: discord.Interaction):
latency = interaction.client.latency * 1000 # Convertir en millisecondes
await interaction.response.send_message(f"🏓 Pong ! Latence : {latency:.2f} ms", ephemeral=True)

@group.command(name="uptime", description="Affiche le temps de fonctionnement du bot")
async def uptime(interaction: discord.Interaction):
if not hasattr(interaction.client, "start_time"):
await interaction.response.send_message(
"❌ Impossible de récupérer le temps de fonctionnement.", ephemeral=True
)
return
uptime_seconds = (discord.utils.utcnow() - interaction.client.start_time).total_seconds()
uptime_str = str(datetime.timedelta(seconds=int(uptime_seconds)))
await interaction.response.send_message(f"⏱️ Temps de fonctionnement : {uptime_str}", ephemeral=True)

@group.command(name="invite", description="Affiche le lien d'invitation du bot")
async def invite(interaction: discord.Interaction):
invite_link = f"https://discord.com/api/oauth2/authorize?client_id={interaction.client.user.id}&permissions=8&scope=bot%20applications.commands"
await interaction.response.send_message(f"🔗 Voici le lien d'invitation du bot : {invite_link}", ephemeral=True)

@group.command(name="embed_message", description="Affiche un message dans un embed")
@app_commands.describe(
title="Le titre de l'embed",
description="La description de l'embed",
color="La couleur de l'embed (blue, red, green, yellow, purple, orange)",
)
@is_staff()
async def embed_message(interaction: discord.Interaction, title: str, description: str, color: str = "blue"):
if color.lower() not in ["blue", "red", "green", "yellow", "purple", "orange"]:
await interaction.response.send_message(
"❌ Couleur invalide. Utilisez 'blue', 'red', 'green', 'yellow', 'purple' ou 'orange'.", ephemeral=True
)
return
color_mapping = {
"blue": discord.Color.blue(),
"red": discord.Color.red(),
"green": discord.Color.green(),
"yellow": discord.Color.gold(),
"purple": discord.Color.purple(),
"orange": discord.Color.orange(),
}
embed = discord.Embed(
title=title, description=description, color=color_mapping.get(color.lower(), discord.Color.blue())
)
await interaction.response.send_message(
embed=embed, ephemeral=config.get("ephemeral_default", True) if isinstance(config, dict) else True
)

tree.add_command(group)