Stream Chat Unreal SDK
Loading...
Searching...
No Matches
ChatApi.h
1// Copyright 2022 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "ChannelFlags.h"
6#include "CoreMinimal.h"
7#include "Request/Channel/ChannelRequestDto.h"
8#include "Request/Channel/MessagePaginationParamsRequestDto.h"
9#include "Request/Channel/PaginationParamsRequestDto.h"
10#include "Request/Message/MessageRequestDto.h"
11#include "Request/SortParamRequestDto.h"
12#include "RequestBuilder.h"
13#include "StreamJson.h"
14
15class FHttpClient;
16class FRequestBuilder;
17class FTokenManager;
18enum class EPushProvider : uint8;
25struct FFlagResponseDto;
28struct FHttpResponse;
39struct FResponseDto;
41struct FToken;
49
50template <class T>
51using TCallback = TFunction<void(const TResponse<T>&)>;
52
58class STREAMCHATAPI_API FChatApi : public TSharedFromThis<FChatApi>
59{
60public:
61 static TSharedRef<FChatApi> Create(const FString& InApiKey, const FString& InHost, const TSharedPtr<FTokenManager>&);
62
63#pragma region Moderation
82 void BanUser(
83 const FString& TargetUserId,
84 const FString& Type = {},
85 const FString& Id = {},
86 const TOptional<FTimespan>& Timeout = {},
87 const TOptional<FString>& Reason = {},
88 bool bShadow = false,
89 bool bIpBan = false,
90 TCallback<FResponseDto> Callback = {}) const;
91
99 void UnbanUser(const FString& TargetUserId, const FString& Type = {}, const FString& Id = {}, TCallback<FResponseDto> Callback = {}) const;
100
115 void QueryBannedUsers(
116 const TSharedRef<FJsonObject>& Filter,
117 const TArray<FSortParamRequestDto>& SortOptions = {},
118 const TOptional<FDateTime> CreatedAtAfterOrEqual = {},
119 const TOptional<FDateTime> CreatedAtAfter = {},
120 const TOptional<FDateTime> CreatedAtBeforeOrEqual = {},
121 const TOptional<FDateTime> CreatedAtBefore = {},
122 TOptional<uint32> Limit = {},
123 TOptional<uint32> Offset = {},
124 TCallback<FQueryBannedUsersResponseDto> Callback = {}) const;
125
132 void Flag(const FString& TargetMessageId = {}, const FString& TargetUserId = {}, TCallback<FFlagResponseDto> Callback = {}) const;
133
140 void MuteUsers(const TArray<FString>& TargetUserIds, TOptional<FTimespan> Timeout = {}, TCallback<FMuteUserResponseDto> Callback = {}) const;
141
147 void UnmuteUsers(const TArray<FString>& TargetUserIds, TCallback<FResponseDto> Callback = {}) const;
148
155 void MuteChannels(const TArray<FString>& TargetCids, TOptional<FTimespan> Timeout = {}, TCallback<FMuteChannelResponseDto> Callback = {}) const;
156
162 void UnmuteChannels(const TArray<FString>& TargetCids, TCallback<FResponseDto> Callback = {}) const;
163
165#pragma endregion Moderation
166
167#pragma region Channels
186 void QueryChannel(
187 const FString& ChannelType,
188 const FString& ConnectionId,
189 EChannelFlags Flags = EChannelFlags::State,
190 const FChannelRequestDto& Data = {},
191 const TOptional<FString>& ChannelId = {},
192 const TOptional<FMessagePaginationParamsRequestDto> MessagePagination = {},
193 const TOptional<FPaginationParamsRequestDto> MemberPagination = {},
194 const TOptional<FPaginationParamsRequestDto> WatcherPagination = {},
195 TCallback<FChannelStateResponseDto> Callback = {}) const;
196
203 void DeleteChannel(const FString& ChannelType, const FString& ChannelId, TCallback<FDeleteChannelResponseDto> Callback = {}) const;
204
213 void PartialUpdateChannel(
214 const FString& ChannelType,
215 const FString& ChannelId,
216 const TSharedRef<FJsonObject>& Set,
217 const TArray<FString>& Unset,
218 TCallback<FUpdateChannelPartialResponseDto> Callback = {}) const;
219
227 void UpdateChannel(
228 const FString& ChannelType,
229 const FString& ChannelId,
230 const FUpdateChannelRequestDto& Data,
231 TCallback<FUpdateChannelResponseDto> Callback = {}) const;
232
241 void HideChannel(const FString& ChannelType, const FString& ChannelId, bool bClearHistory = false, TCallback<FResponseDto> Callback = {}) const;
242
249 void ShowChannel(const FString& ChannelType, const FString& ChannelId, TCallback<FResponseDto> Callback = {}) const;
250
266 void QueryChannels(
267 const FString& ConnectionId,
268 EChannelFlags Flags = EChannelFlags::State | EChannelFlags::Watch,
269 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
270 const TArray<FSortParamRequestDto>& SortOptions = {},
271 TOptional<uint32> MemberLimit = {},
272 TOptional<uint32> MessageLimit = {},
273 TOptional<uint32> Limit = {},
274 TOptional<uint32> Offset = {},
275 TCallback<FChannelsResponseDto> Callback = {}) const;
276
284 void StopWatchingChannel(const FString& ChannelType, const FString& ChannelId, const FString& ConnectionId, TCallback<FResponseDto> Callback = {}) const;
285
301 void SearchMessages(
302 const TSharedRef<FJsonObject>& ChannelFilter,
303 const TOptional<FString>& Query = {},
304 const TOptional<TSharedRef<FJsonObject>>& MessageFilter = {},
305 const TArray<FSortParamRequestDto>& Sort = {},
306 TOptional<uint32> MessageLimit = {},
307 TOptional<uint32> Offset = {},
308 TOptional<FString> Next = {},
309 TCallback<FSearchResponseDto> Callback = {}) const;
310
315 void MarkChannelsRead(TCallback<FMarkReadResponseDto> Callback = {}) const;
316
324 void MarkChannelRead(
325 const FString& ChannelType,
326 const FString& ChannelId,
327 const TOptional<FString>& MessageId = {},
328 TCallback<FMarkReadResponseDto> Callback = {}) const;
329
342 void QueryMembers(
343 const FString& ChannelType,
344 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
345 const TOptional<FString>& ChannelId = {},
346 const TOptional<TArray<FString>>& Members = {},
347 const TArray<FSortParamRequestDto>& SortOptions = {},
348 const FMessagePaginationParamsRequestDto& Pagination = {},
349 TCallback<FMembersResponseDto> Callback = {}) const;
350
361 void TruncateChannel(
362 const FString& ChannelType,
363 const FString& ChannelId,
364 bool bHardDelete = false,
365 const TOptional<FDateTime>& TruncatedAt = {},
366 const TOptional<FMessageRequestDto>& Message = {},
367 bool bSkipPush = false,
368 TCallback<FTruncateChannelResponseDto> Callback = {}) const;
369
371#pragma endregion Channels
372
373#pragma region Messages
384 void GetMessage(const FString& MessageId, TCallback<FMessageResponseDto> Callback = {}) const;
385
394 void SendNewMessage(
395 const FString& ChannelType,
396 const FString& ChannelId,
397 const FMessageRequestDto& MessageRequest,
398 bool bSkipPush = false,
399 TCallback<FMessageResponseDto> Callback = {}) const;
400
406 void UpdateMessage(const FMessageRequestDto& MessageRequest, TCallback<FMessageResponseDto> Callback = {}) const;
407
414 void DeleteMessage(const FString& Id, bool bHard = false, TCallback<FMessageResponseDto> Callback = {}) const;
415
426 void SendReaction(
427 const FString& MessageId,
428 const FName& Type,
429 bool bEnforceUnique = true,
430 TOptional<uint32> Score = {},
431 bool bSkipPush = false,
432 TCallback<FReactionResponseDto> Callback = {}) const;
433
440 void DeleteReaction(const FString& MessageId, const FName& Type, TCallback<FReactionResponseDto> Callback = {}) const;
441
449 void GetReactions(const FString& MessageId, TOptional<uint32> Limit, TOptional<uint32> Offset, TCallback<FGetReactionsResponseDto> Callback = {}) const;
450
452#pragma endregion Messages
453
454#pragma region Events
467 template <class TEvent>
468 void SendChannelEvent(const FString& ChannelType, const FString& ChannelId, const TEvent&, TCallback<FEventResponseDto> Callback = {});
469
471#pragma endregion Events
472
473#pragma region Files
480#pragma endregion Files
481
482#pragma region Users
499 void QueryUsers(
500 const FString& ConnectionId,
501 bool bPresence = true,
502 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
503 const TArray<FSortParamRequestDto>& SortOptions = {},
504 TOptional<uint32> Limit = {},
505 TOptional<uint32> Offset = {},
506 TCallback<FUsersResponseDto> Callback = {}) const;
507
508 void CreateGuest(const FUserObjectRequestDto& User, TCallback<FGuestResponseDto> Callback = {}) const;
509
510 struct FPartialUpdateUser
511 {
512 const FString& UserId;
513 const TSharedRef<FJsonObject>& Set;
514 const TArray<FString>& Unset;
515 };
516
522 void PartialUpdateUsers(const TArray<FPartialUpdateUser>& Users, TCallback<FUpdateUsersResponseDto> Callback = {}) const;
523
529 void UpsertUsers(const TMap<FString, FUserObjectRequestDto>& Users, TCallback<FUpdateUsersResponseDto> Callback = {}) const;
530
532#pragma endregion Users
533
534#pragma region Devices
546 void AddDevice(const FString& DeviceId, EPushProvider PushProvider, TCallback<FResponseDto> Callback = {}) const;
547
553 void RemoveDevice(const FString& DeviceId, TCallback<FResponseDto> Callback = {}) const;
554
559 void ListDevices(TCallback<FListDevicesResponseDto> Callback = {}) const;
560
562#pragma endregion Devices
563
564private:
565 explicit FChatApi(const FString& InApiKey, const FString& InHost, const TSharedPtr<FTokenManager>&);
566 void SendChannelEventInternal(
567 const FString& ChannelType,
568 const FString& ChannelId,
569 const TSharedRef<FJsonObject>& Event,
570 TCallback<FEventResponseDto> Callback = {}) const;
571
572 FString BuildUrl(const FString& Path) const;
573
574 void AddAuth(FRequestBuilder&, const FToken& Token) const;
575 void OnRequest(FRequestBuilder&) const;
576 void OnError(const FHttpResponse&, FRequestBuilder&) const;
577
578 TSharedPtr<FTokenManager> TokenManager;
579 FString ApiKey;
580
581 TSharedPtr<FHttpClient> Client;
582 FString Scheme;
583 FString Host;
584};
585
586template <class TEvent>
587void FChatApi::SendChannelEvent(const FString& ChannelType, const FString& ChannelId, const TEvent& Event, const TCallback<FEventResponseDto> Callback)
588{
589 static_assert(
590 TIsSame<decltype(TEvent::StaticType()), decltype(TEvent::StaticType())>::Value,
591 "TEvent must have a static method 'StaticType' which returns a FName to use with SendChannelEvent.");
592 SendChannelEventInternal(ChannelType, ChannelId, JsonObject::UStructToJsonObject<TEvent>(Event), Callback);
593}
All Stream Chat REST API requests can be made via this object.
Definition: ChatApi.h:59
void SendChannelEvent(const FString &ChannelType, const FString &ChannelId, const TEvent &, TCallback< FEventResponseDto > Callback={})
Send a custom or built-in event on this channel.
Definition: ChatApi.h:587
EChannelFlags
Additional channel actions to perform when requesting channel data from API.
Definition: ChannelFlags.h:15
@ UserId
The user ID of the user that sent the message.
@ Id
Message ID.
@ Type
Type of the message.
@ Query
Matches values by performing text search with the specified value.
#/components/schemas/ChannelRequest
Definition: ChannelRequestDto.h:16
#/components/schemas/ChannelResponse Represents channel in chat
Definition: ChannelResponseDto.h:20
The desired sort options for Channel API queries.
Definition: ChannelSortOption.h:44
#/components/schemas/ChannelStateResponse
Definition: ChannelStateResponseDto.h:16
#/components/schemas/ChannelsResponse
Definition: ChannelsResponseDto.h:17
#/components/schemas/DeleteChannelResponse
Definition: DeleteChannelResponseDto.h:17
#/components/schemas/EventResponse
Definition: EventResponseDto.h:17
#/components/schemas/FlagResponse
Definition: FlagResponseDto.h:17
#/components/schemas/GetReactionsResponse
Definition: GetReactionsResponseDto.h:17
#/components/schemas/GuestResponse
Definition: GuestResponseDto.h:17
#/components/schemas/Response
Definition: ListDevicesResponseDto.h:17
#/components/schemas/MarkReadRequest
Definition: MarkReadRequestDto.h:18
#/components/schemas/MarkReadResponse
Definition: MarkReadResponseDto.h:17
#/components/schemas/MembersResponse
Definition: MembersResponseDto.h:17
#/components/schemas/MessagePaginationParamsRequest
Definition: MessagePaginationParamsRequestDto.h:17
#/components/schemas/MessageRequest
Definition: MessageRequestDto.h:17
#/components/schemas/MessageResponse
Definition: MessageResponseDto.h:17
#/components/schemas/MuteChannelResponse
Definition: MuteChannelResponseDto.h:18
#/components/schemas/MuteUserResponse
Definition: MuteUserResponseDto.h:18
#/components/schemas/QueryBannedUsersResponse
Definition: QueryBannedUsersResponseDto.h:17
#/components/schemas/ReactionRequest Represents user reaction to a message
Definition: ReactionRequestDto.h:16
#/components/schemas/ReactionResponse
Definition: ReactionResponseDto.h:18
#/components/schemas/Response
Definition: ResponseDto.h:15
#/components/schemas/SearchResponse
Definition: SearchResponseDto.h:18
#/components/schemas/TruncateChannelResponse
Definition: TruncateChannelResponseDto.h:18
#/components/schemas/UpdateChannelPartialResponse
Definition: UpdateChannelPartialResponseDto.h:17
#/components/schemas/UpdateChannelRequest
Definition: UpdateChannelRequestDto.h:19
#/components/schemas/UpdateChannelResponse
Definition: UpdateChannelResponseDto.h:18
#/components/schemas/UpdateUsersResponse
Definition: UpdateUsersResponseDto.h:17
#/components/schemas/UserObjectRequest
Definition: UserObjectRequestDto.h:16
#/components/schemas/UsersResponse
Definition: UsersResponseDto.h:17