Lyo.Discord.Bot 1.0.1

dotnet add package Lyo.Discord.Bot --version 1.0.1
                    
NuGet\Install-Package Lyo.Discord.Bot -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Lyo.Discord.Bot" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Lyo.Discord.Bot" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Lyo.Discord.Bot" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Lyo.Discord.Bot --version 1.0.1
                    
#r "nuget: Lyo.Discord.Bot, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Lyo.Discord.Bot@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Lyo.Discord.Bot&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=Lyo.Discord.Bot&version=1.0.1
                    
Install as a Cake Tool

Lyo.Discord.Bot

Library (not an executable) that runs a DSharpPlus Discord bot and upserts guild data into your Lyo API (Lyo.Discord.Client → PostgreSQL-backed Discord/* endpoints). Use it as a base so host apps (e.g. Lyo.TestConsole) configure the Discord token under DiscordBot, the Lyo API HTTP client under LyoDiscordClient, resolve services from DI, and call RunAsync.

Features

  • LyoDiscordBotOptions (from DiscordBot)
  • LyoDiscordClientOptions (from LyoDiscordClient) and Lyo.Discord.Client.LyoDiscordClient (HTTP client for upserts)
  • IGuildDatabaseSyncService / GuildDatabaseSyncService
  • LyoDiscordBot (singleton) and LyoDiscordBotBase (same instance)

Examples

Register services

using Lyo.Discord.Bot;

services.AddLyoDiscordBot<LyoDiscordBot>(configuration);

Starting the bot from a host app

var bot = host.Services.GetRequiredService<LyoDiscordBot>();
await bot.RunAsync(cancellationToken);

Configuration

DiscordBot (→ LyoDiscordBotOptions): Discord-only settings.

Property Description
Token Discord bot token.
Intents Optional. Gateway intents; default is `Guilds \

LyoDiscordClient (→ LyoDiscordClientOptions): HTTP client for the Lyo API (Discord/* routes). Inherits * ApiClientOptions* — set BaseUrl (default http://localhost:5092/ if omitted), plus compression, AcceptEncodings, EnsureStatusCode, etc.

Registration

  • LyoDiscordBotOptions (from DiscordBot)
  • LyoDiscordClientOptions (from LyoDiscordClient) and Lyo.Discord.Client.LyoDiscordClient (HTTP client for upserts)
  • IGuildDatabaseSyncService / GuildDatabaseSyncService
  • LyoDiscordBot (singleton) and LyoDiscordBotBase (same instance)

What gets synced

  • Full guild sync (owner user if needed, guild row, channels bulk, emojis via REST + bulk, users + members bulk): GuildAvailable, GuildCreated, GuildDownloadCompleted ( each guild in the download batch).
  • Guild metadata only: GuildUpdated.
  • Single channel: ChannelCreated, ChannelUpdated.
  • User + member row: GuildMemberAdded, GuildMemberUpdated.
  • Emojis: GuildEmojisUpdated (re-fetch via REST where applicable).

Slash commands

The package ships a built-in slash-command tree under Commands/Settings/ that drives per-guild bot configuration through the Lyo API and the DiscordGuildSettings config-store document. Discord/DSharpPlus do not allow a slash group to mix direct subcommands and nested subgroups, so everything hangs off subgroups:

Command Description
/settings channels setcommandchannel Set the channel where the bot accepts commands (defaults to current channel).
/settings channels setlogchannel Set the channel where the bot posts errors and operational notices.
/settings roles setmodrole Set the moderator role used by bot permission checks.
/settings roles setadminrole Set the admin role used by bot permission checks.
/settings info … Display effective guild settings (subgroup defined in GuildSlashSettings).

Centralized name/description constants live in GuildSlashSettings.cs; error responses are normalized via SlashCommandErrorResponder and DiscordCommandException. Register the command module on your DSharpPlus client in ConfigureDiscordClient (e.g. via client.UseSlashCommands().RegisterCommands<GuildSettingsSlashCommands>(guildId)).

Slash command handlers update settings via LyoApi.Guilds.GetSettingsAsync / PutSettingsAsync and then push the new document into the local cache (Cache.SetGuildSettings) so the in-process bot reads the latest values without an extra API round-trip.

Extending the base bot

Derive from LyoDiscordBotBase and register your type with AddLyoDiscordBot<MyBot>(configuration).

  • ConfigureDiscordConfiguration — adjust DiscordConfiguration (e.g. intents).
  • ConfigureDiscordClient — register DSharpPlus extensions (e.g. CommandsNext, slash commands, interactivity). Call before handlers are wired.
  • RegisterDefaultSyncHandlers — override if you need to change sync behavior; call base.RegisterDefaultSyncHandlers(client) to keep database sync.
  • RegisterAdditionalHandlers — subscribe to other gateway events.

Example sketch:

public sealed class MyBot : LyoDiscordBotBase
{
    public MyBot(IOptions<LyoDiscordBotOptions> o, Lyo.Discord.Client.LyoDiscordClient api, IGuildDatabaseSyncService s, ILoggerFactory lf)
        : base(o, api, s, lf) { }

    protected override void ConfigureDiscordClient(DSharpPlus.DiscordClient client)
    {
        // client.UseCommandsNext(...);
    }

    protected override void RegisterAdditionalHandlers(DSharpPlus.DiscordClient client)
    {
        client.MessageCreated += async (_, e) => { /* ... */ };
    }
}

Packages

  • DSharpPlus — gateway and REST helpers used by the bot host.
  • Lyo.Discord.Client — HTTP upserts to your Lyo API.

Dependencies

Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).

  • Lyo.Cache — (direct, lyo)
  • Lyo.Common — (direct, lyo)
  • Lyo.Diff — (direct, lyo)
  • Lyo.Discord.Client — (direct, lyo)
  • Lyo.Notification — (direct, lyo)
  • DSharpPlus 4.5.2 — (direct, third-party)
  • DSharpPlus.CommandsNext 4.5.2 — (direct, third-party)
  • DSharpPlus.Interactivity 4.5.2 — (direct, third-party)
  • DSharpPlus.SlashCommands 4.5.2 — (direct, third-party)
  • Microsoft.Extensions.DependencyInjection 10.0.5 — (direct, microsoft)
  • Microsoft.Extensions.Logging.Abstractions 10.0.5 — (direct, microsoft)
  • Lyo.Api.Client — (transitive, lyo)
  • Lyo.Api.Models — (transitive, lyo)
  • Lyo.Compression — (transitive, lyo)
  • Lyo.DateAndTime — (transitive, lyo)
  • Lyo.Diagnostic — (transitive, lyo)
  • Lyo.Discord.Models — (transitive, lyo)
  • Lyo.Encryption — (transitive, lyo)
  • Lyo.Exceptions — (transitive, lyo)
  • Lyo.Hashing — (transitive, lyo)
  • Lyo.Health — (transitive, lyo)
  • Lyo.KeyStore — (transitive, lyo)
  • Lyo.Metrics — (transitive, lyo)
  • Lyo.PackageMetadata — (transitive, lyo)
  • Lyo.Query.Models — (transitive, lyo)
  • Lyo.Result — (transitive, lyo)
  • Lyo.Streams — (transitive, lyo)
  • BouncyCastle.Cryptography 2.6.2 — (transitive, third-party, netstandard2.0)
  • EasyCompressor 2.1.0 — (transitive, third-party)
  • Konscious.Security.Cryptography.Argon2 1.3.1 — (transitive, third-party)
  • Microsoft.Bcl.AsyncInterfaces 10.0.5 — (transitive, microsoft, netstandard2.0)
  • Microsoft.Extensions.Caching.Memory 10.0.5 — (transitive, microsoft)
  • Microsoft.Extensions.Configuration.Binder 10.0.5 — (transitive, microsoft)
  • Microsoft.Extensions.DependencyInjection.Abstractions 10.0.5 — (transitive, microsoft, net10.0, netstandard2.0)
  • Microsoft.Extensions.Http 10.0.5 — (transitive, microsoft)
  • Microsoft.Extensions.Options.ConfigurationExtensions 10.0.5 — (transitive, microsoft)
  • System.Buffers 4.6.1 — (transitive, microsoft, netstandard2.0)
  • System.IO.Hashing 10.0.5 — (transitive, microsoft, net10.0)
  • System.Memory 4.6.3 — (transitive, microsoft, netstandard2.0)
  • System.Text.Json 10.0.5 — (transitive, microsoft, netstandard2.0)
  • System.Threading.Tasks.Extensions 4.6.3 — (transitive, microsoft, netstandard2.0)
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 30 8/18/2026
1.0.0 57 8/16/2026