From 7500fe64195d750a8ac7e0e07b7c4839f2900ff6 Mon Sep 17 00:00:00 2001 From: Sidd Date: Sun, 23 Jan 2022 23:34:12 -0600 Subject: [PATCH] feat: add unofficial chatrooms user pubsub topic (#515) --- .../github/twitch4j/pubsub/ITwitchPubSub.java | 1 - .../github/twitch4j/pubsub/TwitchPubSub.java | 17 +++++++++++++ .../domain/AliasRestrictionUpdateData.java | 23 +++++++++++++++++ .../domain/UserModerationActionData.java | 25 +++++++++++++++++++ .../pubsub/domain/VideoPlaybackData.java | 5 ++++ .../events/AliasRestrictionUpdateEvent.java | 13 ++++++++++ .../events/UserModerationActionEvent.java | 13 ++++++++++ 7 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 pubsub/src/main/java/com/github/twitch4j/pubsub/domain/AliasRestrictionUpdateData.java create mode 100644 pubsub/src/main/java/com/github/twitch4j/pubsub/domain/UserModerationActionData.java create mode 100644 pubsub/src/main/java/com/github/twitch4j/pubsub/events/AliasRestrictionUpdateEvent.java create mode 100644 pubsub/src/main/java/com/github/twitch4j/pubsub/events/UserModerationActionEvent.java diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/ITwitchPubSub.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/ITwitchPubSub.java index 3d100efa0..62bc83583 100644 --- a/pubsub/src/main/java/com/github/twitch4j/pubsub/ITwitchPubSub.java +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/ITwitchPubSub.java @@ -406,7 +406,6 @@ default PubSubSubscription listenForChannelChatroomEvents(OAuth2Credential crede } @Unofficial - @Deprecated default PubSubSubscription listenForUserChatroomEvents(OAuth2Credential credential, String userId) { return listenOnTopic(PubSubType.LISTEN, credential, "chatrooms-user-v1." + userId); } diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/TwitchPubSub.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/TwitchPubSub.java index 5892da37f..6fe4238c1 100644 --- a/pubsub/src/main/java/com/github/twitch4j/pubsub/TwitchPubSub.java +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/TwitchPubSub.java @@ -535,6 +535,23 @@ public void onTextMessage(WebSocket ws, String text) { eventManager.publish(new ChatModerationEvent(lastTopicIdentifier, action)); break; + default: + log.warn("Unparsable Message: " + message.getType() + "|" + message.getData()); + break; + } + } else if ("chatrooms-user-v1".equals(topicName) && topicParts.length > 1) { + final String userId = topicParts[1]; + switch (type) { + case "channel_banned_alias_restriction_update": + final AliasRestrictionUpdateData aliasData = TypeConvert.convertValue(msgData, AliasRestrictionUpdateData.class); + eventManager.publish(new AliasRestrictionUpdateEvent(userId, aliasData)); + break; + + case "user_moderation_action": + final UserModerationActionData actionData = TypeConvert.convertValue(msgData, UserModerationActionData.class); + eventManager.publish(new UserModerationActionEvent(userId, actionData)); + break; + default: log.warn("Unparsable Message: " + message.getType() + "|" + message.getData()); break; diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/AliasRestrictionUpdateData.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/AliasRestrictionUpdateData.java new file mode 100644 index 000000000..8c75b84fd --- /dev/null +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/AliasRestrictionUpdateData.java @@ -0,0 +1,23 @@ +package com.github.twitch4j.pubsub.domain; + +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.twitch4j.common.annotation.Unofficial; +import lombok.AccessLevel; +import lombok.Data; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Data +@Setter(AccessLevel.PRIVATE) +@Unofficial +public class AliasRestrictionUpdateData { + + @Accessors(fluent = true) + @JsonProperty("user_is_restricted") + private Boolean isRestricted; + + @JsonAlias("ChannelID") + private String channelId; + +} diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/UserModerationActionData.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/UserModerationActionData.java new file mode 100644 index 000000000..20dd63c8d --- /dev/null +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/UserModerationActionData.java @@ -0,0 +1,25 @@ +package com.github.twitch4j.pubsub.domain; + +import com.github.twitch4j.common.annotation.Unofficial; +import lombok.AccessLevel; +import lombok.Data; +import lombok.Setter; + +@Data +@Setter(AccessLevel.PRIVATE) +@Unofficial +public class UserModerationActionData { + + private String action; + private String targetId; + private String channelId; + + public boolean isBan() { + return "ban".equals(action); + } + + public boolean isUnban() { + return "unban".equals(action); + } + +} diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/VideoPlaybackData.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/VideoPlaybackData.java index 34e1277e5..2f72cb911 100644 --- a/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/VideoPlaybackData.java +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/domain/VideoPlaybackData.java @@ -31,6 +31,11 @@ public class VideoPlaybackData { */ private Integer length; + /** + * Sent when {@link #getType()} is {@link Type#COMMERCIAL}. + */ + private Boolean scheduled; + @RequiredArgsConstructor public enum Type { COMMERCIAL("commercial"), diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/events/AliasRestrictionUpdateEvent.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/events/AliasRestrictionUpdateEvent.java new file mode 100644 index 000000000..7fbf0b4d8 --- /dev/null +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/events/AliasRestrictionUpdateEvent.java @@ -0,0 +1,13 @@ +package com.github.twitch4j.pubsub.events; + +import com.github.twitch4j.common.events.TwitchEvent; +import com.github.twitch4j.pubsub.domain.AliasRestrictionUpdateData; +import lombok.EqualsAndHashCode; +import lombok.Value; + +@Value +@EqualsAndHashCode(callSuper = false) +public class AliasRestrictionUpdateEvent extends TwitchEvent { + String userId; + AliasRestrictionUpdateData data; +} diff --git a/pubsub/src/main/java/com/github/twitch4j/pubsub/events/UserModerationActionEvent.java b/pubsub/src/main/java/com/github/twitch4j/pubsub/events/UserModerationActionEvent.java new file mode 100644 index 000000000..bc9d59da3 --- /dev/null +++ b/pubsub/src/main/java/com/github/twitch4j/pubsub/events/UserModerationActionEvent.java @@ -0,0 +1,13 @@ +package com.github.twitch4j.pubsub.events; + +import com.github.twitch4j.common.events.TwitchEvent; +import com.github.twitch4j.pubsub.domain.UserModerationActionData; +import lombok.EqualsAndHashCode; +import lombok.Value; + +@Value +@EqualsAndHashCode(callSuper = false) +public class UserModerationActionEvent extends TwitchEvent { + String userId; + UserModerationActionData data; +}