# チャット履歴のクエリオプション

> Query chat history with various filtering options.

ChatHistoryQueryOptions は、どのようなメッセージを返すかを指定するために [`VivoxService.Instance.GetDirectTextMessageHistoryAsync`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.IVivoxService.html#Unity_Services_Vivox_IVivoxService_GetDirectTextMessageHistoryAsync_System_String_System_Int32_Unity_Services_Vivox_ChatHistoryQueryOptions_) または [`VivoxService.Instance.GetChannelTextMessageHistoryAsync`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.IVivoxService.html#Unity_Services_Vivox_IVivoxService_GetChannelTextMessageHistoryAsync_System_String_System_Int32_Unity_Services_Vivox_ChatHistoryQueryOptions_) の呼び出しに含めることができる、任意のオプションのモデルです。

## SearchText##searchtext

`ChatHistoryQueryOptions` の SearchText フィールドを使用すると、チャット履歴のクエリで返されるすべてのメッセージに含まれている必要がある文字列を指定できます。例えば、以下のコードでは、返される historyMessages にテキスト "Hello, lobby!" を含むメッセージのみが含まれるようにします。

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

## TimeStart - TimeEnd##timestart---timeend

`ChatHistoryQueryOptions` の TimeStart フィールドと TimeEnd フィールドはいずれも `DateTimes` であり、メッセージが送信された時刻 (その時刻より後、前) を指定します。例えば、以下のコードは、リクエストが行われる 24 時間前から 12 時間前までの間の、最新 10 件のメッセージを返します。

```cs
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);
```

テキストエビデンス管理を有効にしない場合、チャット履歴は 7 日間しか保存されないことに注意してください。

## PlayerId##playerid

`ChannelTextMessageHistory` のリクエストでは、ChatHistoryQueryOptions の PlayerId フィールドで、返されるすべてのメッセージの送信者の PlayerId を指定します。例えば、以下のコードは、指定したチャンネル内の特定の参加者から送信された最新 10 件のメッセージを返します。

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

## ブロックされた参加者に対するチャンネルベースのチャット履歴##channel-based-chat-history-for-blocked-participants

`history_session` クエリの応答の形式を設定する際に、ブロックされたユーザーからのメッセージをフィルターできます。

チャンネルからチャット履歴を取得するときに、SDK により、ブロックされたユーザーからのメッセージが除外されます。ユーザー A がアプリケーションでユーザー B をブロックしている場合、ユーザー A にはユーザー B が送信したメッセージは表示されません。

### ブロックされた参加者がいる場合の履歴セッション##history-sessions-when-blocked-participants-are-involved

リクエストに含まれるすべてのメッセージがブロックされた参加者からのものである場合、履歴リクエストは空で返される可能性があります。この場合、応答には、後続のページにチャンネルのメッセージがさらにあることを示すカーソルが含まれます。1 回の履歴リクエストで返されるメッセージのデフォルトの数は、1 ページあたり 10 件です。次ページのメッセージを取得するには、その後のリクエストでカーソル値を使用します。

チャンネルにブロックされたユーザーがいる場合、最大ページサイズの引数 (Max) には、リクエストされた数よりも少ないメッセージが表示されます。チャット履歴で特定のページサイズをリクエストする際は、チャンネルにブロックされたユーザーがいる場合に、選択した数よりも少ないメッセージが `history_session` で表示される可能性があることに注意してください。この機能は、プライバシーを確保し、不要なインタラクションを防ぐために重要です。

最後に読まれたメッセージでは、未読メッセージの数が表示されます。Vivox は読まれたメッセージを追跡し、未読メッセージの数を表示します。ただし、この数には応答から意図的にフィルターされた、ブロックされたメッセージが含まれることに注意してください。チャンネルにブロックされたユーザーがいる場合、未読メッセージの数が不正確になる可能性があります。

### ブロックされた参加者に対するアカウントのチャット履歴##account-chat-history-for-blocked-participants

アカウントのチャット履歴のリクエストを送信すると、クエリではそのユーザーが送信したメッセージのみが表示されます。
