@page "/plugins/local" @rendermode InteractiveServer @using DiscordBotCore.Logging @using DiscordBotCore.PluginManagement @using DiscordBotCore.PluginManagement.Loading @using DiscordBotCore.PluginManagement.Models @inject IPluginManager PluginManager @inject ILogger Logger @inject IPluginLoader PluginLoader @inject NavigationManager Navigation

Installed Plugins

@foreach (var plugin in _installedPlugins) { }
Name Version Offline Added Actions
@plugin.Name @plugin.Version @(plugin.IsOfflineAdded ? "Yes" : "No")
@if (_showPluginDetailsModal && _selectedPluginDetails != null) { } @code { private readonly List _installedPlugins = new List(); private bool _showPluginDetailsModal; private OnlinePlugin? _selectedPluginDetails; private async Task DeletePluginButtonClick(string pluginName) { PluginLoader.UnloadAllPlugins(); Logger.Log($"Deleting plugin {pluginName}", this); var response = await PluginManager.UninstallPluginByName(pluginName); if (!response.IsSuccess) { Logger.Log(response.Message, this, LogType.Error); return; } _installedPlugins.RemoveAll(p => p.Name == pluginName); Logger.Log($"Plugin {pluginName} deleted", this); await PluginLoader.LoadPlugins(); StateHasChanged(); } private async Task PluginDetailsButtonClick(string pluginName) { Logger.Log($"Getting plugin details for {pluginName}", this); var response = await PluginManager.GetPluginDataByName(pluginName); if (!response.IsSuccess) { Logger.Log(response.Message, this, LogType.Error); return; } _selectedPluginDetails = response.Data; _showPluginDetailsModal = true; Logger.Log($"Plugin details for {pluginName} retrieved", this); StateHasChanged(); } private void ClosePluginDetailsModal() { Logger.Log("Closing plugin details modal", this); _showPluginDetailsModal = false; _selectedPluginDetails = null; StateHasChanged(); } protected override async Task OnInitializedAsync() { Logger.Log("Local plugins page initialized", this); var plugins = await PluginManager.GetInstalledPlugins(); if (!plugins.Any()) { Logger.Log("No plugins found", this, LogType.Warning); return; } Logger.Log($"Found {plugins.Count} plugins", this); _installedPlugins.Clear(); foreach (var plugin in plugins) { var installedPlugin = new InstalledPlugin { Name = plugin.PluginName, Version = plugin.PluginVersion, IsOfflineAdded = plugin.IsOfflineAdded }; _installedPlugins.Add(installedPlugin); } StateHasChanged(); } private class InstalledPlugin { public string Name { get; set; } public string Version { get; set; } public bool IsOfflineAdded { get; set; } } private void NavigateToAddPlugin() { Navigation.NavigateTo("/plugins/add-local"); } }