From 3d4a517adbcccc38d9eaae9f0081f1ce9f55c8fd Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 18 Jul 2024 17:41:27 -0400 Subject: [PATCH 1/2] Removal of TikTokRoomDataResponseEvent.java as its included in TikTokPreConnectionEvent.java Added ListUser#toString Changed TikTokLiveHttpClient.getStartingPayload and TikTokLiveHttpClient.getByteResponse to protected Altered DownloadData to be dynamic to declare request values or append them instead! --- .../http/TikTokRoomDataResponseEvent.java | 38 ----------- .../tiktok/data/models/users/ListUser.java | 15 ++++ .../jwdeveloper/tiktok/TikTokLiveClient.java | 6 +- .../tiktok/TikTokLiveHttpClient.java | 4 +- .../recorder/impl/RecorderListener.java | 68 ++++++++++--------- .../recorder/impl/data/DownloadData.java | 4 +- 6 files changed, 56 insertions(+), 79 deletions(-) delete mode 100644 API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokRoomDataResponseEvent.java diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokRoomDataResponseEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokRoomDataResponseEvent.java deleted file mode 100644 index 8195973..0000000 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokRoomDataResponseEvent.java +++ /dev/null @@ -1,38 +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.data.events.http; - -import io.github.jwdeveloper.tiktok.annotations.EventMeta; -import io.github.jwdeveloper.tiktok.annotations.EventType; -import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; -import io.github.jwdeveloper.tiktok.data.requests.LiveData; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -@EventMeta(eventType = EventType.Debug) -public class TikTokRoomDataResponseEvent extends TikTokEvent -{ - private final LiveData.Response liveData; -} diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java index 2553076..66e91d5 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java @@ -53,4 +53,19 @@ public class ListUser AUDIO, VIDEO } + + @Override + public String toString() { + return "ListUser{" + + "user=" + user + + ", linkType=" + linkType + + ", linkMicId=" + linkMicId + + ", linkStatus=" + linkStatus + + ", modifyTime=" + modifyTime + + ", linkerId=" + linkerId + + ", userPosition=" + userPosition + + ", silenceStatus=" + silenceStatus + + ", roleType=" + roleType + + "}"; + } } \ 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 653f184..a352351 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -26,7 +26,6 @@ import com.google.protobuf.ByteString; import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.data.events.control.*; -import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent; import io.github.jwdeveloper.tiktok.data.events.room.TikTokRoomInfoEvent; import io.github.jwdeveloper.tiktok.data.requests.*; import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings; @@ -89,8 +88,7 @@ public class TikTokLiveClient implements LiveClient if (e instanceof TikTokLiveOfflineHostException && clientSettings.isRetryOnConnectionFailure()) { try { Thread.sleep(clientSettings.getRetryConnectionTimeout().toMillis()); - } catch (Exception ignored) { - } + } catch (Exception ignored) {} logger.info("Reconnecting"); tikTokEventHandler.publish(this, new TikTokReconnectingEvent()); this.connect(); @@ -133,8 +131,6 @@ public class TikTokLiveClient implements LiveClient if (liveData.getLiveStatus() == LiveData.LiveStatus.HostOffline) throw new TikTokLiveOfflineHostException("LiveStream for " + roomInfo.getHostName() + " not found, is the Host offline?"); - tikTokEventHandler.publish(this, new TikTokRoomDataResponseEvent(liveData)); - roomInfo.setTitle(liveData.getTitle()); roomInfo.setViewersCount(liveData.getViewers()); roomInfo.setTotalViewersCount(liveData.getTotalViewers()); diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java index b1ccee8..d106762 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java @@ -203,7 +203,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient } } - private ActionResult> getStartingPayload(LiveConnectionData.Request request) { + protected ActionResult> getStartingPayload(LiveConnectionData.Request request) { var proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings(); if (proxyClientSettings.isEnabled()) { while (proxyClientSettings.hasNext()) { @@ -215,7 +215,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient return getByteResponse(request.getRoomId()); } - private ActionResult> getByteResponse(String room_id) { + protected ActionResult> getByteResponse(String room_id) { HttpClientBuilder builder = httpFactory.client(TIKTOK_SIGN_API) .withParam("client", "ttlive-java") .withParam("uuc", "1") //MAGIC NUMBER! diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index b88cd5a..516befe 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -25,7 +25,7 @@ package io.github.jwdeveloper.tiktok.extension.recorder.impl; import com.google.gson.JsonParser; import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; import io.github.jwdeveloper.tiktok.data.events.*; -import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent; +import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent; import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings; import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder; import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.*; @@ -34,28 +34,29 @@ import io.github.jwdeveloper.tiktok.extension.recorder.impl.event.TikTokLiveReco import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.models.ConnectionState; -import javax.net.ssl.HttpsURLConnection; import java.io.*; -import java.net.URL; -import java.util.function.*; +import java.net.URI; +import java.net.http.*; +import java.time.Duration; +import java.util.function.BiConsumer; public class RecorderListener implements LiveRecorder { private final BiConsumer consumer; - private RecorderSettings settings; + private final RecorderSettings settings; private DownloadData downloadData; private Thread liveDownloadThread; public RecorderListener(BiConsumer consumer) { this.consumer = consumer; + this.settings = RecorderSettings.DEFAULT(); } @TikTokEventObserver - private void onResponse(LiveClient liveClient, TikTokRoomDataResponseEvent event) { - settings = RecorderSettings.DEFAULT(); + private void onResponse(LiveClient liveClient, TikTokPreConnectionEvent event) { consumer.accept(settings, liveClient); - var json = event.getLiveData().getJson(); + var json = event.getUserData().getJson(); liveClient.getLogger().info("Searching for live download url"); downloadData = settings.getPrepareDownloadData() != null ? @@ -70,26 +71,26 @@ public class RecorderListener implements LiveRecorder { @TikTokEventObserver private void onConnected(LiveClient liveClient, TikTokConnectedEvent event) { - if (isConnected()) + if (isConnected() || downloadData.getDownloadLiveUrl().isEmpty()) return; liveDownloadThread = new Thread(() -> { try { liveClient.getLogger().info("Recording started "+liveClient.getRoomInfo().getHostName()); - var url = new URL(downloadData.getFullUrl()); - HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); - var headers = LiveClientSettings.DefaultRequestHeaders(); - for (var entry : headers.entrySet()) { - connection.setRequestProperty(entry.getKey(), entry.getValue()); - } + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(URI.create(downloadData.getFullUrl())).GET(); + for (var entry : LiveClientSettings.DefaultRequestHeaders().entrySet()) + requestBuilder.header(entry.getKey(), entry.getValue()); + HttpResponse serverResponse = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL) + .connectTimeout(Duration.ofSeconds(10)).build().send(requestBuilder.build(), HttpResponse.BodyHandlers.ofInputStream()); var file = settings.getOutputFile(); file.getParentFile().mkdirs(); file.createNewFile(); try ( - var in = connection.getInputStream(); - var fos = new FileOutputStream(file) + var in = serverResponse.body(); + var fos = new FileOutputStream(file, true) ) { byte[] dataBuffer = new byte[1024]; int bytesRead; @@ -128,35 +129,38 @@ public class RecorderListener implements LiveRecorder { private DownloadData mapToDownloadData(String json) { - - var parsedJson = JsonParser.parseString(json); - var jsonObject = parsedJson.getAsJsonObject(); - var streamDataJson = jsonObject.getAsJsonObject("data") - .getAsJsonObject("stream_url") - .getAsJsonObject("live_core_sdk_data") + try { + var parsedJson = JsonParser.parseString(json); + var jsonObject = parsedJson.getAsJsonObject(); + var streamDataJson = jsonObject.getAsJsonObject("data") + .getAsJsonObject("liveRoom") + .getAsJsonObject("streamData") .getAsJsonObject("pull_data") .get("stream_data") .getAsString(); - var streamDataJsonObject = JsonParser.parseString(streamDataJson).getAsJsonObject(); + var streamDataJsonObject = JsonParser.parseString(streamDataJson).getAsJsonObject(); - var urlLink = streamDataJsonObject.getAsJsonObject("data") + var urlLink = streamDataJsonObject.getAsJsonObject("data") .getAsJsonObject(LiveQuality.origin.name()) .getAsJsonObject("main") .get("flv") .getAsString(); - var sessionId = streamDataJsonObject.getAsJsonObject("common") + var sessionId = streamDataJsonObject.getAsJsonObject("common") .get("session_id") .getAsString(); - //main - //https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1 - //Working - //https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/game/stream-3284937501738533765_sd5.flv?_session_id=136-20240109001052D91FDBC00143211020C8.1704759052997&_webnoredir=1 - //https://pull-f5-tt02.fcdn.eu.tiktokcdn.com/stage/stream-3861399216374940610_uhd5.flv?_session_id=136-20240109000223D0BAA1A83974490EE630.1704758544391&_webnoredir=1 + //main + //https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1 + //Working + //https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/game/stream-3284937501738533765_sd5.flv?_session_id=136-20240109001052D91FDBC00143211020C8.1704759052997&_webnoredir=1 + //https://pull-f5-tt02.fcdn.eu.tiktokcdn.com/stage/stream-3861399216374940610_uhd5.flv?_session_id=136-20240109000223D0BAA1A83974490EE630.1704758544391&_webnoredir=1 - return new DownloadData(urlLink, sessionId); + return new DownloadData(urlLink, sessionId); + } catch (Exception e) { + return new DownloadData("", ""); + } } private boolean isConnected() { diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/DownloadData.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/DownloadData.java index 6c9430c..ee1bed3 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/DownloadData.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/DownloadData.java @@ -34,6 +34,6 @@ public class DownloadData { private String sessionId; public String getFullUrl() { - return downloadLiveUrl + "&_webnoredir=1&session_id=" + sessionId; - } + return downloadLiveUrl + (downloadLiveUrl.contains("?") ? "&" : "?") + "_webnoredir=1&session_id=" + sessionId; + } } \ No newline at end of file From 2bc1993ea5a0706e3f950377f82e2d84a1b62efc Mon Sep 17 00:00:00 2001 From: JW Date: Sun, 21 Jul 2024 12:08:27 +0200 Subject: [PATCH 2/2] - Create `of` methods for more events - User.name was empty in testing event - Add `onConnecting` to builder --- .../data/events/TikTokCommentEvent.java | 1 + .../data/events/TikTokConnectedEvent.java | 5 +++ .../data/events/TikTokDisconnectedEvent.java | 6 ++++ .../tiktok/data/events/TikTokErrorEvent.java | 9 +++-- .../data/events/TikTokLiveEndedEvent.java | 7 +++- .../data/events/TikTokSubscribeEvent.java | 1 + .../events/control/TikTokConnectingEvent.java | 6 ++-- .../data/events/social/TikTokFollowEvent.java | 15 ++++---- .../data/events/social/TikTokJoinEvent.java | 1 + .../data/events/social/TikTokLikeEvent.java | 1 + .../data/events/social/TikTokShareEvent.java | 34 ++++++++++++------- .../tiktok/live/builder/EventsBuilder.java | 13 +++++++ 12 files changed, 74 insertions(+), 25 deletions(-) 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 91dd6a0..b28ca0e 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 @@ -58,6 +58,7 @@ public class TikTokCommentEvent extends TikTokHeaderEvent { var builder = WebcastChatMessage.newBuilder(); builder.setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() .setNickname(userName) + .setDisplayId(userName) .build()); builder.setContentLanguage("en"); builder.setVisibleToSender(true); diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokConnectedEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokConnectedEvent.java index b81ccdb..049f29b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokConnectedEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokConnectedEvent.java @@ -29,4 +29,9 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokLiveClientEvent; public class TikTokConnectedEvent extends TikTokLiveClientEvent { + + public static TikTokConnectedEvent of() + { + return new TikTokConnectedEvent(); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java index d15e14a..d5804cf 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java @@ -39,4 +39,10 @@ public class TikTokDisconnectedEvent extends TikTokLiveClientEvent { public TikTokDisconnectedEvent() { this("None"); } + + + public static TikTokDisconnectedEvent of(String reason) + { + return new TikTokDisconnectedEvent(reason); + } } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokErrorEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokErrorEvent.java index 1374eeb..4650aaf 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokErrorEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokErrorEvent.java @@ -25,13 +25,18 @@ package io.github.jwdeveloper.tiktok.data.events; import io.github.jwdeveloper.tiktok.annotations.EventMeta; import io.github.jwdeveloper.tiktok.annotations.EventType; import io.github.jwdeveloper.tiktok.data.events.common.TikTokLiveClientEvent; +import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor @EventMeta(eventType = EventType.Control) -public class TikTokErrorEvent extends TikTokLiveClientEvent -{ +public class TikTokErrorEvent extends TikTokLiveClientEvent { private final Throwable exception; + + + public static TikTokErrorEvent of(String message) { + return new TikTokErrorEvent(new TikTokLiveException(message)); + } } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLiveEndedEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLiveEndedEvent.java index 93af1f7..bb66762 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLiveEndedEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLiveEndedEvent.java @@ -24,9 +24,14 @@ package io.github.jwdeveloper.tiktok.data.events; import io.github.jwdeveloper.tiktok.annotations.EventMeta; import io.github.jwdeveloper.tiktok.annotations.EventType; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; - +import io.github.jwdeveloper.tiktok.data.events.control.TikTokConnectingEvent; @EventMeta(eventType = EventType.Message) public class TikTokLiveEndedEvent extends TikTokEvent { + + + public static TikTokLiveEndedEvent of() { + return new TikTokLiveEndedEvent(); + } } 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 b4a07c1..a9f35ce 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 @@ -53,6 +53,7 @@ public class TikTokSubscribeEvent extends TikTokHeaderEvent { public static TikTokSubscribeEvent of(String userName) { return new TikTokSubscribeEvent(WebcastMemberMessage.newBuilder() .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setDisplayId(userName) .setNickname(userName) .build()) .build()); diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokConnectingEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokConnectingEvent.java index 86536a8..312c971 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokConnectingEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokConnectingEvent.java @@ -31,7 +31,9 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokLiveClientEvent; * Triggered when client is connecting to live is successfully established. */ @EventMeta(eventType = EventType.Control) -public class TikTokConnectingEvent extends TikTokLiveClientEvent -{ +public class TikTokConnectingEvent extends TikTokLiveClientEvent { + public static TikTokConnectingEvent of() { + return new TikTokConnectingEvent(); + } } 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 4a5fbce..500ce07 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 @@ -32,8 +32,7 @@ import lombok.Value; @Value @EventMeta(eventType = EventType.Message) -public class TikTokFollowEvent extends TikTokHeaderEvent -{ +public class TikTokFollowEvent extends TikTokHeaderEvent { User user; int totalFollowers; @@ -43,12 +42,12 @@ public class TikTokFollowEvent extends TikTokHeaderEvent totalFollowers = msg.getFollowCount(); } - public static TikTokFollowEvent of(String userName) - { + public static TikTokFollowEvent of(String userName) { return new TikTokFollowEvent(WebcastSocialMessage.newBuilder() - .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() - .setNickname(userName) - .build()) - .build()); + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setDisplayId(userName) + .setNickname(userName) + .build()) + .build()); } } \ No newline at end of file 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 d55a764..df54e43 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 @@ -53,6 +53,7 @@ public class TikTokJoinEvent extends TikTokHeaderEvent { { return new TikTokJoinEvent(WebcastMemberMessage.newBuilder() .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setDisplayId(userName) .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 c740928..ff02f7a 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 @@ -62,6 +62,7 @@ public class TikTokLikeEvent extends TikTokHeaderEvent .setCount(likes) .setTotal(likes) .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setDisplayId(userName) .setNickname(userName) .build()) .build()); diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java index 9d0f6f9..7a35363 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.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.WebcastSocialMessage; import lombok.Getter; @@ -33,18 +34,27 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokShareEvent extends TikTokHeaderEvent { - private final User user; - private final int totalShares; + private final User user; + private final int totalShares; - public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) { - super(msg.getCommon()); - user = User.map(msg.getUser()); - this.totalShares = amount; - } + public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) { + super(msg.getCommon()); + user = User.map(msg.getUser()); + this.totalShares = amount; + } - public TikTokShareEvent(WebcastSocialMessage msg) { - super(msg.getCommon()); - user = User.map(msg.getUser()); - totalShares = 1; - } + public TikTokShareEvent(WebcastSocialMessage msg) { + super(msg.getCommon()); + user = User.map(msg.getUser()); + totalShares = 1; + } + + public static TikTokShareEvent of(String userName, int shaders) { + return new TikTokShareEvent(WebcastSocialMessage.newBuilder() + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setDisplayId(userName) + .setNickname(userName) + .build()) + .build(), shaders); + } } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java index 9f19a27..6f9e74d 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventsBuilder.java @@ -24,6 +24,7 @@ package io.github.jwdeveloper.tiktok.live.builder; import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; +import io.github.jwdeveloper.tiktok.data.events.control.TikTokConnectingEvent; import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent; import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftComboEvent; import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent; @@ -60,6 +61,18 @@ public interface EventsBuilder { return onEvent(TikTokEvent.class, action); } + + /** + * As a first event after method `LiveClient::connect()` is performed + * + * @param action consumable action + * @return self instance + */ + default T onConnecting(EventConsumer action) + { + return onEvent(TikTokConnectingEvent.class, action); + } + /** * Invoked when information about room (live) got updated such as viewer count, etc.. *