Table of Contents

用户私聊消息接口

预声明变量

readonly KookSocketClient _socketClient = null;
readonly KookRestClient _restClient = null;

SocketDMChannel socketDmChannel = null;

RestDMChannel restDmChannel = null;

IDMChannel dmChannel = null;
IUserMessage userMessage = null;

获取私信聊天消息列表

GET /api/v3/direct-message/list

IMessage referenceMessage = null; // 获取消息列表所根据的参考消息位置的
Guid referenceMessageId = default; // 获取消息列表所根据的参考消息位置的 ID
Direction direction = default; // 获取消息列表的方向
int limit = default; // 获取消息列表的数量

// 要缓存文字频道聊天消息,请设置 MessageCacheSize 的值
// 缓存获取文字频道的聊天消息列表
IReadOnlyCollection<SocketMessage> cachedMessages = socketDmChannel.CachedMessages;
IReadOnlyCollection<SocketMessage> conditionalCachedMessages = socketDmChannel.GetCachedMessages(referenceMessage, direction, limit);
IReadOnlyCollection<SocketMessage> conditionalCachedMessagesById = socketDmChannel.GetCachedMessages(referenceMessageId, direction, limit);

// API 请求
IAsyncEnumerable<IReadOnlyCollection<IMessage>> pagedMessages = socketDmChannel.GetMessagesAsync(referenceMessage, direction, limit);
IAsyncEnumerable<IReadOnlyCollection<IMessage>> pagedMessagesById = socketDmChannel.GetMessagesAsync(referenceMessageId, direction, limit);
IAsyncEnumerable<IReadOnlyCollection<RestMessage>> pagedRestMessages = restDmChannel.GetMessagesAsync(referenceMessage, direction, limit);
IAsyncEnumerable<IReadOnlyCollection<RestMessage>> pagedRestMessagesById = restDmChannel.GetMessagesAsync(referenceMessageId, direction, limit);

// 在 ITextChannel 上进行调用
IAsyncEnumerable<IReadOnlyCollection<IMessage>> pagedMessages = dmChannel.GetMessagesAsync(referenceMessage, direction, limit);
IAsyncEnumerable<IReadOnlyCollection<IMessage>> pagedMessagesById = dmChannel.GetMessagesAsync(referenceMessageId, direction, limit);

获取私信聊天会话详情

POST /api/v3/user-chat/view

// 要缓存文字频道聊天消息,请设置 MessageCacheSize 的值
// 缓存获取文字频道的聊天消息详情
SocketMessage cachedMessage = socketDmChannel.GetCachedMessage(messageId);

// 调用异步方法获取消息详情,在缓存中包含指定的消息对象的情况下,直接返回缓存的消息对象,否则会发起 API 请求获取消息对象
IMessage messageAsync = await socketDmChannel.GetMessageAsync(messageId);

// API 请求
IMessage message = await restDmChannel.GetMessageAsync(messageId);

// 在 IDMChannel 上进行调用
IMessage message = await dmChannel.GetMessageAsync(messageId);

发送私信聊天消息

POST /api/v3/direct-message/create

string text = null; // 要发送的文字消息
IQuote quote = null; // 被引用的消息
string filePath = null; // 要发送的文件的路径
string fileName = null; // 要发送的文件的名称
AttachmentType fileType = default; // 要发送的文件的类型
Stream stream = null; // 要发送的文件的流
FileAttachment attachment = default; // 要发送的文件的附件
ICard card = null; // 要发送的卡片
IEnumerable<ICard> cards = null; // 要发送的卡片列表
int templateId = default; // 要发送的模板消息的模板 ID
T parameters = default; // 要发送的模板消息的参数
JsonSerializerOptions jsonSerializerOptions = null; // 要发送的模板消息的参数的序列化选项

// API 请求,发送文本消息
Cacheable<IUserMessage, Guid> textMessage = await dmChannel.SendTextAsync(text, quote);
Cacheable<IUserMessage, Guid> textMessageFromTemplate = await dmChannel.SendTextAsync(templateId, parameters, quote, jsonSerializerOptions);
// API 请求,发送文件消息
Cacheable<IUserMessage, Guid> fileMessageFromPath = await dmChannel.SendFileAsync(filePath, fileName, fileType, quote);
Cacheable<IUserMessage, Guid> fileMessageFromStream = await dmChannel.SendFileAsync(stream, fileName, fileType, quote);
Cacheable<IUserMessage, Guid> fileMessageFromAttachment = await dmChannel.SendFileAsync(attachment, quote);
// API 请求,发送单卡片消息
Cacheable<IUserMessage, Guid> cardMessage = await dmChannel.SendCardAsync(card, quote);
// API 请求,发送多卡片消息
Cacheable<IUserMessage, Guid> cardsMessage = await dmChannel.SendCardsAsync(cards, quote);
Cacheable<IUserMessage, Guid> cardsMessageFromTemplate = await dmChannel.SendCardsAsync(templateId, parameters, quote, jsonSerializerOptions);

更新私信聊天消息

POST /api/v3/direct-message/update

string content = null; // 要更新的消息的文本
IEnumerable<ICard> cards = null; // 要更新的消息的卡片
IQuote quote = null; // 要更新的消息的引用
int templateId = default; // 要发送的模板消息的模板 ID
T parameters = default; // 要发送的模板消息的参数
JsonSerializerOptions jsonSerializerOptions = null; // 要发送的模板消息的参数的序列化选项

// API 请求
// 在更新模板消息时,指定泛型参数 T 可以提高序列化性能,省略泛型参数 T 时,序列化器将以序列化 object 的方式进行序列化
await userMessage.ModifyAsync(x =>
{
    x.Content = content;
    x.Cards = cards;
    x.Quote = quote; // 要清除引用,请设置为 Quote.Empty
    x.TemplateId = templateId;
    x.Parameters = parameters;
    x.JsonSerializerOptions = jsonSerializerOptions;
});

删除私信聊天消息

POST /api/v3/direct-message/delete

// API 请求
await userMessage.DeleteAsync();

获取频道消息某回应的用户列表

GET /api/v3/direct-message/reaction-list

IEmote emoji = null; // 要获取用户列表的回应的表情

// 缓存获取消息的回应概要,但不包含用户列表
IReadOnlyDictionary<IEmote,ReactionMetadata> cachedReactions = socketUserMessage.Reactions;

// API 请求
IReadOnlyCollection<IUser> reactionUsers = await userMessage.GetReactionUsersAsync(emoji);

给某个消息添加回应

POST /api/v3/direct-message/add-reaction

有关如何构造 Emoji,请参考 表情符号

IEmote emoji = null; // 要添加的回应的表情
IEnumerable<IEmote> emojis = null; // 要添加的回应的表情列表

// API 请求
await userMessage.AddReactionAsync(emoji);
await userMessage.AddReactionsAsync(emojis);

删除消息的某个回应

POST /api/v3/direct-message/delete-reaction

IEmote emoji = null;
IEnumerable<IEmote> emojis = null;
IUser user = null;

// API 请求
await userMessage.RemoveReactionAsync(emoji, user);
await userMessage.RemoveReactionsAsync(user, emojis);