聊天记录查询选项

ChatHistoryQueryOptions 是一个可选的选项模型,可以包含在 VivoxService.Instance.GetDirectTextMessageHistoryAsyncVivoxService.Instance.GetChannelTextMessageHistoryAsync 调用中,以指定应返回哪些消息。

搜索文本

ChatHistoryQueryOptions 的 SearchText 字段可用于指定应出现在聊天历史记录查询返回的每条消息中的文本字符串。例如,以下代码将确保返回的 historyMessages 仅包含包含文本“Hello, lobby!”的消息。

var options = new ChatHistoryQueryOptions();
options.SearchText = "Hello, lobby!";
var historyMessages =
    await VivoxService.Instance.GetChannelTextMessageHistoryAsync(LobbyChannelName, 10, options);

TimeStart - TimeEnd

ChatHistoryQueryOptions 的 TimeStart 和 TimeEnd 字段都是 DateTimes,分别用于描述应发送消息的早于和晚于时间。例如,以下代码将返回从请求发出前 24 小时到请求发出前 12 小时之间的最后 10 条消息。

var options = new ChatHistoryQueryOptions();
options.TimeStart = DateTime.Now().AddDays(-1);
options.TimeEnd = DateTime.Now().AddDays(-0.5);
var historyMessages =
    await VivoxService.Instance.GetChannelTextMessageHistoryAsync(LobbyChannelName, 10, options);

请注意,聊天记录仅存储七天,除非你已启用文本证据管理。

玩家 ID

对于 ChannelTextMessageHistory 请求,ChatHistoryQueryOptions 的 PlayerId 字段用于描述将作为所有返回消息发送者的 PlayerId。例如,以下代码将返回指定频道中特定参与者的最后 10 条消息。

IReadOnlyCollection<VivoxMessage> GetMessagesFromPlayerAsync(VivoxParticipant participant)
{
    var options = new ChatHistoryQueryOptions();
    options.PlayerId = participant.PlayerId;
    var historyMessages =
        await VivoxService.Instance.GetChannelTextMessageHistoryAsync(LobbyChannelName, 10, options);
    return historyMessages;
}

针对已封锁参与者的基于频道的聊天记录

在格式化 history_session 查询响应时,可以筛选来自已封锁用户的消息。

从频道检索聊天记录时,SDK 会省略来自已封锁用户的消息。如果用户 A 在应用程序中封锁了用户 B,则用户 A 不会看到用户 B 发送的消息。

涉及已封锁参与者的历史会话

如果请求中的所有消息都来自已封锁的参与者,则历史记录请求可能会返回为空。在这种情况下,响应包含一个游标,指示在后续页面上频道中还有更多消息。每个历史记录请求返回的消息默认数量为每页 10 条。在后续请求中使用游标值来检索下一页消息。

如果频道中存在已封锁用户,则最大页面大小参数(Max)显示的消息数量将少于请求的数量。当你为聊天记录请求特定页面大小时,请注意,如果频道中存在已封锁用户,则 history_session 可能显示的消息数量将少于你选择的数量。此功能对于确保隐私和防止不必要的互动至关重要。

最后阅读显示未读消息数量。Vivox 会跟踪你的已读消息,并提供未读消息数量。但是,请注意,此数量包括已封锁的消息,这些消息被故意从你的响应中过滤掉。如果频道中存在已封锁用户,则未读消息数量可能不准确。

针对已封锁参与者的帐户聊天记录

当你提交帐户的聊天记录请求时,查询仅显示用户的已发送消息。