From c7c4705c528d5b4479792ca8cd89c3e242e0cbbd Mon Sep 17 00:00:00 2001 From: sirpiglr <49359077-sirpiglr@users.noreply.replit.com> Date: Sat, 13 Dec 2025 10:52:52 +0000 Subject: [PATCH] Add a daily scheduler to evaluate and update federation trust levels Introduces a new daily scheduler in `bot.js` to evaluate federation server trust levels based on member count and other factors. Includes an API endpoint `/api/federation/guild/:guildId` in `webServer.js` to fetch guild-specific federation status, and updates `dashboard.html` to display this information. Replit-Commit-Author: Agent Replit-Commit-Session-Id: aed2e46d-25bb-4b73-81a1-bb9e8437c261 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: 342196c8-6efc-4cab-9367-2e90abd6f3e1 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/aed2e46d-25bb-4b73-81a1-bb9e8437c261/HdH3K6u Replit-Helium-Checkpoint-Created: true --- aethex-bot/bot.js | 119 +++++++++++++++++++++++++++++ aethex-bot/public/dashboard.html | 124 +++++++++++++++++++++++++++++++ aethex-bot/server/webServer.js | 70 +++++++++++++++++ 3 files changed, 313 insertions(+) diff --git a/aethex-bot/bot.js b/aethex-bot/bot.js index 794459c..780e72a 100644 --- a/aethex-bot/bot.js +++ b/aethex-bot/bot.js @@ -2781,6 +2781,7 @@ client.once("clientReady", async () => { // Start automatic backup scheduler if (supabase) { startAutoBackupScheduler(client, supabase); + startFederationTrustEvaluator(client, supabase); } }); @@ -2863,6 +2864,124 @@ async function startAutoBackupScheduler(discordClient, supabaseClient) { console.log('[Backup] Scheduler started - checking every hour'); } +// ============================================================================= +// FEDERATION TRUST LEVEL PROGRESSION SCHEDULER +// ============================================================================= + +async function startFederationTrustEvaluator(discordClient, supabaseClient) { + console.log('[Federation] Starting trust level evaluation scheduler...'); + + const { calculateTrustLevel, getTrustLevelInfo } = require('./utils/trustLevels'); + + // Evaluate trust levels daily + setInterval(async () => { + try { + const { data: servers } = await supabaseClient + .from('federation_servers') + .select('*') + .eq('status', 'approved'); + + if (!servers || servers.length === 0) return; + + let upgrades = 0; + let downgrades = 0; + + for (const server of servers) { + // Get current member count from Discord + const guild = discordClient.guilds.cache.get(server.guild_id); + const memberCount = guild?.memberCount || server.member_count || 0; + + // Update member count in database + if (guild && memberCount !== server.member_count) { + await supabaseClient + .from('federation_servers') + .update({ member_count: memberCount }) + .eq('guild_id', server.guild_id); + } + + // Calculate new trust level + const serverData = { ...server, member_count: memberCount }; + const newLevel = calculateTrustLevel(serverData); + const currentLevel = server.trust_level || 'bronze'; + + if (newLevel !== currentLevel) { + const oldInfo = getTrustLevelInfo(currentLevel); + const newInfo = getTrustLevelInfo(newLevel); + + await supabaseClient + .from('federation_servers') + .update({ + trust_level: newLevel, + updated_at: new Date().toISOString(), + last_activity: new Date().toISOString() + }) + .eq('guild_id', server.guild_id); + + // Determine if upgrade or downgrade + const levels = ['bronze', 'silver', 'gold', 'platinum']; + const isUpgrade = levels.indexOf(newLevel) > levels.indexOf(currentLevel); + + if (isUpgrade) { + upgrades++; + console.log(`[Federation] ${server.guild_name}: ${oldInfo.emoji} ${oldInfo.name} → ${newInfo.emoji} ${newInfo.name} (UPGRADE)`); + } else { + downgrades++; + console.log(`[Federation] ${server.guild_name}: ${oldInfo.emoji} ${oldInfo.name} → ${newInfo.emoji} ${newInfo.name} (DOWNGRADE)`); + } + + // Send notification to the server if we can + if (guild) { + try { + const systemChannel = guild.systemChannel; + if (systemChannel) { + const { EmbedBuilder } = require('discord.js'); + const embed = new EmbedBuilder() + .setColor(newInfo.color) + .setTitle(`${newInfo.emoji} Federation Trust Level ${isUpgrade ? 'Upgrade' : 'Change'}!`) + .setDescription(isUpgrade + ? `Congratulations! Your server has been promoted to **${newInfo.name}** tier in the Federation.` + : `Your server's Federation tier has been adjusted to **${newInfo.name}**.`) + .addFields( + { name: 'Previous Tier', value: `${oldInfo.emoji} ${oldInfo.name}`, inline: true }, + { name: 'New Tier', value: `${newInfo.emoji} ${newInfo.name}`, inline: true } + ) + .setTimestamp(); + + await systemChannel.send({ embeds: [embed] }).catch(() => {}); + } + } catch (e) { + // Silent fail for notifications + } + } + } + } + + if (upgrades > 0 || downgrades > 0) { + console.log(`[Federation] Trust evaluation complete: ${upgrades} upgrades, ${downgrades} downgrades`); + } + } catch (error) { + console.error('[Federation] Trust evaluation error:', error.message); + } + }, 24 * 60 * 60 * 1000); // Evaluate daily + + // Also run immediately on startup (after a short delay) + setTimeout(async () => { + console.log('[Federation] Running initial trust level evaluation...'); + try { + const { data: servers } = await supabaseClient + .from('federation_servers') + .select('*') + .eq('status', 'approved'); + + console.log(`[Federation] Monitoring ${servers?.length || 0} federation servers`); + } catch (e) { + console.error('[Federation] Initial check error:', e.message); + } + }, 10000); + + console.log('[Federation] Trust evaluator started - checking daily'); +} + // ============================================================================= // ERROR HANDLING // ============================================================================= diff --git a/aethex-bot/public/dashboard.html b/aethex-bot/public/dashboard.html index ff1a649..e832d17 100644 --- a/aethex-bot/public/dashboard.html +++ b/aethex-bot/public/dashboard.html @@ -2241,6 +2241,19 @@
Manage your federation membership, view bans, and applications
+Loading status...
+This server is not a Federation member.
+Join the Federation to get cross-server protection from raiders, scammers, and malicious users.
+ Learn More & Apply +✨ All requirements met! Upgrade will be applied in the next evaluation.
' : ''} +🎉 Maximum trust level reached!
'; + } + + container.innerHTML = ` +