Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add unofficial chatrooms user pubsub topic #515

Merged
merged 2 commits into from Jan 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -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);
}
Expand Down
17 changes: 17 additions & 0 deletions pubsub/src/main/java/com/github/twitch4j/pubsub/TwitchPubSub.java
Expand Up @@ -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;
Expand Down
@@ -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;

}
@@ -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);
}

}
Expand Up @@ -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"),
Expand Down
@@ -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;
}
@@ -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;
}