diff --git a/.replit b/.replit index 791541a..1dec3b0 100644 --- a/.replit +++ b/.replit @@ -1,5 +1,5 @@ entrypoint = "aethex-bot/bot.js" -modules = ["nodejs-20"] +modules = ["nodejs-20", "postgresql-16"] hidden = [".pythonlibs"] @@ -21,6 +21,10 @@ externalPort = 80 localPort = 8080 externalPort = 8080 +[[ports]] +localPort = 41927 +externalPort = 3000 + [workflows] runButton = "Project" diff --git a/aethex-bot/public/dashboard.html b/aethex-bot/public/dashboard.html index 0f841d6..f23e193 100644 --- a/aethex-bot/public/dashboard.html +++ b/aethex-bot/public/dashboard.html @@ -1168,6 +1168,32 @@
+
+
+

General Settings

+
+
+
+
+ +
+
+ + + Formula: level = sqrt(xp / base) +
+
+
+
+

Message XP

@@ -1175,18 +1201,13 @@
- - - Minimum XP earned per message + + + XP earned per message
- - - Maximum XP earned per message -
-
- - + + Time between earning XP from messages
@@ -1195,24 +1216,31 @@
-

Other XP Sources

+

Reaction XP

- - + +
+
+ + + XP earned when you react to a message +
+
+ + XP earned when someone reacts to your message
- - - XP earned per minute in voice channels -
-
- - - XP from daily claim command + + + Time between earning reaction XP
@@ -1220,55 +1248,37 @@
-

Level-Up Settings

+

Level-Up Announcements

- - - Higher = slower leveling (formula: level = sqrt(xp/base)) + + + Channel ID for level-up messages
- - - Where to announce level-ups + + + Use {user}, {level}, {xp} placeholders
-
-
-
-
-
-
- -
-
-

XP Multipliers

-
-
-
- - - Multiplies all XP earned (1.0 = normal) +
- - - Extra multiplier on weekends + +
diff --git a/aethex-bot/server/webServer.js b/aethex-bot/server/webServer.js index 45d64ed..e53749e 100644 --- a/aethex-bot/server/webServer.js +++ b/aethex-bot/server/webServer.js @@ -499,41 +499,47 @@ function createWebServer(discordClient, supabase, options = {}) { } const { - message_xp_min, - message_xp_max, + message_xp, message_cooldown, - reaction_xp, - voice_xp_per_minute, - daily_xp, - xp_base, + reaction_xp_enabled, + reaction_xp_given, + reaction_xp_received, + reaction_cooldown, + level_curve, + xp_enabled, levelup_channel_id, - levelup_enabled, + levelup_message, levelup_dm, - xp_multiplier, - weekend_multiplier + levelup_embed, + levelup_embed_color, + multiplier_roles, + bonus_channels } = req.body; try { const { data: existing } = await supabase .from('xp_config') - .select('id') + .select('guild_id') .eq('guild_id', guildId) .maybeSingle(); const configData = { guild_id: guildId, - message_xp_min: message_xp_min ?? 15, - message_xp_max: message_xp_max ?? 25, + message_xp: message_xp ?? 15, message_cooldown: message_cooldown ?? 60, - reaction_xp: reaction_xp ?? 5, - voice_xp_per_minute: voice_xp_per_minute ?? 2, - daily_xp: daily_xp ?? 100, - xp_base: xp_base ?? 100, + reaction_xp_enabled: reaction_xp_enabled !== false, + reaction_xp_given: reaction_xp_given ?? 2, + reaction_xp_received: reaction_xp_received ?? 5, + reaction_cooldown: reaction_cooldown ?? 30, + level_curve: level_curve || 'normal', + xp_enabled: xp_enabled !== false, levelup_channel_id: levelup_channel_id || null, - levelup_enabled: levelup_enabled !== false, + levelup_message: levelup_message || null, levelup_dm: levelup_dm === true, - xp_multiplier: xp_multiplier ?? 1.0, - weekend_multiplier: weekend_multiplier ?? 1.5, + levelup_embed: levelup_embed !== false, + levelup_embed_color: levelup_embed_color || '#7c3aed', + multiplier_roles: multiplier_roles || [], + bonus_channels: bonus_channels || [], updated_at: new Date().toISOString() }; @@ -545,7 +551,6 @@ function createWebServer(discordClient, supabase, options = {}) { if (error) throw error; } else { - configData.created_at = new Date().toISOString(); const { error } = await supabase .from('xp_config') .insert(configData); @@ -556,7 +561,7 @@ function createWebServer(discordClient, supabase, options = {}) { res.json({ success: true }); } catch (error) { console.error('Failed to save XP config:', error); - res.status(500).json({ error: 'Failed to save settings' }); + res.status(500).json({ error: 'Failed to save settings', details: error.message }); } });