83 void ConnectGuestUser(
const FUser& User, TFunction<
void(
const FOwnUser&)> Callback = {});
88 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client")
89 void DisconnectUser();
94 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client")
95 void UpsertUsers(const TArray<
FUser>& Users);
98 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client")
101 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client")
102 void CancelNewChat();
116 TOptional<
FFilter> Filter = {},
117 const TArray<FChannelSortOption>& SortOptions = {},
120 TFunction<void(
const TArray<UChatChannel*>&)> Callback = {});
156 void QueryAdditionalChannels(int32 Limit = 10, TFunction<
void()> Callback = {});
169 const TArray<FUserSortOption>& Sort = {},
170 bool bPresence =
true,
171 const TOptional<FPaginationOptions> PaginationOptions = {},
172 TFunction<void(
const TArray<FUserRef>&)> Callback = {})
const;
187 const FFilter& ChannelFilter = {},
188 const TOptional<FString>&
Query = {},
189 const TOptional<FFilter>& MessageFilter = {},
190 const TArray<FMessageSortOption>& Sort = {},
191 TOptional<uint32> MessageLimit = {},
192 TFunction<void(
const TArray<FMessage>&)> Callback = {})
const;
211 const TOptional<FFilter>& Filter = {},
212 const TArray<FThreadSortOption>& SortOptions = {},
213 TOptional<uint32> Limit = {},
214 TOptional<uint32> ReplyLimit = {},
215 const TOptional<FString>& Next = {},
216 TFunction<void(
const TArray<FChatThread>& Threads,
const FString& NextPage)> Callback = {})
const;
230 TOptional<uint32> ReplyLimit = {},
231 TOptional<uint32> ParticipantLimit = {},
232 TFunction<void(
const FChatThread&)> Callback = {})
const;
237 UFUNCTION(BlueprintCallable, BlueprintPure =
false, Category =
"Stream Chat|Client")
238 void MarkAllRead() const;
240 UFUNCTION(BlueprintPure, Category = "Stream Chat|Client")
243 UFUNCTION(BlueprintPure, Category = "Stream Chat|Client")
244 static FString DevToken(const FString&
UserId);
251 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client")
252 void AddDevice(const FString& DeviceId, EPushProvider PushProvider) const;
258 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client")
259 void RemoveDevice(const FString& DeviceId) const;
265 void ListDevices(TFunction<
void(TArray<
FDevice>)> Callback) const;
267 UPROPERTY(EditAnywhere, Config, Category = "Stream Chat", meta = (DisplayName = "API Key"))
270 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FChannelsUpdatedDelegate, const TArray<
UChatChannel*>&, Channels);
273 UPROPERTY(BlueprintAssignable, Category = "Stream Chat|Channel")
274 FChannelsUpdatedDelegate ChannelsUpdated;
278 virtual
void BeginPlay() override;
280 void ConnectUserInternal(const
FUser& User, TFunction<
void(const
FOwnUser&)> Callback);
288 void AddChannels(const TArray<
UChatChannel*>& InChannels);
290 TSharedPtr<FTokenManager> TokenManager;
296#pragma region Blueprint
308 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
309 void ConnectUser(
const FUser& User,
const FString& Token,
const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
FOwnUser& OutUser);
315 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
316 void ConnectAnonymousUser(
const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
FOwnUser& OutUser);
323 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
324 void ConnectGuestUser(
const FUser& User,
const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
FOwnUser& OutUser);
336 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
340 const UObject* WorldContextObject,
341 FLatentActionInfo LatentInfo,
343 UPARAM(meta = (Bitmask, BitmaskEnum =
EChannelFlags)) const int32 Flags = 3);
352 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo, AdvancedDisplay =
Id))
353 void WatchChannel(const
FChannelProperties& ChannelProperties, const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
UChatChannel*& OutChannel);
356#pragma endregion Blueprint
364 template <
class TEvent>
365 using TEventMulticastDelegate = TMulticastDelegate<void(
const TEvent& Event)>;
366 template <
class TEvent>
367 using TEventDelegate =
typename TEventMulticastDelegate<TEvent>::FDelegate;
368 template <
class TEvent,
class UserClass>
369 using TEventDelegateUObjectMethodPtr =
typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
370 template <
class TEvent,
class UserClass>
371 using TEventDelegateSpMethodPtr =
typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
374 template <
class TEvent>
375 FDelegateHandle On(TEventDelegate<TEvent> Callback);
384 template <
class TEvent,
class UserClass>
385 typename TEnableIf<TIsDerivedFrom<UserClass, UObject>::IsDerived, FDelegateHandle>
::Type On(
387 TEventDelegateUObjectMethodPtr<TEvent, UserClass> Method);
396 template <
class TEvent,
class UserClass>
397 typename TEnableIf<!TIsDerivedFrom<UserClass, UObject>::IsDerived, FDelegateHandle>
::Type On(
399 TEventDelegateSpMethodPtr<TEvent, UserClass> Method);
409 template <
class TEvent,
typename FunctorType,
typename... VarTypes>
410 typename TEnableIf<TIsInvocable<FunctorType,
const TEvent&, VarTypes...>::Value, FDelegateHandle>
::Type On(FunctorType&& Functor, VarTypes... Vars);
412 template <
class TEvent>
413 bool Unsubscribe(FDelegateHandle)
const;
416 TSharedPtr<IChatSocket> Socket;
419#pragma endregion Events
421#pragma region Moderation
436 UFUNCTION(BlueprintCallable, BlueprintPure =
false, Category =
"Stream Chat|Client|Moderation", DisplayName =
"Ban User")
437 void BanUserBP(const
FUserRef& User, FTimespan Timeout, const FString& Reason,
bool bIpBan) const;
438 void BanUser(const
FUserRef& User, const TOptional<FTimespan>& Timeout = {},
const TOptional<FString>& Reason = {},
bool bIpBan =
false)
const;
444 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client|Moderation")
445 void UnbanUser(const
FUserRef& User) const;
454 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Client|Moderation", DisplayName = "Shadow Ban User")
455 void ShadowBanUserBP(const
FUserRef& User, FTimespan Timeout) const;
456 void ShadowBanUser(const
FUserRef& User, const TOptional<FTimespan>& Timeout = {})
const;
462 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client|Moderation")
463 void ShadowUnbanUser(const
FUserRef& User) const;
474 void QueryBannedUsers(
477 const TOptional<FBanPaginationOptions> PaginationOptions = {},
478 const TFunction<void(
const TArray<FBan>&)> Callback = {});
490 UFUNCTION(BlueprintCallable, BlueprintPure =
false, Category =
"Stream Chat|Client|Moderation")
491 void FlagMessage(const
FMessage& Message, const FString& Reason, const TMap<FString, FString>& CustomData) const;
495 void FlagMessage(const
FMessage& Message, const FString& Reason = TEXT("")) const;
502 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Client|Moderation")
503 void UnflagMessage(const
FMessage& Message) const;
512 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Client|Moderation")
513 void FlagUser(const
FUserRef& User, const FString& Reason, const TMap<FString, FString>& CustomData) const;
516 void FlagUser(const
FUserRef& User, const FString& Reason = TEXT("")) const;
523 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Client|Moderation")
524 void UnflagUser(const
FUserRef& User) const;
532 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Client", DisplayName = "Mute User")
533 void MuteUserBP(const
FUserRef& User, FTimespan Timeout) const;
534 void MuteUser(const
FUserRef& User, const TOptional<FTimespan>& Timeout = {})
const;
541 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Client")
542 void UnmuteUser(const
FUserRef& User) const;
552 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client|Moderation")
553 void BlockUser(const
FUserRef& User) const;
560 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Client|Moderation")
561 void UnblockUser(const
FUserRef& User) const;
572 void GetBlockedUsers(TFunction<
void(const TArray<
FUserBlock>&)> Callback = {})
const;
575#pragma endregion Moderation