82 static UChatChannel* Create(UObject* Outer,
const TSharedRef<FChatApi>,
const TSharedRef<IChatSocket>);
91 void Delete(TFunction<
void()> Callback = {})
const;
99 void PartialUpdate(
const TSharedRef<FJsonObject>& Set = {},
const TArray<FString>& Unset = {}, TFunction<void()> Callback = {});
107 void Update(
const FAdditionalFields& Data,
const TOptional<FMessage>& Message = {}, TFunction<void()> Callback = {});
118 bool bHardDelete =
false,
119 const TOptional<FDateTime>& TruncatedAt = {},
120 const TOptional<FMessage>& Message = {},
121 bool bSkipPush =
false,
122 TFunction<void()> Callback = {});
135 const TArray<FUserSortOption>& Sort = {},
137 TFunction<void(
const TArray<FMember>&)> Callback = {});
145 void AddMembers(
const TArray<FString>& MemberIds,
const TOptional<FMessage>& Message = {}, TFunction<void()> Callback = {});
153 void RemoveMembers(
const TArray<FString>& MemberIds,
const TOptional<FMessage>& Message = {}, TFunction<void()> Callback = {});
161 void Hide(
bool bClearHistory =
false, TFunction<
void()> Callback = {})
const;
167 void Show(TFunction<
void()> Callback = {})
const;
173 void StopWatching(TFunction<
void()> Callback = {})
const;
176 UPROPERTY(BlueprintReadOnly, Category =
"Stream Chat|Channel")
180 UPROPERTY(BlueprintReadOnly, Category = "Stream Chat|Channel")
197 template <
class TEvent>
198 void SendEvent(
const TEvent&);
201 template <
class TEvent>
202 FDelegateHandle On(TEventDelegate<TEvent> Callback);
211 template <
class TEvent,
class UserClass>
212 typename TEnableIf<TIsDerivedFrom<UserClass, UObject>::IsDerived, FDelegateHandle>
::Type On(
214 TEventDelegateUObjectMethodPtr<TEvent, UserClass> Method);
224 template <
class TEvent,
class UserClass>
225 typename TEnableIf<!TIsDerivedFrom<UserClass, UObject>::IsDerived, FDelegateHandle>
::Type On(
227 TEventDelegateSpMethodPtr<TEvent, UserClass> Method);
236 template <
class TEvent,
typename FunctorType,
typename... VarTypes>
237 typename TEnableIf<TIsInvocable<FunctorType,
const TEvent&, VarTypes...>::Value, FDelegateHandle>
::Type On(FunctorType&& Functor, VarTypes... Vars);
245 template <
class TEvent>
246 bool Unsubscribe(FDelegateHandle)
const;
249#pragma endregion Event
251#pragma region Message
263 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Message", DisplayName =
"Send Message", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
264 void SendMessageBP(
const FMessage& Message,
const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
bool& bSuccess);
265 void SendMessage(
const FMessage& Message,
const TFunction<
void(
const bool& bSuccess)> = {});
271 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Message", DisplayName =
"Get Message", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo))
272 void GetMessageBP(
const FString& MessageId,
const UObject* WorldContextObject, FLatentActionInfo LatentInfo,
FMessage& OutMessage);
273 void GetMessage(
const FString& MessageId,
const TFunction<
void(
const FMessage&)> Callback = {});
280 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Message")
281 void UpdateMessage(const
FMessage& Message);
288 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Channel|Message")
289 void DeleteMessage(const
FMessage& Message);
299 void QueryAdditionalMessages(EPaginationDirection Direction = EPaginationDirection::Top, int32 Limit = 20, TFunction<
void()> Callback = {});
305 void MarkRead(
const TOptional<FMessage>& Message = {});
310 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Message", meta = (AutoCreateRefTerm = Message))
311 void MarkRead(
const FMessage& Message);
314 void MarkReadLocal();
327 const TOptional<FMessagePaginationOptions> MessagePagination = {},
328 const TOptional<FUserPaginationOptions> MemberPagination = {},
329 const TOptional<FUserPaginationOptions> WatcherPagination = {},
330 TFunction<void()> Callback = {});
344 const TOptional<FString>&
Query = {},
345 const TOptional<FFilter>& MessageFilter = {},
346 const TArray<FMessageSortOption>& Sort = {},
347 TOptional<uint32> MessageLimit = {},
348 TFunction<void(
const TArray<FMessage>&)> Callback = {})
const;
361 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel", meta = (Latent, WorldContext = WorldContextObject, LatentInfo = LatentInfo, AutoCreateRefTerm =
"Sort,MessageFilter"))
363 const FString&
Query,
367 const UObject* WorldContextObject,
368 FLatentActionInfo LatentInfo,
371 DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMessagesUpdatedDelegate);
373 UPROPERTY(BlueprintAssignable, Category = "Stream Chat|Channel")
374 FMessagesUpdatedDelegate MessagesUpdated;
376 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMessageDelegate, const
FMessage&, Messages);
378 UPROPERTY(BlueprintAssignable, Category = "Stream Chat|Channel")
379 FMessageDelegate MessageSent;
382 UPROPERTY(BlueprintAssignable, Category = "Stream Chat|Channel")
383 FMessageDelegate MessageReceived;
385 DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FUnreadChangedDelegate, int32, UnreadCount);
387 UPROPERTY(BlueprintAssignable, Category = "Stream Chat|Channel")
388 FUnreadChangedDelegate UnreadChanged;
392 void MarkRead(const TOptional<FString>& MessageId);
403 void UpdateUnread(const
FUserRef& User, int32 UnreadCount, const FDateTime& LastRead);
406#pragma endregion Message
408#pragma region Reaction
423 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Reaction")
424 FReaction SendReaction(const
FMessage& Message, const FName& ReactionType, int32 Score = 1,
bool bEnforceUnique = false);
433 void GetReactions(const
FMessage& Message, const
FPaginationOptions& Pagination = {}, TFunction<void(
const TArray<FReaction>&)> Callback = {});
441 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Reaction")
450#pragma endregion Reaction
462 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Typing", meta = (AdvancedDisplay = ParentMessageId))
463 void KeyStroke(
const FString& ParentMessageId = TEXT(
""));
470 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Typing", meta = (AdvancedDisplay = ParentMessageId))
471 void StopTyping(
const FString& ParentMessageId = TEXT(
""));
473 DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FTypingIndicatorDelegate, ETypingIndicatorState, TypingState,
const FUserRef&, User);
475 UPROPERTY(BlueprintAssignable)
476 FTypingIndicatorDelegate OnTypingIndicator;
479 void SendStopTypingEvent(const FString& ParentMessageId = TEXT(""));
483 float TypingTimeout = 2.f;
484 TOptional<FDateTime> LastKeystrokeAt;
485 FTimerHandle TypingTimerHandle;
488#pragma endregion Typing
490#pragma region Moderation
505 UFUNCTION(BlueprintCallable, BlueprintPure =
false, Category =
"Stream Chat|Channel|Moderation", DisplayName =
"Ban Member")
506 void BanMemberBP(const
FUserRef& User, FTimespan Timeout, FString Reason,
bool bIpBan) const;
507 void BanMember(const
FUserRef& User, const TOptional<FTimespan>& Timeout = {},
const TOptional<FString>& Reason = {},
bool bIpBan =
false)
const;
513 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Moderation")
514 void UnbanMember(const
FUserRef& User) const;
523 UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Stream Chat|Channel|Moderation", DisplayName = "Shadow Ban Member")
524 void ShadowBanMemberBP(const
FUserRef& User, FTimespan Timeout) const;
525 void ShadowBanMember(const
FUserRef& User, const TOptional<FTimespan>& Timeout = {})
const;
531 UFUNCTION(BlueprintCallable, BlueprintPure =
false, Category =
"Stream Chat|Channel|Moderation")
532 void ShadowUnbanMember(const
FUserRef& User) const;
538 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Channel|Moderation", DisplayName = "Mute")
539 void MuteBP(FTimespan Timeout);
540 void Mute(const TOptional<FTimespan>& Timeout = {});
545 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Channel|Moderation")
551 UFUNCTION(BlueprintPure, Category = "Stream Chat|Channel|Moderation")
552 bool IsMuted() const;
557 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Channel|Moderation")
558 void EnableSlowMode(FTimespan Cooldown);
563 UFUNCTION(BlueprintCallable, Category = "Stream Chat|Channel|Moderation")
564 void DisableSlowMode();
571#pragma endregion Moderation