'use client'; import { useState, useEffect } from "react"; import { fetchWithAuth } from "@/utils/api"; import Link from "next/link"; import Card from "@/app/components/Card"; import Navbar from "@/app/components/Navbar"; export default function Guilds() { const [guilds, setGuilds] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [clientId, setClientId] = useState(null); const [selectedGuild, setSelectedGuild] = useState(null); const [showModal, setShowModal] = useState(false); const [formData, setFormData] = useState({ guildID: '', logChannelID: '', suggestionsChannelID: '', qotdChannelID: '', qotdToggle: false, ollamaEnabled: false }); const [formMessage, setFormMessage] = useState(null); useEffect(() => { const fetchData = async () => { try { // Fetch guilds const guildsResponse = await fetchWithAuth('/api/servers'); if (!guildsResponse.ok) { throw new Error('Failed to fetch guilds'); } const guildsData = await guildsResponse.json(); setGuilds(guildsData); // Fetch client ID const apiUrl = localStorage.getItem('apiUrl') || ''; const versionResponse = await fetch(`${apiUrl}/api/version`); if (!versionResponse.ok) { throw new Error('Failed to fetch version data'); } const versionData = await versionResponse.json(); setClientId(versionData.client_id); } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchData(); }, []); const handleLeaveServer = async (serverId) => { if (window.confirm('Are you sure you want to leave this server?')) { try { const response = await fetchWithAuth(`/api/leave`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: serverId }) }); if (!response.ok) { throw new Error('Failed to leave server'); } // Remove server from list setGuilds(guilds.filter(guild => guild.id !== serverId)); // Close modal if the guild was selected if (selectedGuild === serverId) { closeModal(); } } catch (err) { setError(err.message); } } }; const handleGuildSelect = async (guildId) => { try { setSelectedGuild(guildId); const response = await fetchWithAuth(`/api/settings/guilds/${guildId}`); if (!response.ok) { throw new Error('Failed to fetch guild settings'); } const data = await response.json(); setFormData({ guildID: data.settings.guildID || '', logChannelID: data.settings.logChannelID || '', suggestionsChannelID: data.settings.suggestionsChannelID || '', qotdChannelID: data.settings.qotdChannelID || '', qotdToggle: data.settings.qotdToggle || false, ollamaEnabled: data.settings.ollamaEnabled || false }); setShowModal(true); } catch (err) { setError(err.message); setFormData({ guildID: guildId, logChannelID: '', suggestionsChannelID: '', qotdChannelID: '', qotdToggle: false, ollamaEnabled: false }); setShowModal(true); } }; const handleInputChange = (e) => { const { name, value, type, checked } = e.target; setFormData({ ...formData, [name]: type === 'checkbox' ? checked : value }); }; const handleSubmit = async (e) => { e.preventDefault(); setFormMessage(null); try { const response = await fetchWithAuth(`/api/settings/guilds/${selectedGuild}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (!response.ok) { throw new Error('Failed to update guild settings'); } setFormMessage({ type: 'success', text: 'Settings updated successfully' }); // Clear message after 3 seconds setTimeout(() => { setFormMessage(null); }, 3000); } catch (err) { setFormMessage({ type: 'error', text: err.message }); } }; const closeModal = () => { setShowModal(false); setSelectedGuild(null); setFormMessage(null); }; return ( <>

Guilds

{loading &&

Loading guilds...

} {error &&

Error: {error}

} {!loading && guilds.length === 0 && (

No guilds found. Invite AleeBot to your server.

)}
{guilds.map(guild => (

{guild.name}

ID: {guild.id} - Members: {guild.members || 'N/A'}

))}
Invite
{/* Settings Modal */} {showModal && (

Guild Settings: {guilds.find(g => g.id === selectedGuild)?.name}

{formMessage && (
{formMessage.text}
)}
)} ); }