diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java index a1516be..5388d15 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java @@ -47,11 +47,23 @@ public class TikTokCommentEvent extends TikTokHeaderEvent { public TikTokCommentEvent(WebcastChatMessage msg) { super(msg.getCommon()); - user = User.map(msg.getUser(),msg.getUserIdentity()); + user = User.map(msg.getUser(), msg.getUserIdentity()); text = msg.getContent(); visibleToSender = msg.getVisibleToSender(); getUserLanguage = msg.getContentLanguage(); mentionedUser = User.map(msg.getAtUser()); pictures = msg.getEmotesListList().stream().map(e -> Picture.map(e.getEmote().getImage())).toList(); } + + + public static TikTokCommentEvent of(String userName, String message) { + var builder = WebcastChatMessage.newBuilder(); + builder.setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()); + builder.setContentLanguage("en"); + builder.setVisibleToSender(true); + builder.setContent(message); + return new TikTokCommentEvent(builder.build()); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java index b545eba..fde3819 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java @@ -36,10 +36,10 @@ import lombok.Getter; */ @Getter @EventMeta(eventType = EventType.Message) -public class TikTokSubscribeEvent extends TikTokHeaderEvent -{ +public class TikTokSubscribeEvent extends TikTokHeaderEvent { private final User user; + public TikTokSubscribeEvent(WebcastMemberMessage msg) { super(msg.getCommon()); user = User.map(msg.getUser()); @@ -52,4 +52,11 @@ public class TikTokSubscribeEvent extends TikTokHeaderEvent user.addAttribute(UserAttribute.Subscriber); } + public static TikTokSubscribeEvent of(String userName) { + return new TikTokSubscribeEvent(WebcastMemberMessage.newBuilder() + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()) + .build()); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java index 9acafa1..3b3cd0b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java @@ -70,6 +70,6 @@ public class TikTokGiftEvent extends TikTokHeaderEvent { } public static TikTokGiftEvent of(String name, int id, int diamonds) { - return null; + return TikTokGiftEvent.of(new Gift(id, name, diamonds, "")); } } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java index c1715d5..5cbe573 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java @@ -24,8 +24,10 @@ package io.github.jwdeveloper.tiktok.data.events.social; import io.github.jwdeveloper.tiktok.annotations.EventMeta; import io.github.jwdeveloper.tiktok.annotations.EventType; +import io.github.jwdeveloper.tiktok.data.events.TikTokSubscribeEvent; import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastSocialMessage; import lombok.Value; @@ -45,4 +47,12 @@ public class TikTokFollowEvent extends TikTokHeaderEvent totalFollowers = msg.getFollowCount(); } + public static TikTokFollowEvent of(String userName) + { + return new TikTokFollowEvent(WebcastSocialMessage.newBuilder() + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()) + .build()); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java index 700e27a..d55a764 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java @@ -26,6 +26,7 @@ import io.github.jwdeveloper.tiktok.annotations.EventMeta; import io.github.jwdeveloper.tiktok.annotations.EventType; import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLikeMessage; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastSocialMessage; import lombok.Getter; @@ -47,4 +48,13 @@ public class TikTokJoinEvent extends TikTokHeaderEvent { user = User.map(msg.getUser()); totalUsers = msg.getMemberCount(); } + + public static TikTokJoinEvent of(String userName) + { + return new TikTokJoinEvent(WebcastMemberMessage.newBuilder() + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()) + .build()); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java index 6c64270..ce93b44 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java @@ -57,4 +57,15 @@ public class TikTokLikeEvent extends TikTokHeaderEvent likes = msg.getCount(); totalLikes = msg.getTotal(); } + + public static TikTokLikeEvent of(String userName, int likes) + { + return new TikTokLikeEvent(WebcastLikeMessage.newBuilder() + .setCount(likes) + .setTotal(likes) + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()) + .build()); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java index 9e72b94..c884f06 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java @@ -35,6 +35,7 @@ public class LiveData { } @Data + @AllArgsConstructor public static class Response { private String json; private LiveStatus liveStatus; @@ -45,6 +46,11 @@ public class LiveData { private boolean ageRestricted; private User host; private LiveType liveType; + public Response() { + + } + + } public enum LiveStatus { diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java index 3020eea..3ac9b9d 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java @@ -35,6 +35,16 @@ public class LiveClientSettings { /** + * TODO: give better description + *

+ * sets client in the offline mode, so it do not connects to TikTok servers + * it makes sense to use it when you are testing client with your custom events + */ + private boolean offline; + + /** + * TODO: give better description + *

* Determines if gifts data is downloaded before TikTokLive starts, * when `false` then client.giftManager() does not contain initial gifts */ @@ -76,14 +86,13 @@ public class LiveClientSettings { private HttpClientSettings httpSettings; /** - * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId - * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages + * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId + * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages */ private String sessionId; /** * Optional: By default roomID is fetched before connect to live, but you can set it manually - * */ private String roomId; @@ -92,8 +101,7 @@ public class LiveClientSettings { */ private String apiKey; - public static LiveClientSettings createDefault() - { + public static LiveClientSettings createDefault() { var httpSettings = new HttpClientSettings(); httpSettings.getParams().putAll(DefaultClientParams()); httpSettings.getHeaders().putAll(DefaultRequestHeaders()); @@ -166,4 +174,6 @@ public class LiveClientSettings { headers.put("Accept-Language", "en-US,en; q=0.9"); return headers; } + + } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java index 9826653..0ec4dff 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -33,6 +33,7 @@ import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; import io.github.jwdeveloper.tiktok.data.requests.LiveData; import io.github.jwdeveloper.tiktok.data.requests.LiveUserData; import io.github.jwdeveloper.tiktok.exceptions.*; +import io.github.jwdeveloper.tiktok.http.LiveHttpClient; import io.github.jwdeveloper.tiktok.listener.ListenersManager; import io.github.jwdeveloper.tiktok.listener.TikTokListenersManager; import io.github.jwdeveloper.tiktok.live.GiftsManager; @@ -48,7 +49,7 @@ import java.util.logging.Logger; public class TikTokLiveClient implements LiveClient { private final TikTokRoomInfo liveRoomInfo; - private final TikTokLiveHttpClient httpClient; + private final LiveHttpClient httpClient; private final SocketClient webSocketClient; private final TikTokLiveEventHandler tikTokEventHandler; private final LiveClientSettings clientSettings; @@ -58,7 +59,7 @@ public class TikTokLiveClient implements LiveClient { public TikTokLiveClient(GiftsManager giftsManager, TikTokRoomInfo tikTokLiveMeta, - TikTokLiveHttpClient tiktokHttpClient, + LiveHttpClient tiktokHttpClient, SocketClient webSocketClient, TikTokLiveEventHandler tikTokEventHandler, LiveClientSettings clientSettings, diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index 306febc..b4ffd82 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -45,6 +45,7 @@ import io.github.jwdeveloper.tiktok.mappers.data.MappingResult; import io.github.jwdeveloper.tiktok.mappers.handlers.*; import io.github.jwdeveloper.tiktok.messages.webcast.*; import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketClient; +import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketOfflineClient; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -54,7 +55,7 @@ import java.util.logging.Logger; public class TikTokLiveClientBuilder implements LiveClientBuilder { protected final LiveClientSettings clientSettings; - protected final TikTokLiveEventHandler tikTokEventHandler; + protected final TikTokLiveEventHandler eventHandler; protected final List listeners; protected Consumer onCustomMappings; protected Logger logger; @@ -63,7 +64,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { public TikTokLiveClientBuilder(String userName) { this.clientSettings = LiveClientSettings.createDefault(); this.clientSettings.setHostName(userName); - this.tikTokEventHandler = new TikTokLiveEventHandler(); + this.eventHandler = new TikTokLiveEventHandler(); this.listeners = new ArrayList<>(); this.onCustomMappings = (e) -> { }; @@ -109,27 +110,30 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { var tiktokRoomInfo = new TikTokRoomInfo(); tiktokRoomInfo.setHostName(clientSettings.getHostName()); - var listenerManager = new TikTokListenersManager(listeners, tikTokEventHandler); + var listenerManager = new TikTokListenersManager(listeners, eventHandler); var httpClientFactory = new HttpClientFactory(clientSettings); - var tikTokLiveHttpClient = new TikTokLiveHttpClient(httpClientFactory, clientSettings); + var liveHttpClient = clientSettings.isOffline() ? + new TikTokLiveHttpOfflineClient() : + new TikTokLiveHttpClient(httpClientFactory, clientSettings); var eventsMapper = createMapper(giftsManager, tiktokRoomInfo); - var messageHandler = new TikTokLiveMessageHandler(tikTokEventHandler, eventsMapper); + var messageHandler = new TikTokLiveMessageHandler(eventHandler, eventsMapper); - - var webSocketClient = new TikTokWebSocketClient( - clientSettings, - messageHandler, - tikTokEventHandler); + var webSocketClient = clientSettings.isOffline() ? + new TikTokWebSocketOfflineClient(eventHandler) : + new TikTokWebSocketClient( + clientSettings, + messageHandler, + eventHandler); return new TikTokLiveClient( giftsManager, tiktokRoomInfo, - tikTokLiveHttpClient, + liveHttpClient, webSocketClient, - tikTokEventHandler, + eventHandler, clientSettings, listenerManager, logger); @@ -235,255 +239,255 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { } public TikTokLiveClientBuilder onUnhandledSocial(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokUnhandledSocialEvent.class, event); + eventHandler.subscribe(TikTokUnhandledSocialEvent.class, event); return this; } public LiveClientBuilder onChest(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokChestEvent.class, event); + eventHandler.subscribe(TikTokChestEvent.class, event); return this; } public TikTokLiveClientBuilder onLinkMicFanTicket(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkMicFanTicketEvent.class, event); + eventHandler.subscribe(TikTokLinkMicFanTicketEvent.class, event); return this; } public TikTokLiveClientBuilder onEnvelope(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokEnvelopeEvent.class, event); + eventHandler.subscribe(TikTokEnvelopeEvent.class, event); return this; } public TikTokLiveClientBuilder onShop(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokShopEvent.class, event); + eventHandler.subscribe(TikTokShopEvent.class, event); return this; } public TikTokLiveClientBuilder onDetect(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokDetectEvent.class, event); + eventHandler.subscribe(TikTokDetectEvent.class, event); return this; } public TikTokLiveClientBuilder onLinkLayer(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkLayerEvent.class, event); + eventHandler.subscribe(TikTokLinkLayerEvent.class, event); return this; } public TikTokLiveClientBuilder onConnected(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokConnectedEvent.class, event); + eventHandler.subscribe(TikTokConnectedEvent.class, event); return this; } public TikTokLiveClientBuilder onPreConnection(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokPreConnectionEvent.class, event); + eventHandler.subscribe(TikTokPreConnectionEvent.class, event); return this; } public TikTokLiveClientBuilder onCaption(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokCaptionEvent.class, event); + eventHandler.subscribe(TikTokCaptionEvent.class, event); return this; } public TikTokLiveClientBuilder onQuestion(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokQuestionEvent.class, event); + eventHandler.subscribe(TikTokQuestionEvent.class, event); return this; } public TikTokLiveClientBuilder onRoomPin(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokRoomPinEvent.class, event); + eventHandler.subscribe(TikTokRoomPinEvent.class, event); return this; } @Override public LiveClientBuilder onEvent(Class eventClass, EventConsumer event) { - tikTokEventHandler.subscribe(eventClass, event); + eventHandler.subscribe(eventClass, event); return this; } @Override public TikTokLiveClientBuilder onRoomInfo(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokRoomInfoEvent.class, event); + eventHandler.subscribe(TikTokRoomInfoEvent.class, event); return this; } public TikTokLiveClientBuilder onLivePaused(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLivePausedEvent.class, event); + eventHandler.subscribe(TikTokLivePausedEvent.class, event); return this; } @Override public TikTokLiveClientBuilder onLiveUnpaused(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLiveUnpausedEvent.class, event); + eventHandler.subscribe(TikTokLiveUnpausedEvent.class, event); return this; } public TikTokLiveClientBuilder onLike(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLikeEvent.class, event); + eventHandler.subscribe(TikTokLikeEvent.class, event); return this; } public TikTokLiveClientBuilder onLink(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkEvent.class, event); + eventHandler.subscribe(TikTokLinkEvent.class, event); return this; } public TikTokLiveClientBuilder onBarrage(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokBarrageEvent.class, event); + eventHandler.subscribe(TikTokBarrageEvent.class, event); return this; } public TikTokLiveClientBuilder onGift(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokGiftEvent.class, event); + eventHandler.subscribe(TikTokGiftEvent.class, event); return this; } public TikTokLiveClientBuilder onGiftCombo(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokGiftComboEvent.class, event); + eventHandler.subscribe(TikTokGiftComboEvent.class, event); return this; } public TikTokLiveClientBuilder onLinkMicArmies(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkMicArmiesEvent.class, event); + eventHandler.subscribe(TikTokLinkMicArmiesEvent.class, event); return this; } public TikTokLiveClientBuilder onEmote(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokEmoteEvent.class, event); + eventHandler.subscribe(TikTokEmoteEvent.class, event); return this; } public TikTokLiveClientBuilder onUnauthorizedMember(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokUnauthorizedMemberEvent.class, event); + eventHandler.subscribe(TikTokUnauthorizedMemberEvent.class, event); return this; } public TikTokLiveClientBuilder onInRoomBanner(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokInRoomBannerEvent.class, event); + eventHandler.subscribe(TikTokInRoomBannerEvent.class, event); return this; } public TikTokLiveClientBuilder onLinkMicMethod(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkMicMethodEvent.class, event); + eventHandler.subscribe(TikTokLinkMicMethodEvent.class, event); return this; } public TikTokLiveClientBuilder onSubscribe(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokSubscribeEvent.class, event); + eventHandler.subscribe(TikTokSubscribeEvent.class, event); return this; } public TikTokLiveClientBuilder onPoll(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokPollEvent.class, event); + eventHandler.subscribe(TikTokPollEvent.class, event); return this; } public TikTokLiveClientBuilder onFollow(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokFollowEvent.class, event); + eventHandler.subscribe(TikTokFollowEvent.class, event); return this; } public TikTokLiveClientBuilder onComment(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokCommentEvent.class, event); + eventHandler.subscribe(TikTokCommentEvent.class, event); return this; } @Override public LiveClientBuilder onHttpResponse(EventConsumer action) { - tikTokEventHandler.subscribe(TikTokHttpResponseEvent.class, action); + eventHandler.subscribe(TikTokHttpResponseEvent.class, action); return this; } public TikTokLiveClientBuilder onGoalUpdate(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokGoalUpdateEvent.class, event); + eventHandler.subscribe(TikTokGoalUpdateEvent.class, event); return this; } public TikTokLiveClientBuilder onRankUpdate(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokRankUpdateEvent.class, event); + eventHandler.subscribe(TikTokRankUpdateEvent.class, event); return this; } public TikTokLiveClientBuilder onIMDelete(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokIMDeleteEvent.class, event); + eventHandler.subscribe(TikTokIMDeleteEvent.class, event); return this; } public TikTokLiveClientBuilder onLiveEnded(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLiveEndedEvent.class, event); + eventHandler.subscribe(TikTokLiveEndedEvent.class, event); return this; } public TikTokLiveClientBuilder onError(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokErrorEvent.class, event); + eventHandler.subscribe(TikTokErrorEvent.class, event); return this; } public TikTokLiveClientBuilder onJoin(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokJoinEvent.class, event); + eventHandler.subscribe(TikTokJoinEvent.class, event); return this; } public TikTokLiveClientBuilder onRankText(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokRankTextEvent.class, event); + eventHandler.subscribe(TikTokRankTextEvent.class, event); return this; } public TikTokLiveClientBuilder onShare(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokShareEvent.class, event); + eventHandler.subscribe(TikTokShareEvent.class, event); return this; } public TikTokLiveClientBuilder onUnhandledMember(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokUnhandledMemberEvent.class, event); + eventHandler.subscribe(TikTokUnhandledMemberEvent.class, event); return this; } public TikTokLiveClientBuilder onSubNotify(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokSubNotifyEvent.class, event); + eventHandler.subscribe(TikTokSubNotifyEvent.class, event); return this; } public TikTokLiveClientBuilder onLinkMicBattle(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokLinkMicBattleEvent.class, event); + eventHandler.subscribe(TikTokLinkMicBattleEvent.class, event); return this; } public TikTokLiveClientBuilder onDisconnected(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokDisconnectedEvent.class, event); + eventHandler.subscribe(TikTokDisconnectedEvent.class, event); return this; } public TikTokLiveClientBuilder onUnhandledControl(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokUnhandledControlEvent.class, event); + eventHandler.subscribe(TikTokUnhandledControlEvent.class, event); return this; } public TikTokLiveClientBuilder onEvent(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokEvent.class, event); + eventHandler.subscribe(TikTokEvent.class, event); return this; } @Override public TikTokLiveClientBuilder onWebsocketResponse(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokWebsocketResponseEvent.class, event); + eventHandler.subscribe(TikTokWebsocketResponseEvent.class, event); return this; } @Override public TikTokLiveClientBuilder onWebsocketMessage(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokWebsocketMessageEvent.class, event); + eventHandler.subscribe(TikTokWebsocketMessageEvent.class, event); return this; } @Override public TikTokLiveClientBuilder onWebsocketUnhandledMessage(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokWebsocketUnhandledMessageEvent.class, event); + eventHandler.subscribe(TikTokWebsocketUnhandledMessageEvent.class, event); return this; } @Override public TikTokLiveClientBuilder onReconnecting(EventConsumer event) { - tikTokEventHandler.subscribe(TikTokReconnectingEvent.class, event); + eventHandler.subscribe(TikTokReconnectingEvent.class, event); return this; } } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java new file mode 100644 index 0000000..c5fb961 --- /dev/null +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java @@ -0,0 +1,45 @@ +package io.github.jwdeveloper.tiktok; + +import io.github.jwdeveloper.tiktok.data.models.Picture; +import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.data.requests.GiftsData; +import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; +import io.github.jwdeveloper.tiktok.data.requests.LiveData; +import io.github.jwdeveloper.tiktok.data.requests.LiveUserData; +import io.github.jwdeveloper.tiktok.http.LiveHttpClient; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse; + +import java.net.URI; +import java.util.List; + +public class TikTokLiveHttpOfflineClient implements LiveHttpClient { + @Override + public GiftsData.Response fetchGiftsData() { + return new GiftsData.Response("", List.of()); + } + + @Override + public LiveUserData.Response fetchLiveUserData(LiveUserData.Request request) { + return new LiveUserData.Response("", LiveUserData.UserStatus.Live, "offline_room_id", 0); + } + + @Override + public LiveData.Response fetchLiveData(LiveData.Request request) { + return new LiveData.Response("", + LiveData.LiveStatus.HostOnline, + "offline live", + 0, + 0, + 0, + false, + new User(0L, "offline user", new Picture("")), + LiveData.LiveType.SOLO); + } + + @Override + public LiveConnectionData.Response fetchLiveConnectionData(LiveConnectionData.Request request) { + return new LiveConnectionData.Response("", + URI.create("https://example.live"), + WebcastResponse.newBuilder().build()); + } +} diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java new file mode 100644 index 0000000..d30dddc --- /dev/null +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java @@ -0,0 +1,31 @@ +package io.github.jwdeveloper.tiktok.websocket; + +import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; +import io.github.jwdeveloper.tiktok.data.events.TikTokConnectedEvent; +import io.github.jwdeveloper.tiktok.data.events.TikTokDisconnectedEvent; +import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; +import io.github.jwdeveloper.tiktok.live.LiveClient; + +public class TikTokWebSocketOfflineClient implements SocketClient { + + private final TikTokLiveEventHandler handler; + private LiveClient liveClient; + + public TikTokWebSocketOfflineClient(TikTokLiveEventHandler handler) { + this.handler = handler; + } + + @Override + public void start(LiveConnectionData.Response webcastResponse, LiveClient tikTokLiveClient) { + liveClient = tikTokLiveClient; + handler.publish(liveClient, new TikTokConnectedEvent()); + } + + @Override + public void stop() { + if (liveClient == null) { + return; + } + handler.publish(liveClient, new TikTokDisconnectedEvent()); + } +} diff --git a/Examples/pom.xml b/Examples/pom.xml index 231f9a8..add2230 100644 --- a/Examples/pom.xml +++ b/Examples/pom.xml @@ -78,12 +78,6 @@ 1.3.0-Release compile - - io.github.jwdeveloper.worker - extension-tester - 1.3.0-Release - compile - diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java deleted file mode 100644 index d7e69ac..0000000 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package io.github.jwdeveloper.tiktok; - -import java.time.Duration; - -public class ChatMessageExample { - public static void main(String[] args) { - - - var roomData = TikTokLive.requests() - .fetchLiveData("X"); - - var gifts = TikTokLive.requests().fetchGiftsData(); - - - var user = TikTokLive.requests() - .fetchLiveUserData("mark"); - - TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) - .configure(clientSettings -> - { - clientSettings.setPrintToConsole(true); - clientSettings.getHttpSettings().setTimeout(Duration.ofSeconds(21)); - }) - .onComment((liveClient, event) -> - { - System.out.println("Chat message: " + event.getUser().getName() + " " + event.getText()); - }) - .onWebsocketUnhandledMessage((liveClient, event) -> - { - liveClient.getLogger().info(event.getMessage().getMethod()); - }).buildAndConnect(); - } -} diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java similarity index 96% rename from Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java rename to Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java index ca45379..9e7ebe5 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java @@ -31,7 +31,7 @@ import java.io.IOException; import java.time.Duration; import java.util.logging.Level; -public class SimpleExample { +public class ConnectionExample { public static String TIKTOK_HOSTNAME = "kvadromama_marina1"; public static void main(String[] args) throws IOException { @@ -40,10 +40,10 @@ public class SimpleExample { var gifts = TikTokLive.gifts(); - TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) + TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME) .configure(clientSettings -> { - clientSettings.setHostName(SimpleExample.TIKTOK_HOSTNAME); // This method is useful in case you want change hostname later + clientSettings.setHostName(ConnectionExample.TIKTOK_HOSTNAME); // This method is useful in case you want change hostname later clientSettings.setClientLanguage("en"); // Language clientSettings.setLogLevel(Level.ALL); // Log level clientSettings.setPrintToConsole(true); // Printing all logs to console even if log level is Level.OFF diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java index ec38858..3e6ece2 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java @@ -39,7 +39,7 @@ public class CustomEventExample { public static void main(String[] args) { - TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) + TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME) .configure(clientSettings -> { clientSettings.setPrintToConsole(true); diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java new file mode 100644 index 0000000..306d1ee --- /dev/null +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java @@ -0,0 +1,68 @@ +package io.github.jwdeveloper.tiktok; + +import io.github.jwdeveloper.tiktok.data.events.TikTokCommentEvent; +import io.github.jwdeveloper.tiktok.data.events.TikTokSubNotifyEvent; +import io.github.jwdeveloper.tiktok.data.events.TikTokSubscribeEvent; +import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent; +import io.github.jwdeveloper.tiktok.data.events.social.TikTokFollowEvent; +import io.github.jwdeveloper.tiktok.data.events.social.TikTokJoinEvent; +import io.github.jwdeveloper.tiktok.data.events.social.TikTokLikeEvent; +import io.github.jwdeveloper.tiktok.live.LiveClient; + +public class Events_And_Gifts_Testing_Example { + public static void main(String[] args) + { + LiveClient client = TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME) + .configure(liveClientSettings -> + { + liveClientSettings.setOffline(true); + liveClientSettings.setPrintToConsole(true); + }) + .onConnected((liveClient, event) -> + { + liveClient.getLogger().info("Connected"); + }) + .onDisconnected((liveClient, event) -> + { + liveClient.getLogger().info("Disconnected"); + }) + .onGiftCombo((liveClient, event) -> + { + liveClient.getLogger().info("Connected"); + }) + .onGift((liveClient, event) -> + { + liveClient.getLogger().info("New fakeGift: " + event.getGift()); + }) + .buildAndConnect(); + + var gifts = TikTokLive.gifts(); + var fakeGift = TikTokGiftEvent.of(gifts.getByName("Rose")); + fakeGift = TikTokGiftEvent.of("Rose", 1, 23); + + var fakeMessage = TikTokCommentEvent.of("Mark", "Hello world"); + + var fakeSubscriber = TikTokSubscribeEvent.of("Mark"); + var fakeFollow = TikTokFollowEvent.of("Mark"); + var fakeLike = TikTokLikeEvent.of("Mark", 12); + var fakeJoin = TikTokJoinEvent.of("Mark"); + + + client.publishEvent(fakeGift); + client.publishEvent(fakeMessage); + client.publishEvent(fakeSubscriber); + client.publishEvent(fakeFollow); + client.publishEvent(fakeLike); + client.publishEvent(fakeJoin); + + client.disconnect(); + } + + + + + + public void GetBuilder() { + + } +} diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftTestingExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftTestingExample.java deleted file mode 100644 index 1345208..0000000 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftTestingExample.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.github.jwdeveloper.tiktok; - -import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent; -import io.github.jwdeveloper.tiktok.live.LiveClient; - -public class GiftTestingExample { - - - public static void main(String[] args) throws Exception { - LiveClient client = TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) - .configure(liveClientSettings -> - { - // liveClientSettings.setOffline(true); - }) - .onConnected((liveClient, event) -> - { - liveClient.getLogger().info("Connected"); - }) - .onGiftCombo((liveClient, event) -> - { - - }) - .onGift((liveClient, event) -> - { - liveClient.getLogger().info("New fakeGift: " + event.getGift()); - }) - .buildAndConnect(); - - var gifts = TikTokLive.gifts(); - var fakeGift = TikTokGiftEvent.of(gifts.getByName("Rose")); - var fakeGift2 = TikTokGiftEvent.of("Rose", 1, 23); - client.publishEvent(fakeGift); - client.publishEvent(fakeGift2); - } - - - public void GetTesterBuilder() { - - } - - - public void GetBuilder() { - - } -} diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java index b74638a..d12111e 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java @@ -48,7 +48,7 @@ public class ListenerExample showLogo(); CustomListener customListener = new CustomListener(); - TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) + TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME) .addListener(customListener) .buildAndConnect(); System.in.read(); diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java index c911354..9db5c94 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java @@ -26,7 +26,7 @@ import java.net.Proxy; public class ProxyExample { public static void main(String[] args) throws Exception { - TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME) + TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME) .configure(clientSettings -> { clientSettings.setPrintToConsole(true); clientSettings.getHttpSettings().configureProxy(proxySettings -> { diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/TestingGiftsExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/TestingGiftsExample.java deleted file mode 100644 index cce9c63..0000000 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/TestingGiftsExample.java +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.jwdeveloper.tiktok; - -public class TestingGiftsExample { -} diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/mockClient/TikTokMockBuilder.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/mockClient/TikTokMockBuilder.java index ba214eb..cf48b63 100644 --- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/mockClient/TikTokMockBuilder.java +++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/mockClient/TikTokMockBuilder.java @@ -86,15 +86,15 @@ public class TikTokMockBuilder extends TikTokLiveClientBuilder { var tiktokRoomInfo = new TikTokRoomInfo(); tiktokRoomInfo.setHostName(clientSettings.getHostName()); - var listenerManager = new TikTokListenersManager(listeners, tikTokEventHandler); + var listenerManager = new TikTokListenersManager(listeners, eventHandler); var mapper = createMapper(new TikTokGiftsManager(List.of()), tiktokRoomInfo); - var handler = new TikTokLiveMessageHandler(tikTokEventHandler, mapper); + var handler = new TikTokLiveMessageHandler(eventHandler, mapper); var webSocketClient = new WebsocketClientMock(logger, responses, handler); return new LiveClientMock(tiktokRoomInfo, new TikTokLiveHttpClient(), webSocketClient, - tikTokEventHandler, + eventHandler, clientSettings, listenerManager, logger); diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/TikTokLiveDataCollector.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/TikTokLiveDataCollector.java index d9899b7..f369ff6 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/TikTokLiveDataCollector.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/TikTokLiveDataCollector.java @@ -50,7 +50,6 @@ public class TikTokLiveDataCollector { this.settings = settings; } - public void connectDatabase() { var serverApi = ServerApi.builder() .version(ServerApiVersion.V1) diff --git a/pom.xml b/pom.xml index 447a9b1..00bf394 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,6 @@ extension-recorder extension-collector - extension-tester