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
<PackageReference Include="Lyo.Discord.Bot" Version="1.0.1" />
<PackageVersion Include="Lyo.Discord.Bot" Version="1.0.1" />
<PackageReference Include="Lyo.Discord.Bot" />
paket add Lyo.Discord.Bot --version 1.0.1
#r "nuget: Lyo.Discord.Bot, 1.0.1"
#:package Lyo.Discord.Bot@1.0.1
#addin nuget:?package=Lyo.Discord.Bot&version=1.0.1
#tool nuget:?package=Lyo.Discord.Bot&version=1.0.1
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(fromDiscordBot)LyoDiscordClientOptions(fromLyoDiscordClient) andLyo.Discord.Client.LyoDiscordClient(HTTP client for upserts)IGuildDatabaseSyncService/GuildDatabaseSyncServiceLyoDiscordBot(singleton) andLyoDiscordBotBase(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(fromDiscordBot)LyoDiscordClientOptions(fromLyoDiscordClient) andLyo.Discord.Client.LyoDiscordClient(HTTP client for upserts)IGuildDatabaseSyncService/GuildDatabaseSyncServiceLyoDiscordBot(singleton) andLyoDiscordBotBase(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— adjustDiscordConfiguration(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; callbase.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)DSharpPlus4.5.2— (direct, third-party)DSharpPlus.CommandsNext4.5.2— (direct, third-party)DSharpPlus.Interactivity4.5.2— (direct, third-party)DSharpPlus.SlashCommands4.5.2— (direct, third-party)Microsoft.Extensions.DependencyInjection10.0.5— (direct, microsoft)Microsoft.Extensions.Logging.Abstractions10.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.Cryptography2.6.2— (transitive, third-party, netstandard2.0)EasyCompressor2.1.0— (transitive, third-party)Konscious.Security.Cryptography.Argon21.3.1— (transitive, third-party)Microsoft.Bcl.AsyncInterfaces10.0.5— (transitive, microsoft, netstandard2.0)Microsoft.Extensions.Caching.Memory10.0.5— (transitive, microsoft)Microsoft.Extensions.Configuration.Binder10.0.5— (transitive, microsoft)Microsoft.Extensions.DependencyInjection.Abstractions10.0.5— (transitive, microsoft, net10.0, netstandard2.0)Microsoft.Extensions.Http10.0.5— (transitive, microsoft)Microsoft.Extensions.Options.ConfigurationExtensions10.0.5— (transitive, microsoft)System.Buffers4.6.1— (transitive, microsoft, netstandard2.0)System.IO.Hashing10.0.5— (transitive, microsoft, net10.0)System.Memory4.6.3— (transitive, microsoft, netstandard2.0)System.Text.Json10.0.5— (transitive, microsoft, netstandard2.0)System.Threading.Tasks.Extensions4.6.3— (transitive, microsoft, netstandard2.0)
| Product | Versions 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. |
-
.NETStandard 2.0
- DSharpPlus (>= 4.5.2)
- DSharpPlus.CommandsNext (>= 4.5.2)
- DSharpPlus.Interactivity (>= 4.5.2)
- DSharpPlus.SlashCommands (>= 4.5.2)
- Lyo.Cache (>= 1.0.1)
- Lyo.Common (>= 1.0.1)
- Lyo.Diff (>= 1.0.1)
- Lyo.Discord.Client (>= 1.0.1)
- Lyo.Notification (>= 1.0.1)
- Microsoft.Extensions.DependencyInjection (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
-
net10.0
- DSharpPlus (>= 4.5.2)
- DSharpPlus.CommandsNext (>= 4.5.2)
- DSharpPlus.Interactivity (>= 4.5.2)
- DSharpPlus.SlashCommands (>= 4.5.2)
- Lyo.Cache (>= 1.0.1)
- Lyo.Common (>= 1.0.1)
- Lyo.Diff (>= 1.0.1)
- Lyo.Discord.Client (>= 1.0.1)
- Lyo.Notification (>= 1.0.1)
- Microsoft.Extensions.DependencyInjection (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.