Lyo.Discord.Bot
2.0.0
dotnet add package Lyo.Discord.Bot --version 2.0.0
NuGet\Install-Package Lyo.Discord.Bot -Version 2.0.0
<PackageReference Include="Lyo.Discord.Bot" Version="2.0.0" />
<PackageVersion Include="Lyo.Discord.Bot" Version="2.0.0" />
<PackageReference Include="Lyo.Discord.Bot" />
paket add Lyo.Discord.Bot --version 2.0.0
#r "nuget: Lyo.Discord.Bot, 2.0.0"
#:package Lyo.Discord.Bot@2.0.0
#addin nuget:?package=Lyo.Discord.Bot&version=2.0.0
#tool nuget:?package=Lyo.Discord.Bot&version=2.0.0
Lyo.Discord.Bot
Library (not an executable) that runs a DSharpPlus Discord bot and upserts guild data into your Lyo API (Lyo.Discord.Client against PostgreSQL-backed Discord/* endpoints). Host apps (for example Lyo.TestConsole) treat it as a base: configure the Discord token under DiscordBot, the Lyo API HTTP client under LyoDiscordClient, resolve services from DI, and call RunAsync.
Features
LyoDiscordBotOptions(bound fromDiscordBot)LyoDiscordClientOptions(bound fromLyoDiscordClient) andLyo.Discord.Client.LyoDiscordClient(HTTP client used for upserts)IGuildDatabaseSyncService/GuildDatabaseSyncServiceLyoDiscordBot(singleton) andLyoDiscordBotBase(the same instance)
Examples
Add the bot
using Lyo.Discord.Bot;
services.AddLyoDiscordBot<LyoDiscordBot>(configuration);
Run the bot from a host
var bot = host.Services.GetRequiredService<LyoDiscordBot>();
await bot.RunAsync(cancellationToken);
Settings
DiscordBot (→ LyoDiscordBotOptions): settings that apply only to Discord.
| Property | Description |
|---|---|
Token |
Token for the Discord bot. |
Intents |
Optional. Gateway intent flags; default is `Guilds \ |
LyoDiscordClient (→ LyoDiscordClientOptions): HTTP client for the Lyo API (Discord/* routes). Inherits ApiClientOptions. Set BaseUrl (defaults to http://localhost:5092/ when omitted), plus compression, AcceptEncodings, EnsureStatusCode, etc.
Service registration
LyoDiscordBotOptions(bound fromDiscordBot)LyoDiscordClientOptions(bound fromLyoDiscordClient) andLyo.Discord.Client.LyoDiscordClient(HTTP client used for upserts)IGuildDatabaseSyncService/GuildDatabaseSyncServiceLyoDiscordBot(singleton) andLyoDiscordBotBase(the same instance)
Sync coverage
- 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-command tree
A built-in slash-command tree under Commands/Settings/ drives per-guild bot configuration through the Lyo API and the
DiscordGuildSettings config-store document. Discord/DSharpPlus will not let a slash group mix direct subcommands and nested subgroups, so everything hangs off subgroups:
| Command | Description |
|---|---|
/settings channels setcommandchannel |
Pick the channel where the bot accepts commands (defaults to the current channel). |
/settings channels setlogchannel |
Pick the channel where the bot posts errors and operational notices. |
/settings roles setmodrole |
Pick the moderator role used by bot permission checks. |
/settings roles setadminrole |
Pick the admin role used by bot permission checks. |
/settings info … |
Show effective guild settings (subgroup defined in GuildSlashSettings). |
Shared 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 (for example via client.UseSlashCommands().RegisterCommands<GuildSettingsSlashCommands>(guildId)).
Slash command handlers update settings through 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 another API round-trip.
Subclassing the bot
Subclass LyoDiscordBotBase and register your type with AddLyoDiscordBot<MyBot>(configuration).
ConfigureDiscordConfiguration. tweakDiscordConfiguration(for example intents).ConfigureDiscordClient. register DSharpPlus extensions (for example 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(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) => { /* ... */ };
}
}
Package references
- DSharpPlus. gateway and REST helpers the bot host uses.
- 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.Core(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.Models(transitive, lyo)Lyo.Common.Json(transitive, lyo)Lyo.Common.Metadata(transitive, lyo)Lyo.Compression(transitive, lyo)Lyo.Configuration(transitive, lyo)Lyo.DateAndTime(transitive, lyo)Lyo.Discord.Models(transitive, lyo)Lyo.Encryption(transitive, lyo)Lyo.Exceptions(transitive, lyo)Lyo.Hashing(transitive, lyo)Lyo.Health(transitive, lyo)Lyo.Http.Client(transitive, lyo)Lyo.KeyStore(transitive, lyo)Lyo.Metrics(transitive, lyo)Lyo.Parameters(transitive, lyo)Lyo.Query.Models(transitive, lyo)Lyo.Result(transitive, lyo)Lyo.Streams(transitive, lyo)AngleSharp1.5.0(transitive, third-party)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.Configuration10.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.RateLimiting10.0.5(transitive, microsoft)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 (>= 2.0.0)
- Lyo.Common.Core (>= 2.0.0)
- Lyo.Diff (>= 2.0.0)
- Lyo.Discord.Client (>= 2.0.0)
- Lyo.Notification (>= 2.0.0)
- 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 (>= 2.0.0)
- Lyo.Common.Core (>= 2.0.0)
- Lyo.Diff (>= 2.0.0)
- Lyo.Discord.Client (>= 2.0.0)
- Lyo.Notification (>= 2.0.0)
- 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.