partirdezero/discord_integration/core/main_bot.py

73 lines
2.2 KiB
Python

import discord
import django
import os, sys
import dotenv
from discord.ext import commands
# On import django pour communiquer avec
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if BASE_DIR not in sys.path:
sys.path.insert(0, BASE_DIR)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devart.settings')
django.setup()
# Import des fonctions
from role_logic import check_role_reaction
from announces_logic import check_announcements
from random_phrase import get_random_phrase
from level_logic import check_add_xp, get_xp
import BotClass
# CONFIGURATION
TOKEN = dotenv.get_key(BASE_DIR + '/.env', 'D_TOKEN')
MESSAGE_ID = 1450928822156263505 # L'ID du message des règles (clic droit > Copier l'identifiant)
ROLE_ID = 1450920002868875435 # L'ID du rôle "Membres"
ANNOUNCEMENT_CHANNEL_ID = 1450912559774306346
EMOJI_VALIDATION = ""
# LES INTENTS (PERMISSIONS DU BOT)
intents = discord.Intents.default()
intents.members = True # Important pour pouvoir donner des rôles
intents.message_content = True
client = BotClass.Bot(intents=intents)
client.tree.add_command(get_random_phrase)
client.tree.add_command(get_xp)
@client.event
async def on_ready():
print(f'✅ Bot connecté : {client.user}')
try:
synced = await client.tree.sync()
print(f"🌍 {len(synced)} commandes slash synchronisées !")
except Exception as e:
print(f"❌ Erreur de synchronisation : {e}")
if not check_announcements.is_running():
check_announcements.start(client, ANNOUNCEMENT_CHANNEL_ID)
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.guild is None:
author = message.author
await message.channel.send("Bonjour !\nJe suis un bot destiné à tester les nouvelles fonctionnalités de Discord. Pour le moment, je suis qu'en lecture seule.")
else:
await check_add_xp(message, client)
@client.event
async def on_raw_reaction_add(payload):
# On envoie tout le nécessaire à notre fonction dans role_logic.py
await check_role_reaction(
payload,
client,
MESSAGE_ID,
ROLE_ID,
EMOJI_VALIDATION
)
client.run(TOKEN)