diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml
index d8da098..f11138d 100644
--- a/.github/workflows/maven-publish.yml
+++ b/.github/workflows/maven-publish.yml
@@ -72,13 +72,8 @@ jobs:
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
- git add pom.xml
- git add API/pom.xml
- git add Client/pom.xml
- git add TestApplication/pom.xml
- git add Tools-EventsCollector/pom.xml
- git add Tools-ReadmeGenerator/pom.xml
- git add Tools/pom.xml
+ git add README.MD
+ git add pom.xml && git add '**/pom.xml'
git commit -m "Update version in pom.xml"
- name: Push changes
uses: ad-m/github-push-action@master
diff --git a/.gitignore b/.gitignore
index 4d9f763..58ead33 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,4 +79,65 @@ fabric.properties
.idea/httpRequests
# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
\ No newline at end of file
+.idea/caches/build_file_checksums.ser
+/.idea/.gitignore
+/.idea/.name
+/.idea/compiler.xml
+/TestApplication/target/classes/io/github/jwdeveloper/tiktok/ConfigurationExample.class
+/TestApplication/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/TestApplication/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
+/Tools/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/Tools/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
+/Tools-EventsCollector/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/Tools-ReadmeGenerator/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+/Tools-ReadmeGenerator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
+/.idea/encodings.xml
+/Tools-ReadmeGenerator/target/classes/io/github/jwdeveloper/tiktok/EventsListGenerator$EventTypeComparator.class
+/Tools-ReadmeGenerator/target/classes/io/github/jwdeveloper/tiktok/EventsListGenerator.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/tables/ExceptionInfoModel.class
+/Tools/target/classes/io/github/jwdeveloper/tiktok/utils/FilesUtility.class
+/TestApplication/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/TestApplication/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+/Tools/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/Tools/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+/Tools-EventsCollector/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/Tools-ReadmeGenerator/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+/Tools-ReadmeGenerator/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+/.idea/jarRepositories.xml
+/TestApplication/target/classes/io/github/jwdeveloper/tiktok/ListenerExample$CustomListener.class
+/TestApplication/target/classes/io/github/jwdeveloper/tiktok/ListenerExample.class
+/Tools-ReadmeGenerator/target/classes/io/github/jwdeveloper/tiktok/LiveClientMethodsGenerator.class
+/TestApplication/target/classes/io/github/jwdeveloper/tiktok/Main.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/Main.class
+/Tools-ReadmeGenerator/target/classes/io/github/jwdeveloper/tiktok/Main.class
+/.idea/misc.xml
+/Tools-ReadmeGenerator/src/main/resources/output.md
+/Tools-ReadmeGenerator/target/classes/output.md
+/TestApplication/target/maven-archiver/pom.properties
+/Tools/target/maven-archiver/pom.properties
+/Tools-EventsCollector/target/maven-archiver/pom.properties
+/Tools-ReadmeGenerator/target/maven-archiver/pom.properties
+/.idea/inspectionProfiles/Project_Default.xml
+/Tools/target/classes/io/github/jwdeveloper/tiktok/protocol/ProtocolGenerator.class
+/Tools-ReadmeGenerator/target/classes/io/github/jwdeveloper/tiktok/ReadmeGenerator.class
+/TestApplication/target/classes/io/github/jwdeveloper/tiktok/SimpleExample.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/db/SqlConsts.class
+/Tools-ReadmeGenerator/target/classes/template.md
+/Tools/target/classes/io/github/jwdeveloper/tiktok/utils/TemplateUtility.class
+/TestApplication/target/TestApplication-0.0.18-Release.jar
+/TestApplication/target/TestApplication-0.0.18-Release-all.jar
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokDatabase.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel$TikTokErrorModelBuilder.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokErrorModelDAO.class
+/target/TikTokLiveJava-0.0.18-Release-all.pom
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel$TikTokMessageModelBuilder.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel.class
+/Tools-EventsCollector/target/classes/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokMessageModelDAO.class
+/Tools/target/Tools-0.0.18-Release.jar
+/Tools/target/Tools-0.0.18-Release-all.jar
+/Tools-EventsCollector/target/Tools-EventsCollector-0.0.18-Release.jar
+/Tools-EventsCollector/target/Tools-EventsCollector-0.0.18-Release-all.jar
+/Tools-ReadmeGenerator/target/Tools-ReadmeGenerator-0.0.18-Release.jar
+/Tools-ReadmeGenerator/target/Tools-ReadmeGenerator-0.0.18-Release-all.jar
+/.idea/vcs.xml
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
index f4821be..cb72473 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
@@ -3,69 +3,75 @@ package io.github.jwdeveloper.tiktok;
import lombok.Data;
import java.time.Duration;
-import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
@Data
public class ClientSettings {
- ///
- /// Timeout for Connections
- ///
+ /**
+ * Timeout for Connections
+ */
private Duration timeout;
// public RotatingProxy Proxy;
- ///
- /// ISO-Language for Client
- ///
+ /**
+ * ISO-Language for Client
+ */
private String clientLanguage;
- ///
- /// Whether to Retry if Connection Fails
- ///
+ /**
+ * Whether to Retry if Connection Fails
+ */
private boolean retryOnConnectionFailure;
- ///
- /// Wait to connect again for selected amount of time
- ///
+ /**
+ * Wait to connect again for selected amount of time
+ */
private Duration retryConnectionTimeout;
- ///
- /// Whether to handle Messages received from Room when Connecting
- ///
+ /**
+ * Whether to handle Messages received from Room when Connecting
+ */
private boolean handleExistingMessagesOnConnect;
- ///
- /// Whether to download List of Gifts for Room when Connecting
- ///
+ /**
+ * Whether to download List of Gifts for Room when Connecting
+ */
private boolean downloadGiftInfo;
- ///
- /// Whether to print Logs to Console
- ///
+ /**
+ * Whether to print Logs to Console
+ */
private boolean printToConsole;
- ///
- /// LoggingLevel for Logs
- ///
+ /**
+ * LoggingLevel for Logs
+ */
private Level logLevel;
- ///
- /// Whether to print Base64-Data for Messages to Console
- ///
+ /**
+ * Whether to print Base64-Data for Messages to Console
+ */
private boolean printMessageData;
- ///
- /// Tiktok user name
- ///
+ /**
+ * Tiktok user name
+ */
private String hostName;
- ///
- /// Parameters used in requests to tiktok api
- ///
+ /**
+ * Parameters used in requests to Tiktok api
+ */
private Map clientParameters;
+
+ /*
+ * 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;
+
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java b/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
index d959207..dc1878e 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
@@ -8,33 +8,32 @@ import java.util.logging.Level;
public class Constants {
- ///
- /// Web-URL for TikTok
- ///
+ /**
+ * Web-URL for TikTok
+ */
public static final String TIKTOK_URL_WEB = "https://www.tiktok.com/";
- ///
- /// WebCast-BaseURL for TikTok
- ///
+ /**
+ * WebCast-BaseURL for TikTok
+ */
public static final String TIKTOK_URL_WEBCAST = "https://webcast.tiktok.com/webcast/";
- ///
- /// Signing API by Isaac Kogan
- /// https://github-wiki-see.page/m/isaackogan/TikTokLive/wiki/All-About-Signatures
- ///
+ /**
+ * Signing API by Isaac Kogan
+ * https://github-wiki-see.page/m/isaackogan/TikTokLive/wiki/All-About-Signatures
+ */
public static final String TIKTOK_SIGN_API = "https://tiktok.eulerstream.com/webcast/sign_url";
- ///
- /// Default TimeOut for Connections
- ///
+ /**
+ * Default TimeOut for Connections
+ */
public static final int DEFAULT_TIMEOUT = 20;
- ///
- /// Default Polling-Time for Socket-Connection
- ///
+ /**
+ * Default Polling-Time for Socket-Connection
+ */
public static final int DEFAULT_POLLTIME = 1;
- ///
- /// Default Settings for Client
- ///
-
+ /**
+ * Default Settings for Client
+ */
public static ClientSettings DefaultClientSettings() {
@@ -53,15 +52,13 @@ public class Constants {
}
+ /**
+ * Default Parameters for HTTP-Request
+ */
- ///
- /// Default Parameters for HTTP-Request
- ///
-
-
- public static Map DefaultClientParams() {
- var clientParams = new TreeMap();
+ public static Map DefaultClientParams() {
+ var clientParams = new TreeMap();
clientParams.put("aid", 1988);
clientParams.put("app_language", "en-US");
clientParams.put("app_name", "tiktok_web");
@@ -100,11 +97,11 @@ public class Constants {
}
- ///
- /// Default Headers for HTTP-Request
- ///
- public static Map DefaultRequestHeaders() {
- var headers = new HashMap();
+ /**
+ * Default Headers for HTTP-Request
+ */
+ public static Map DefaultRequestHeaders() {
+ var headers = new HashMap();
headers.put("Connection", "keep-alive");
headers.put("Cache-Control", "max-age=0");
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokCommentEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokCommentEvent.java
index 840d7eb..1a66ef6 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokCommentEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokCommentEvent.java
@@ -7,7 +7,6 @@ import io.github.jwdeveloper.tiktok.events.objects.Picture;
import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastChatMessage;
import io.github.jwdeveloper.tiktok.messages.WebcastRoomPinMessage;
-import lombok.Getter;
import lombok.Value;
import java.util.ArrayList;
@@ -16,11 +15,11 @@ import java.util.List;
@Value
@EventMeta(eventType = EventType.Message)
public class TikTokCommentEvent extends TikTokHeaderEvent {
- User user;
- String text;
- String language;
- List mentionedUsers;
- List pictures;
+ User user;
+ String text;
+ String language;
+ List mentionedUsers;
+ List pictures;
public TikTokCommentEvent(WebcastRoomPinMessage.RoomPinMessageData data) {
super(data.getDetails().getRoomId(), data.getDetails().getMessageId(), data.getDetails().getServerTime());
@@ -32,11 +31,11 @@ public class TikTokCommentEvent extends TikTokHeaderEvent {
}
public TikTokCommentEvent(WebcastChatMessage msg) {
- super(msg.getHeader());
- user = User.MapOrEmpty(msg.getSender());
- text = msg.getComment();
- language = msg.getLanguage();
- mentionedUsers = msg.getMentionedUsersList().stream().map(User::new).toList();
- pictures = msg.getImagesList().stream().map(e -> new Picture(e.getImage())).toList();
+ super(msg.getCommon());
+ user = User.MapOrEmpty(msg.getUser());
+ text = msg.getContent();
+ language = msg.getContentLanguage();
+ mentionedUsers = List.of(User.MapOrEmpty(msg.getAtUser()));
+ pictures = msg.getEmotesListList().stream().map(e -> new Picture(e.getEmote().getImage())).toList();
}
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java
index 240fa25..e201ffd 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java
@@ -12,7 +12,6 @@ import lombok.Getter;
@EventMeta(eventType = EventType.Custom)
public class TikTokJoinEvent extends TikTokHeaderEvent {
private User user;
-
private final Long totalViewers;
public TikTokJoinEvent(WebcastSocialMessage msg) {
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java
index 599a494..9a73e30 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java
@@ -2,9 +2,15 @@ package io.github.jwdeveloper.tiktok.listener;
import java.util.List;
+/**
+ * You can dynamically add or removing TikTokEventListener
+ *
+ * @see TikTokEventListener
+ *
+ */
public interface ListenersManager
{
- List getBindingModels();
+ List getListeners();
void addListener(TikTokEventListener listener);
void removeListener(TikTokEventListener listener);
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java
index 1a51822..6ed0838 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java
@@ -1,5 +1,51 @@
package io.github.jwdeveloper.tiktok.listener;
+
+/**
+ *
+ * @see ListenersManager
+ *
+ * TikTokEventListener is an alternative way of handing TikTok events.
+ *
+ * TikTokLive.newClient("someuser").addListener(listener)
+ *
+ * After registertion all listeners are kept in Listener manager
+ * that could be obtained by client.getListenerManager();
+ *
+ * Method in TikTokEventListener should meet 4 requirements to be detected
+ * - must have @TikTokEventHandler annotation
+ * - must have 2 parameters
+ * - first parameter must be LiveClient
+ * - second must be class that extending TikTokEvent
+ *
+ * public static class CustomListener implements TikTokEventListener
+ * {
+ * @TikTokEventHandler
+ * public void onError(LiveClient liveClient, TikTokErrorEvent event)
+ * {
+ * System.out.println(event.getException().getMessage());
+ * }
+ *
+ * @TikTokEventHandler
+ * public void onCommentMessage(LiveClient liveClient, TikTokCommentEvent event)
+ * {
+ * System.out.println(event.getText());
+ * }
+ *
+ * @TikTokEventHandler
+ * public void onGiftMessage(LiveClient liveClient, TikTokGiftMessageEvent event)
+ * {
+ * System.out.println(event.getGift().getDescription());
+ * }
+ *
+ * @TikTokEventHandler
+ * public void onAnyEvent(LiveClient liveClient, TikTokEvent event)
+ * {
+ * System.out.println(event.getClass().getSimpleName());
+ * }
+ * }
+ *
+ */
public interface TikTokEventListener
{
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java
index 1e20618..de9c04c 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java
@@ -6,9 +6,25 @@ import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
import java.util.Map;
-public interface GiftManager
-{
- Map getGiftsInfo();
+public interface GiftManager {
- Map getActiveGifts();
+ /**
+ * Meta information about all TikTok available gifts such as, name, id, description, cost, etc
+ * TikTokGiftInfos are downloaded only if `clientSettings.setDownloadGiftInfo(true);`
+ *
+ * @return map of metainformations about gitfts where Integer is Gift Id and TikTokGiftInfo is gift data
+ * @see TikTokGiftInfo
+ */
+ Map getGiftsInfo();
+
+
+ /**
+ * Active Gifts are updated after TikTokGiftMessageEvent. This map contains gifts that
+ * recently send to host and have active strike
+ *
+ * @return map of active gifts
+ * @see TikTokGift
+ * @see io.github.jwdeveloper.tiktok.events.messages.TikTokGiftMessageEvent
+ */
+ Map getActiveGifts();
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
index c48e089..75f5465 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
@@ -1,19 +1,34 @@
package io.github.jwdeveloper.tiktok.live;
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
+import io.github.jwdeveloper.tiktok.listener.TikTokEventListener;
public interface LiveClient {
- // Connects to the live stream.
+ /**
+ * Connects to the live stream.
+ */
void connect();
- // Disconnects the connection.
+ /**
+ * Disconnects the connection.
+ */
void disconnect();
- // Gets the meta information about all gifts.
+
+ /**
+ * Get information about gifts
+ */
GiftManager getGiftManager();
- // Gets the current room info from TikTok API including streamer info, room status and statistics.
+ /**
+ * Gets the current room info from TikTok API including streamer info, room status and statistics.
+ */
LiveRoomInfo getRoomInfo();
+
+ /**
+ * Manage TikTokEventListener
+ * @see TikTokEventListener
+ */
ListenersManager getListenersManager();
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java
index c6cd428..6d4ea43 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveRoomInfo.java
@@ -5,4 +5,5 @@ public interface LiveRoomInfo
int getViewersCount();
String getRoomId();
String getUserName();
+ ConnectionState getConnectionState();
}
diff --git a/API/src/main/proto/tiktokSchema.proto b/API/src/main/proto/tiktokSchema.proto
index 8df018e..9130ad3 100644
--- a/API/src/main/proto/tiktokSchema.proto
+++ b/API/src/main/proto/tiktokSchema.proto
@@ -1348,19 +1348,57 @@ message ModerationData {
// Comment sent by User
message WebcastChatMessage {
- MessageHeader header = 1;
- User sender = 2; // User who sent message
- string comment = 3; // Text for Chat-Message
- uint64 data1 = 11;
- repeated User mentionedUsers = 12; // Users mentioned in comment
- repeated ChatImage images = 13;
- string language = 14; // Language for sender
- DataContainer chatData = 18;
- repeated ModerationData moderationData = 19;
+ Common common = 1;
+ User user = 2;
+ string content = 3;
+ bool visibleToSender = 4;
+ Image backgroundImage = 5;
+ string fullScreenTextColor = 6;
+ Image backgroundImageV2 = 7;
+ Image giftImage = 10;
+ int32 inputType = 11;
+ User atUser = 12;
+ repeated EmoteWithIndex emotesList = 13;
+ string contentLanguage = 14;
+ int32 quickChatScene = 16;
+ int32 communityFlaggedStatus = 17;
- message ChatImage {
- uint64 data1 = 1;
- Image Image = 2;
+ // @EmoteWithIndex
+ // proto.webcast.im.ChatMessage
+ // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
+ message EmoteWithIndex {
+ int64 index = 1;
+ Emote emote = 2;
+ }
+
+ message Emote {
+ string emoteId = 1;
+ Image image = 2;
+ AuditStatus auditStatus = 3; // Enum
+ string uuid = 4;
+ EmoteType emoteType = 5; // Enum
+ ContentSource contentSource = 6; // Enum
+ EmotePrivateType emotePrivateType = 7; // Enum
+ }
+ enum AuditStatus {
+ AUDITSTATUSUNKNOWN = 0;
+ AUDITSTATUSPASS = 1;
+ AUDITSTATUSFAILED = 2;
+ AUDITSTATUSREVIEWING = 3;
+ AUDITSTATUSFORBIDDEN = 4;
+ }
+ enum EmoteType {
+ EMOTETYPENORMAL = 0;
+ EMOTETYPEWITHSTICKER = 1;
+ }
+ enum ContentSource {
+ CONTENTSOURCEUNKNOWN = 0;
+ CONTENTSOURCENORMAL = 1;
+ CONTENTSOURCECAMERA = 2;
+ }
+ enum EmotePrivateType {
+ EMOTE_PRIVATE_TYPE_NORMAL = 0;
+ EMOTE_PRIVATE_TYPE_SUB_WAVE = 1;
}
}
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokGiftManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokGiftManager.java
index 27f8c5b..1b5551a 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokGiftManager.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokGiftManager.java
@@ -14,6 +14,7 @@ public class TikTokGiftManager implements GiftManager {
@Getter
private final Map giftsInfo;
+
@Getter
private final Map activeGifts;
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/handlers/TikTokMessageHandlerRegistration.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/handlers/TikTokMessageHandlerRegistration.java
index fd0dc72..c7804b6 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/handlers/TikTokMessageHandlerRegistration.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/handlers/TikTokMessageHandlerRegistration.java
@@ -108,12 +108,11 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
if (matcher.find())
{
- var value = matcher.group(0);
+ var value = matcher.group(1);
var number = Integer.parseInt(value);
return new TikTokShareEvent(message, number);
}
-
return switch (socialType) {
case SocialTypes.LikeType -> new TikTokLikeEvent(message);
case SocialTypes.FollowType -> new TikTokFollowEvent(message);
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java
index 53bc61c..d3a8e94 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java
@@ -24,7 +24,7 @@ public class TikTokListenersManager implements ListenersManager {
@Override
- public List getBindingModels() {
+ public List getListeners() {
return bindingModels.stream().map(ListenerBindingModel::getListener).toList();
}
diff --git a/FUNDING.yml b/FUNDING.yml
new file mode 100644
index 0000000..84549c6
--- /dev/null
+++ b/FUNDING.yml
@@ -0,0 +1,3 @@
+github: [jwdeveloper]
+patreon: jwdeveloper
+custom: ["https://www.buymeacoffee.com/jwdev"]
\ No newline at end of file
diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
index 497d587..b4f39a5 100644
--- a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
+++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
@@ -5,6 +5,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;
@@ -34,6 +35,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)
diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
index 53f51e5..40b6459 100644
--- a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
+++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
@@ -17,6 +17,7 @@ public class Main {
{
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(5));
clientSettings.setRetryOnConnectionFailure(true);
+ clientSettings.setDownloadGiftInfo(true);
})
.onConnected(Main::onConnected)
.onDisconnected(Main::onDisconnected)
@@ -29,10 +30,6 @@ public class Main {
.onLike(Main::onLike)
.onGiftMessage(Main::onGiftMessage)
.onEmote(Main::onEmote)
- .onEvent((liveClient, event) ->
- {
-
- })
.onError((_client, error) ->
{
error.getException().printStackTrace();
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/Main.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/RunCollector.java
similarity index 61%
rename from Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/Main.java
rename to Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/RunCollector.java
index 35c9300..2d3f55d 100644
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/Main.java
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/RunCollector.java
@@ -1,7 +1,6 @@
package io.github.jwdeveloper.tiktok.tools.collector;
import io.github.jwdeveloper.tiktok.TikTokLive;
-import io.github.jwdeveloper.tiktok.events.objects.Badge;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException;
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
import io.github.jwdeveloper.tiktok.tools.collector.tables.ExceptionInfoModel;
@@ -13,9 +12,10 @@ import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
-public class Main {
+public class RunCollector {
//https://protobuf-decoder.netlify.app/
+ //https://streamdps.com/tiktok-widgets/gifts/
/*
mia_tattoo
moniczkka
@@ -25,8 +25,6 @@ public class Main {
public static List ignoredEvents;
public static void main(String[] args) throws SQLException {
-
-
ignoredEvents = new ArrayList<>();
//ignoredEvents = List.of("TikTokJoinEvent","TikTokLikeEvent");
@@ -34,27 +32,26 @@ public class Main {
var db = new TikTokDatabase("test");
db.init();
+ var errors = db.selectErrors();
+
var users = new ArrayList();
- // users.add("mia_tattoo");
- // users.add("moniczkka");
- // users.add("besin1276");
- users.add("jackwoln");
- for(var user : users)
- {
+ // users.add("mia_tattoo");
+ // users.add("moniczkka");
+ // users.add("besin1276");
+ users.add("evequinte96");
+ for (var user : users) {
runTikTokLiveInstance(user, db);
}
}
- private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase)
- {
+ private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase) {
TikTokLive.newClient(tiktokUser)
.onWebsocketMessage((liveClient, event) ->
{
var eventName = event.getEvent().getClass().getSimpleName();
- if(ignoredEvents.contains(eventName))
- {
+ if (ignoredEvents.contains(eventName)) {
return;
}
@@ -67,32 +64,32 @@ public class Main {
.build();
tikTokDatabase.insertMessage(model);
- System.out.println("EVENT: ["+tiktokUser+"] " + eventName);
+ System.out.println("EVENT: [" + tiktokUser + "] " + eventName);
})
.onError((liveClient, event) ->
{
var exception = event.getException();
var exceptionContent = ExceptionInfoModel.getStackTraceAsString(exception);
- var builder = TikTokErrorModel.builder();
+ var errorModel = new TikTokErrorModel();
if (exception instanceof TikTokLiveMessageException ex) {
- builder.hostName(tiktokUser)
- .errorName(ex.messageName())
- .errorType("error-message")
- .exceptionContent(exceptionContent)
- .message(ex.messageToBase64())
- .response(ex.webcastResponseToBase64());
+ errorModel.setHostName(tiktokUser);
+ errorModel.setErrorName(ex.messageName());
+ errorModel.setErrorType("error-message");
+ errorModel.setExceptionContent(exceptionContent);
+ errorModel.setMessage(ex.messageToBase64());
+ errorModel.setResponse(ex.webcastResponseToBase64());
} else {
- builder.hostName(tiktokUser)
- .errorName(exception.getClass().getSimpleName())
- .errorType("error-system")
- .exceptionContent(exceptionContent)
- .message("")
- .response("");
+ errorModel.setHostName(tiktokUser);
+ errorModel.setErrorName(exception.getClass().getSimpleName());
+ errorModel.setErrorType("error-system");
+ errorModel.setExceptionContent(exceptionContent);
+ errorModel.setMessage("");
+ errorModel.setResponse("");
}
- var error = builder.build();
- tikTokDatabase.insertError(error);
- System.out.println("ERROR: "+error.getErrorName());
+
+ tikTokDatabase.insertError(errorModel);
+ System.out.println("ERROR: " + errorModel.getErrorName());
exception.printStackTrace();
})
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokDatabase.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokDatabase.java
index f688d00..1b881f9 100644
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokDatabase.java
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokDatabase.java
@@ -5,11 +5,11 @@ import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
import org.jdbi.v3.core.Jdbi;
import org.jdbi.v3.sqlobject.SqlObjectPlugin;
-import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
public class TikTokDatabase
{
@@ -24,12 +24,13 @@ public class TikTokDatabase
public void init() throws SQLException {
var jdbcUrl ="jdbc:sqlite:"+database+".db";
var connection = DriverManager.getConnection(jdbcUrl);
- Jdbi jdbi = Jdbi.create(jdbcUrl)
+ var jdbi = Jdbi.create(jdbcUrl)
.installPlugin(new SqlObjectPlugin());
jdbi.useHandle(handle -> {
handle.execute(SqlConsts.CREATE_MESSAGES_TABLE);
handle.execute(SqlConsts.CREATE_ERROR_TABLE);
});
+ // jdbi.registerRowMapper(new TikTokErrorModelMapper());
messagesTable = jdbi.onDemand(TikTokMessageModelDAO.class);
errorTable = jdbi.onDemand(TikTokErrorModelDAO.class);
}
@@ -47,4 +48,9 @@ public class TikTokDatabase
message.setCreatedAt(dateFormat.format(new Date()));
errorTable.insertTikTokMessage(message);
}
+
+ public List selectErrors()
+ {
+ return errorTable.selectErrors();
+ }
}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokErrorModelDAO.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokErrorModelDAO.java
index 3bb206f..3f803d8 100644
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokErrorModelDAO.java
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/db/TikTokErrorModelDAO.java
@@ -2,12 +2,21 @@ package io.github.jwdeveloper.tiktok.tools.collector.db;
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
import org.jdbi.v3.sqlobject.customizer.BindBean;
+import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
+import java.util.List;
+
+
+@RegisterBeanMapper(TikTokErrorModel.class)
public interface TikTokErrorModelDAO
{
@SqlUpdate("INSERT INTO TikTokErrorModel (hostName, errorName, errorType, exceptionContent, message, response, createdAt) " +
"VALUES (:hostName, :errorName, :errorType, :exceptionContent, :message, :response, :createdAt)")
void insertTikTokMessage(@BindBean TikTokErrorModel message);
+
+ @SqlQuery("SELECT * FROM TikTokErrorModel")
+ List selectErrors();
}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel.java
index 1c5a98f..2a391a9 100644
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel.java
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokErrorModel.java
@@ -1,10 +1,8 @@
package io.github.jwdeveloper.tiktok.tools.collector.tables;
-import lombok.Builder;
import lombok.Data;
@Data
-@Builder
public class TikTokErrorModel
{
private Integer id;
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel.java
index f2bb335..0ee5809 100644
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel.java
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/tables/TikTokMessageModel.java
@@ -3,8 +3,6 @@ package io.github.jwdeveloper.tiktok.tools.collector.tables;
import lombok.Builder;
import lombok.Data;
-import java.util.Date;
-
@Data
@Builder
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/RunTester.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/RunTester.java
new file mode 100644
index 0000000..1e00958
--- /dev/null
+++ b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/tester/RunTester.java
@@ -0,0 +1,51 @@
+package io.github.jwdeveloper.tiktok.tools.tester;
+
+import com.google.protobuf.InvalidProtocolBufferException;
+import io.github.jwdeveloper.tiktok.ClientSettings;
+import io.github.jwdeveloper.tiktok.TikTokGiftManager;
+import io.github.jwdeveloper.tiktok.TikTokRoomInfo;
+import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
+import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver;
+import io.github.jwdeveloper.tiktok.handlers.TikTokMessageHandlerRegistration;
+import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
+import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
+
+import java.sql.SQLException;
+import java.util.Base64;
+import java.util.logging.Logger;
+
+public class RunTester {
+
+ public static void main(String[] args) throws SQLException, InvalidProtocolBufferException {
+
+ var db = new TikTokDatabase("test");
+ db.init();
+ var errors = db.selectErrors();
+
+
+ var handler = getMessageHandler();
+ for (var error : errors) {
+
+ var bytes = Base64.getDecoder().decode(error.getResponse());
+ var response = WebcastResponse.parseFrom(bytes);
+ handler.handle(null,response);
+ }
+
+
+ }
+
+ public static TikTokMessageHandlerRegistration getMessageHandler()
+ {
+ var observer = new TikTokEventObserver();
+ observer.subscribe(TikTokErrorEvent.class,(liveClient, event) ->
+ {
+ event.getException().printStackTrace();
+ });
+ var settings = new ClientSettings();
+ //settings.setPrintMessageData(true);
+ var logger = Logger.getGlobal();
+ var roomInfo = new TikTokRoomInfo();
+ var manager = new TikTokGiftManager();
+ return new TikTokMessageHandlerRegistration(observer,settings,logger,manager,roomInfo);
+ }
+}
diff --git a/Tools-ReadmeGenerator/pom.xml b/Tools-ReadmeGenerator/pom.xml
index dc5fffc..ce4a2cd 100644
--- a/Tools-ReadmeGenerator/pom.xml
+++ b/Tools-ReadmeGenerator/pom.xml
@@ -10,7 +10,12 @@
4.0.0
Tools-ReadmeGenerator
-
+
+
+ jitpack.io
+ https://jitpack.io
+
+
16
16
@@ -24,5 +29,11 @@
${project.version}
compile
+
+ com.github.jwdeveloper.Descrabble
+ Descrabble-Full
+ 0.0.7-Release
+ compile
+
\ No newline at end of file
diff --git a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/ReadmeGenerator.java b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/ReadmeGenerator.java
index 7216bc5..3021d11 100644
--- a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/ReadmeGenerator.java
+++ b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/ReadmeGenerator.java
@@ -14,10 +14,7 @@ public class ReadmeGenerator
var template = FilesUtility.getFileFromResource(Main.class,"template.md");
var variables = new HashMap();
- var pomPath = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\Tools-ReadmeGenerator\\pom.xml";
-
- variables.put("version", getCurrentVersion(pomPath));
-
+ variables.put("version", getCurrentVersion());
var exampleCodePath = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\TestApplication\\src\\main\\java\\io\\github\\jwdeveloper\\tiktok\\SimpleExample.java";
variables.put("Code-Example", getCodeExample(exampleCodePath));
@@ -39,23 +36,11 @@ public class ReadmeGenerator
FilesUtility.saveFile(outputPath, template);
}
- public String getCurrentVersion(String path)
+ public String getCurrentVersion()
{
- var content = FilesUtility.loadFileContent(path);
- var pattern = "(.*?)<\\/version>";
+ var version = System.getenv("version");;
- // Create a Pattern object
- var regex = Pattern.compile(pattern);
-
- // Create a Matcher object
- var matcher = regex.matcher(content);
-
- // Find the first match
- if (matcher.find()) {
- // Extract and print the version
- return matcher.group(1);
- }
- return "VERSION NOT FOUND";
+ return version == null?"NOT_FOUND":version;
}
public String getCodeExample(String path)
diff --git a/pom.xml b/pom.xml
index 04a3a32..5f628de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,6 +48,7 @@
maven-shade-plugin
3.5.0
+
package