OneBotLib 1.0.3
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package OneBotLib --version 1.0.3
NuGet\Install-Package OneBotLib -Version 1.0.3
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="OneBotLib" Version="1.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OneBotLib" Version="1.0.3" />
<PackageReference Include="OneBotLib" />
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 OneBotLib --version 1.0.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: OneBotLib, 1.0.3"
#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 OneBotLib@1.0.3
#: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=OneBotLib&version=1.0.3
#tool nuget:?package=OneBotLib&version=1.0.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
OneBotLib
A C# library that fully implements the OneBot 11 protocol, supporting WebSocket communication with OneBot implementations.
Features
- Full OneBot 11 protocol implementation
- WebSocket communication support
- Event-driven architecture
- Comprehensive message segment builder
- Async/await pattern support
- Shared context for external connections
- Connection state management
Installation
NuGet
dotnet add package OneBotLib
Or via Package Manager:
Install-Package OneBotLib
Quick Start
using OneBotLib;
using OneBotLib.Events;
using OneBotLib.Models;
using OneBotLib.MessageSegment;
// Create client instance
var client = new OneBotClient();
// Subscribe to events
client.OnMessage += (sender, e) =>
{
Console.WriteLine($"Received message: {e.Message.PlainText}");
};
client.OnGroupMessage += (sender, e) =>
{
var msg = e.Message;
Console.WriteLine($"Group {msg.GroupId} - {msg.Sender.Nickname}: {msg.PlainText}");
};
client.OnPrivateMessage += (sender, e) =>
{
var msg = e.Message;
Console.WriteLine($"Private {msg.UserId}: {msg.PlainText}");
};
// Connect to OneBot service
await client.ConnectAsync("ws://127.0.0.1:3001", "your_access_token");
// Or synchronous connection
bool connected = client.ConnectSync("ws://127.0.0.1:3001", "your_access_token", 5);
// Send message (check result with ApiResult)
var result = await client.SendPrivateMsgAsync(123456789, "Hello, World!");
if (result.Success)
{
Console.WriteLine($"Message sent, ID: {result.Data}");
}
else
{
Console.WriteLine($"Failed: {result.ErrorMessage}");
}
// Send complex message
var segments = new List<MessageSegment.MessageSegment>
{
MessageSegment.MessageSegment.At(123456789),
MessageSegment.MessageSegment.Text(" Hello!"),
MessageSegment.MessageSegment.Image("https://example.com/image.png")
};
await client.SendGroupMsgAsync(987654321, segments);
// Close connection
await client.CloseAsync();
Connection State
// Subscribe to connection state changes
client.OnConnectionStateChanged += (sender, e) =>
{
Console.WriteLine($"State: {e.OldState} -> {e.NewState}");
if (e.Message != null)
{
Console.WriteLine($"Message: {e.Message}");
}
};
// States:
// ConnectionState.Connecting - Connecting
// ConnectionState.Connected - Connected
// ConnectionState.Disconnected - Disconnected
Shared Context
Share an existing WebSocket connection with OneBotLib:
var client = new OneBotClient();
// Define send message delegate
async Task SendMessageAsync(string message)
{
var bytes = Encoding.UTF8.GetBytes(message);
await externalWebSocket.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, CancellationToken.None);
}
// Attach to external connection
var sharedContext = client.AttachToExternalConnection(SendMessageAsync);
// Handle incoming messages
async Task OnWebSocketMessageReceived(string message)
{
await client.OnExternalMessageReceivedAsync(message);
}
// Detach when done
client.DetachFromExternalConnection();
Events
Message Events
client.OnMessage += (sender, e) => { };
client.OnPrivateMessage += (sender, e) => { };
client.OnGroupMessage += (sender, e) => { };
Meta Events
client.OnLifecycle += (sender, e) => { };
client.OnHeartbeat += (sender, e) => { };
Notice Events
client.OnGroupMemberChange += (sender, e) => { };
client.OnGroupAdmin += (sender, e) => { };
client.OnGroupBan += (sender, e) => { };
client.OnGroupUpload += (sender, e) => { };
client.OnGroupRecall += (sender, e) => { };
client.OnFriendAdd += (sender, e) => { };
client.OnFriendRecall += (sender, e) => { };
Request Events
client.OnFriendRequest += async (sender, e) =>
{
var result = await client.SetFriendAddRequestAsync(e.Flag, true);
};
client.OnGroupRequest += async (sender, e) =>
{
var result = await client.SetGroupAddRequestAsync(e.Flag, true);
};
Message Segment Builder
// Text
MessageSegment.Text("Hello")
// @Mention
MessageSegment.At(123456789)
MessageSegment.AtAll()
// Image
MessageSegment.Image("https://example.com/image.png")
// Reply
MessageSegment.Reply(messageId)
// Face
MessageSegment.Face(123)
// Voice
MessageSegment.Record("https://example.com/audio.mp3")
// Video
MessageSegment.Video("https://example.com/video.mp4")
// Location
MessageSegment.Location(39.9042, 116.4074, "Beijing", "Capital of China")
// Music
MessageSegment.Music(123456, "qq")
// JSON/XML
MessageSegment.Json("{\"content\": \"...\"}")
MessageSegment.Xml("<xml>...</xml>")
API Result
All API methods return ApiResult or ApiResult<T>:
// With return data
var result = await client.GetLoginInfoAsync();
if (result.Success)
{
Console.WriteLine($"Account: {result.Data.UserId}");
}
else
{
Console.WriteLine($"Error: {result.ErrorMessage}");
Console.WriteLine($"Stack: {result.StackTrace}");
}
// Without return data
var result = await client.SetGroupBanAsync(groupId, userId, 600);
if (result.Success)
{
Console.WriteLine("Success");
}
Namespaces
using OneBotLib; // Main client
using OneBotLib.Events; // Event args
using OneBotLib.Models; // Data models
using OneBotLib.MessageSegment; // Message segment builder
License
MIT License
Links
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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 was computed. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.