Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions HuaJiBot.NET.slnx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<Solution>
<Project Path="src/HuaJiBot.NET.AI/HuaJiBot.NET.AI.csproj" />
<Project Path="src/HuaJiBot.NET.Adapter.Kook/HuaJiBot.NET.Adapter.Kook.csproj" />
<Project Path="src/HuaJiBot.NET.Adapter.OneBot/HuaJiBot.NET.Adapter.OneBot.csproj" />
<Project Path="src/HuaJiBot.NET.Adapter.Satori/HuaJiBot.NET.Adapter.Satori.csproj" />
<Project Path="src/HuaJiBot.NET.Adapter.Telegram/HuaJiBot.NET.Adapter.Telegram.csproj" />
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@ you guess it. (> ω <)
│ └── ... (Other core files)
├── 🗂️ HuaJiBot.NET.Adapter.* (Adapters for connecting to IM platforms)
│ ├── OneBot (Adapter for the OneBot protocol)
│ └── Satori (Adapter for the Satori protocol)
│ └── ... (Other potential adapters)
│ ├── Satori (Adapter for the Satori protocol)
│ ├── Kook (Adapter for KOOK using Kook.Net)
│ └── ... (Other potential adapters)
├── 🗂️ HuaJiBot.NET.Plugin.* (Plugins for specific functionalities)
│ ├── Calendar (Plugin for pushing calendar events)
│ ├── GitHubBridge (Plugin for pushing GitHub events)
Expand Down
53 changes: 53 additions & 0 deletions src/HuaJiBot.NET.Adapter.Kook/Channels/KookChannelId.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System.Diagnostics.CodeAnalysis;

namespace HuaJiBot.NET.Adapter.Kook.Channels;

/// <summary>
/// 结构化的 KOOK 频道标识:由构造保证"私聊 / 群聊"在类型上显式可辨,
/// 取代散落各处的 ulong / Guid 解析推断。
/// </summary>
internal readonly record struct KookChannelId
{
private KookChannelId(KookChannelKind kind, ulong guildChannelId)
{
Kind = kind;
GuildChannelId = guildChannelId;
}

private KookChannelId(KookChannelKind kind, Guid directChatCode)
{
Kind = kind;
DirectChatCode = directChatCode;
}

public KookChannelKind Kind { get; }

public ulong GuildChannelId { get; }

public Guid DirectChatCode { get; }

public static KookChannelId Guild(ulong channelId) =>
new(KookChannelKind.Guild, channelId);

public static KookChannelId Direct(Guid chatCode) =>
new(KookChannelKind.Direct, chatCode);

/// <summary>
/// 服务器文字频道 ID 为十进制 ulong,私聊 chatCode 为 Guid。
/// </summary>
public static bool TryParse([NotNullWhen(true)] string? raw, out KookChannelId id)
{
if (ulong.TryParse(raw, out var channelId))
{
id = Guild(channelId);
return true;
}
if (Guid.TryParse(raw, out var chatCode))
{
id = Direct(chatCode);
return true;
}
id = default;
return false;
}
}
14 changes: 14 additions & 0 deletions src/HuaJiBot.NET.Adapter.Kook/Channels/KookChannelKind.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace HuaJiBot.NET.Adapter.Kook.Channels;

internal enum KookChannelKind
{
/// <summary>
/// 服务器文字频道,标识为 ulong。
/// </summary>
Guild,

/// <summary>
/// 私聊频道,标识为 Guid(chatCode)。
/// </summary>
Direct,
}
14 changes: 14 additions & 0 deletions src/HuaJiBot.NET.Adapter.Kook/HuaJiBot.NET.Adapter.Kook.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Kook.Net.WebSocket" Version="0.11.1" />
<ProjectReference Include="..\HuaJiBot.NET\HuaJiBot.NET.csproj" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="HuaJiBot.NET.UnitTest" />
</ItemGroup>
</Project>
Loading