From 05ce745dc81c2a7c9354e2813a9fbcb21d308eed Mon Sep 17 00:00:00 2001 From: JW Date: Wed, 13 Sep 2023 06:32:51 +0200 Subject: [PATCH] Changes: LiveRoomInfo + new method getConnectionState() getting current state of connection + ListenersManager getBindingModels() renamed to getListeners() + Introducing documentation, each public interface got small documentation + New property in config .setSessionId() + New event: onReconnecting() Bugs: CommentEvent was throwing mapping exception --- .../tiktok/events/TikTokEventBuilder.java | 2 + .../messages/TikTokReconnectingEvent.java | 13 +++++ .../jwdeveloper/tiktok/TikTokLiveClient.java | 4 ++ .../tiktok/TikTokLiveClientBuilder.java | 7 +++ .../tiktok/http/TikTokApiService.java | 48 ++++------------ README.md | 56 +++++++++++-------- .../tiktok/ConfigurationExample.java | 4 ++ .../io/github/jwdeveloper/tiktok/Main.java | 1 + .../src/main/resources/template.md | 3 +- 9 files changed, 76 insertions(+), 62 deletions(-) create mode 100644 API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java index 3f17981..b851743 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java @@ -90,6 +90,8 @@ public interface TikTokEventBuilder { T onWebsocketMessage(TikTokEventConsumer event); + T onReconnecting(TikTokEventConsumer event); + } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java new file mode 100644 index 0000000..ba7c348 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java @@ -0,0 +1,13 @@ +package io.github.jwdeveloper.tiktok.events.messages; + +import io.github.jwdeveloper.tiktok.annotations.EventMeta; +import io.github.jwdeveloper.tiktok.annotations.EventType; +import io.github.jwdeveloper.tiktok.events.base.TikTokLiveClientEvent; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Control) +public class TikTokReconnectingEvent extends TikTokLiveClientEvent +{ + +} 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 aac29aa..8be9f17 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -2,6 +2,7 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent; +import io.github.jwdeveloper.tiktok.events.messages.TikTokReconnectingEvent; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException; import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver; @@ -62,6 +63,7 @@ public class TikTokLiveClient implements LiveClient { } catch (Exception ignored){} logger.info("Reconnecting"); + tikTokEventHandler.publish(this, new TikTokReconnectingEvent()); this.connect(); } throw e; @@ -85,6 +87,8 @@ public class TikTokLiveClient implements LiveClient { logger.info("Connecting"); setState(ConnectionState.CONNECTING); + + apiService.updateSessionId(); var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName()); liveRoomInfo.setRoomId(roomId); var roomData = apiService.fetchRoomInfo(); 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 9ece326..19ca07c 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -344,6 +344,13 @@ public class TikTokLiveClientBuilder implements TikTokEventBuilder event) + { + tikTokEventHandler.subscribe(TikTokReconnectingEvent.class, event); + return this; + } } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokApiService.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokApiService.java index 84ed72f..36a4a18 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokApiService.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokApiService.java @@ -26,45 +26,19 @@ public class TikTokApiService { this.clientSettings = clientSettings; } - /* - if (sessionId) { - // Update sessionId - this.#options.sessionId = sessionId; + + public void updateSessionId() + { + if(clientSettings.getSessionId() == null) + { + return; } - - if (!this.#options.sessionId) { - throw new Error('Missing SessionId. Please provide your current SessionId to use this feature.'); + if(clientSettings.getSessionId().isEmpty()) + { + return; } - - try { - // Retrieve current room_id if not connected - if (!this.#isConnected) { - await this.#retrieveRoomId(); - } - - // Add the session cookie to the CookieJar - this.#httpClient.setSessionId(this.#options.sessionId); - - // Submit the chat request - let requestParams = { ...this.#clientParams, content: text }; - let response = await this.#httpClient.postFormDataToWebcastApi('room/chat/', requestParams, null); - - // Success? - if (response?.status_code === 0) { - return response.data; - } - - // Handle errors - switch (response?.status_code) { - case 20003: - throw new Error('Your SessionId has expired. Please provide a new one.'); - default: - throw new Error(`TikTok responded with status code ${response?.status_code}: ${response?.data?.message}`); - } - } catch (err) { - throw new Error(`Failed to send chat message. ${err.message}`); - } - */ + tiktokHttpClient.setSessionId(clientSettings.getSessionId()); + } public boolean sendMessage(String message, String sessionId) { if (sessionId.isEmpty()) { diff --git a/README.md b/README.md index 8bb145a..36a359f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Do you prefer other programming languages? com.github.jwdeveloper.TikTok-Live-Java Client - 0.0.20-Release + 0.0.22-Release compile @@ -118,6 +118,10 @@ public class ConfigurationExample { clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection + + // 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 + clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000"); }) .buildAndRun(); System.in.read(); @@ -135,6 +139,7 @@ import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokCommentEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokGiftMessageEvent; +import io.github.jwdeveloper.tiktok.events.messages.TikTokLikeEvent; import io.github.jwdeveloper.tiktok.listener.TikTokEventListener; import io.github.jwdeveloper.tiktok.live.LiveClient; @@ -164,6 +169,11 @@ public class ListenerExample public static class CustomListener implements TikTokEventListener { + @TikTokEventHandler + public void onLike(LiveClient liveClient, TikTokLikeEvent event) + { + System.out.println(event.toString()); + } @TikTokEventHandler public void onError(LiveClient liveClient, TikTokErrorEvent event) @@ -197,7 +207,7 @@ public class ListenerExample ## Methods A `client (LiveClient)` object contains the following methods. -{{methods}} + | Method Name | Description | |---------------------| ----------- | @@ -206,32 +216,11 @@ A `client (LiveClient)` object contains the following methods. | getGiftManager | Gets the meta informations about all gifts. | | getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. | | getListenersManager | Gets and manage TikTokEventListeners | - ## Events A `TikTokLive` object has the following events -**Custom**: -- [TikTokHeaderEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokHeaderEvent.java) -- [TikTokUnhandledSocialEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledSocialEvent.java) -- [TikTokLivePausedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLivePausedEvent.java) -- [TikTokLikeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLikeEvent.java) -- [TikTokWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokWebsocketMessageEvent.java) -- [TikTokSubscribeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokSubscribeEvent.java) -- [TikTokFollowEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokFollowEvent.java) -- [TikTokLiveClientEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveClientEvent.java) -- [TikTokUnhandledEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledEvent.java) -- [TikTokLiveEndedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveEndedEvent.java) -- [TikTokJoinEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java) -- [TikTokShareEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokShareEvent.java) -- [TikTokUnhandledControlEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledControlEvent.java) - -**Control**: -- [TikTokConnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokConnectedEvent.java) -- [TikTokErrorEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokErrorEvent.java) -- [TikTokDisconnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokDisconnectedEvent.java) - **Message**: - [TikTokLinkMicFanTicketEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLinkMicFanTicketEvent.java) - [TikTokEnvelopeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokEnvelopeEvent.java) @@ -263,6 +252,27 @@ A `TikTokLive` object has the following events - [TikTokGiftBroadcastEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftBroadcastEvent.java) - [TikTokUnhandledWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledWebsocketMessageEvent.java) +**Control**: +- [TikTokConnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokConnectedEvent.java) +- [TikTokReconnectingEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java) +- [TikTokErrorEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokErrorEvent.java) +- [TikTokDisconnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokDisconnectedEvent.java) + +**Custom**: +- [TikTokHeaderEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokHeaderEvent.java) +- [TikTokUnhandledSocialEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledSocialEvent.java) +- [TikTokLivePausedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLivePausedEvent.java) +- [TikTokLikeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLikeEvent.java) +- [TikTokWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokWebsocketMessageEvent.java) +- [TikTokSubscribeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokSubscribeEvent.java) +- [TikTokFollowEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokFollowEvent.java) +- [TikTokLiveClientEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveClientEvent.java) +- [TikTokUnhandledEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledEvent.java) +- [TikTokLiveEndedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveEndedEvent.java) +- [TikTokJoinEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java) +- [TikTokShareEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokShareEvent.java) +- [TikTokUnhandledControlEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledControlEvent.java) +

diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ConfigurationExample.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ConfigurationExample.java index 9003c6e..ff0af2b 100644 --- a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ConfigurationExample.java +++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ConfigurationExample.java @@ -20,6 +20,10 @@ public class ConfigurationExample { clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection + + //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 + clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000"); }) .buildAndRun(); System.in.read(); diff --git a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/Main.java b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/Main.java index f9e237b..f419a09 100644 --- a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/Main.java +++ b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/Main.java @@ -6,5 +6,6 @@ public class Main { { var generator = new ReadmeGenerator(); generator.generate(); + } } \ No newline at end of file diff --git a/Tools-ReadmeGenerator/src/main/resources/template.md b/Tools-ReadmeGenerator/src/main/resources/template.md index 19547ea..7e46c16 100644 --- a/Tools-ReadmeGenerator/src/main/resources/template.md +++ b/Tools-ReadmeGenerator/src/main/resources/template.md @@ -67,7 +67,7 @@ Do you prefer other programming languages? ## Methods A `client (LiveClient)` object contains the following methods. -{{methods}} + | Method Name | Description | |---------------------| ----------- | @@ -76,7 +76,6 @@ A `client (LiveClient)` object contains the following methods. | getGiftManager | Gets the meta informations about all gifts. | | getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. | | getListenersManager | Gets and manage TikTokEventListeners | - ## Events A `TikTokLive` object has the following events