discordplace-sync
Version: 
SDK officiel pour synchroniser automatiquement les statistiques de votre bot Discord avec DiscordPlace
166 lines (138 loc) • 4.32 kB
JavaScript
const DiscordPlaceSDK = require('./index');
// Exemple d'utilisation basique
async function exempleBasique() {
  const sdk = new DiscordPlaceSDK({
    apiKey: 'votre_cle_api_ici',
    botId: '123456789012345678',
    autoSync: true,
    syncInterval: 300000 // 5 minutes
  });
  // Gestionnaires d'événements
  sdk.on('success', (data) => {
    console.log('✅ Statistiques synchronisées:', data);
  });
  sdk.on('error', (error) => {
    console.error('❌ Erreur:', error.message);
  });
  sdk.on('start', () => {
    console.log('🚀 SDK démarré');
  });
  // Démarrer le SDK
  sdk.start();
  // Envoyer des statistiques manuellement
  try {
    await sdk.updateStats({
      guildCount: 150,
      userCount: 50000,
      channelCount: 1200,
      commandsUsed: 125000,
      uptime: process.uptime() * 1000,
      memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024,
      latency: 45,
      version: '2.1.0'
    });
  } catch (error) {
    console.error('Erreur lors de l\'envoi des stats:', error);
  }
}
// Exemple avec Discord.js
async function exempleDiscordJS() {
  const { Client, GatewayIntentBits } = require('discord.js');
  
  const client = new Client({
    intents: [GatewayIntentBits.Guilds]
  });
  const sdk = new DiscordPlaceSDK({
    apiKey: process.env.DISCORDPLACE_API_KEY,
    botId: client.user?.id || 'bot_id_ici',
    autoSync: true
  });
  client.once('ready', async () => {
    console.log(`Bot connecté: ${client.user.tag}`);
    
    // Démarrer le SDK
    sdk.start();
    
    // Première synchronisation
    await sdk.autoCollectStats(client);
    
    // Programmer une synchronisation automatique toutes les 5 minutes
    setInterval(async () => {
      try {
        await sdk.autoCollectStats(client);
      } catch (error) {
        console.error('Erreur de synchronisation automatique:', error);
      }
    }, 5 * 60 * 1000);
  });
  // client.login(process.env.BOT_TOKEN);
}
// Exemple de récupération des statistiques
async function exempleRecuperationStats() {
  const sdk = new DiscordPlaceSDK({
    apiKey: 'votre_cle_api_ici',
    botId: '123456789012345678'
  });
  sdk.start();
  try {
    // Récupérer les stats des dernières 24h
    const stats24h = await sdk.getStats('24h');
    console.log('Statistiques 24h:', stats24h);
    // Récupérer les stats de la dernière semaine
    const stats7d = await sdk.getStats('7d');
    console.log('Statistiques 7 jours:', stats7d);
    // Informations de la clé API
    const apiInfo = await sdk.getApiKeyInfo();
    console.log('Infos clé API:', apiInfo);
  } catch (error) {
    console.error('Erreur:', error);
  }
}
// Exemple avec gestion d'erreurs avancée
async function exempleAvance() {
  const sdk = new DiscordPlaceSDK({
    apiKey: 'votre_cle_api_ici',
    botId: '123456789012345678',
    autoSync: true,
    retries: 5,
    timeout: 15000
  });
  // Gestion détaillée des événements
  sdk.on('success', (data) => {
    console.log(`✅ Stats synchronisées - Bot ${data.success ? 'en ligne' : 'hors ligne'}`);
  });
  sdk.on('error', (error) => {
    if (error.message.includes('401')) {
      console.error('🔑 Clé API invalide ou expirée');
    } else if (error.message.includes('429')) {
      console.error('⏰ Rate limit atteint, réessai automatique...');
    } else {
      console.error('❌ Erreur:', error.message);
    }
  });
  sdk.start();
  // Simuler des statistiques qui changent
  let commandCount = 0;
  setInterval(async () => {
    commandCount += Math.floor(Math.random() * 10) + 1;
    
    try {
      await sdk.updateStats({
        guildCount: 100 + Math.floor(Math.random() * 50),
        commandsUsed: commandCount,
        uptime: process.uptime() * 1000,
        memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024,
        version: '1.0.0'
      });
    } catch (error) {
      // L'erreur est déjà gérée par l'event listener
    }
  }, 10000); // Toutes les 10 secondes pour la démo
}
// Exporter les exemples
module.exports = {
  exempleBasique,
  exempleDiscordJS,
  exempleRecuperationStats,
  exempleAvance
};
// Exécuter un exemple si le fichier est lancé directement
if (require.main === module) {
  console.log('🚀 Exécution de l\'exemple basique...');
  exempleBasique().catch(console.error);
}