@page "/settings" @using System.ComponentModel.DataAnnotations @using DiscordBotCore.Configuration @using DiscordBotCore.Logging @using WebUI.Components.Shared @inject NavigationManager Navigation @rendermode InteractiveServer @if (_settingsViewModel is not null) {
} @code { [Inject] public ILogger Logger { get; set; } [Inject] public IConfiguration Configuration { get; set; } private SettingsViewModel? _settingsViewModel; protected override void OnInitialized() { var token = Configuration.Get("token"); var prefix = Configuration.Get("prefix"); var serverIds = Configuration.GetList("ServerIds", new List()); if (token is null || prefix is null) { Logger.Log("Token or Prefix is not set in the configuration.", this); _settingsViewModel = new SettingsViewModel(); return; } _settingsViewModel = new SettingsViewModel { Token = token, Prefix = prefix, ServerIds = string.Join(',', serverIds) }; } private async Task HandleSubmitTask() { if (_settingsViewModel is null) return; var ids = _settingsViewModel.ServerIds .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(id => ulong.TryParse(id.Trim(), out var v) ? v : 0) .Where(v => v != 0) .ToList(); if (string.IsNullOrWhiteSpace(_settingsViewModel.Token) || string.IsNullOrWhiteSpace(_settingsViewModel.Prefix)) return; Configuration.Set("token", _settingsViewModel.Token); Configuration.Set("prefix", _settingsViewModel.Prefix); Configuration.Set("ServerIds", ids); await Configuration.SaveToFile(); Logger.Log("Settings saved successfully.", this); Navigation.NavigateTo("/"); } private class SettingsViewModel { [Required(ErrorMessage = "Token is required.")] public string Token { get; set; } = string.Empty; [Required(ErrorMessage = "Prefix is required.")] public string Prefix { get; set; } = string.Empty; [Required(ErrorMessage = "Server IDs are required.")] public string ServerIds { get; set; } = string.Empty; } }