mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-27 08:49:40 -05:00
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
This commit is contained in:
9
.github/workflows/maven-publish.yml
vendored
9
.github/workflows/maven-publish.yml
vendored
@@ -72,13 +72,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config --local user.email "action@github.com"
|
git config --local user.email "action@github.com"
|
||||||
git config --local user.name "GitHub Action"
|
git config --local user.name "GitHub Action"
|
||||||
git add pom.xml
|
git add README.MD
|
||||||
git add API/pom.xml
|
git add pom.xml && git add '**/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 commit -m "Update version in pom.xml"
|
git commit -m "Update version in pom.xml"
|
||||||
- name: Push changes
|
- name: Push changes
|
||||||
uses: ad-m/github-push-action@master
|
uses: ad-m/github-push-action@master
|
||||||
|
|||||||
61
.gitignore
vendored
61
.gitignore
vendored
@@ -80,3 +80,64 @@ fabric.properties
|
|||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
# Android studio 3.1+ serialized cache file
|
||||||
.idea/caches/build_file_checksums.ser
|
.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
|
||||||
|
|||||||
@@ -3,69 +3,75 @@ package io.github.jwdeveloper.tiktok;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ClientSettings {
|
public class ClientSettings {
|
||||||
/// <summary>
|
/**
|
||||||
/// Timeout for Connections
|
* Timeout for Connections
|
||||||
/// </summary>
|
*/
|
||||||
private Duration timeout;
|
private Duration timeout;
|
||||||
|
|
||||||
// public RotatingProxy Proxy;
|
// public RotatingProxy Proxy;
|
||||||
/// <summary>
|
/**
|
||||||
/// ISO-Language for Client
|
* ISO-Language for Client
|
||||||
/// </summary>
|
*/
|
||||||
|
|
||||||
private String clientLanguage;
|
private String clientLanguage;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Whether to Retry if Connection Fails
|
* Whether to Retry if Connection Fails
|
||||||
/// </summary>
|
*/
|
||||||
private boolean retryOnConnectionFailure;
|
private boolean retryOnConnectionFailure;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Wait to connect again for selected amount of time
|
* Wait to connect again for selected amount of time
|
||||||
/// </summary>
|
*/
|
||||||
private Duration retryConnectionTimeout;
|
private Duration retryConnectionTimeout;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Whether to handle Messages received from Room when Connecting
|
* Whether to handle Messages received from Room when Connecting
|
||||||
/// </summary>
|
*/
|
||||||
private boolean handleExistingMessagesOnConnect;
|
private boolean handleExistingMessagesOnConnect;
|
||||||
/// <summary>
|
/**
|
||||||
/// Whether to download List of Gifts for Room when Connecting
|
* Whether to download List of Gifts for Room when Connecting
|
||||||
/// </summary>
|
*/
|
||||||
private boolean downloadGiftInfo;
|
private boolean downloadGiftInfo;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Whether to print Logs to Console
|
* Whether to print Logs to Console
|
||||||
/// </summary>
|
*/
|
||||||
|
|
||||||
private boolean printToConsole;
|
private boolean printToConsole;
|
||||||
/// <summary>
|
/**
|
||||||
/// LoggingLevel for Logs
|
* LoggingLevel for Logs
|
||||||
/// </summary>
|
*/
|
||||||
private Level logLevel;
|
private Level logLevel;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Whether to print Base64-Data for Messages to Console
|
* Whether to print Base64-Data for Messages to Console
|
||||||
/// </summary>
|
*/
|
||||||
private boolean printMessageData;
|
private boolean printMessageData;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Tiktok user name
|
* Tiktok user name
|
||||||
/// </summary>
|
*/
|
||||||
private String hostName;
|
private String hostName;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Parameters used in requests to tiktok api
|
* Parameters used in requests to Tiktok api
|
||||||
/// </summary>
|
*/
|
||||||
private Map<String, Object> clientParameters;
|
private Map<String, Object> 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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,33 +8,32 @@ import java.util.logging.Level;
|
|||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Web-URL for TikTok
|
* Web-URL for TikTok
|
||||||
/// </summary>
|
*/
|
||||||
public static final String TIKTOK_URL_WEB = "https://www.tiktok.com/";
|
public static final String TIKTOK_URL_WEB = "https://www.tiktok.com/";
|
||||||
/// <summary>
|
/**
|
||||||
/// WebCast-BaseURL for TikTok
|
* WebCast-BaseURL for TikTok
|
||||||
/// </summary>
|
*/
|
||||||
public static final String TIKTOK_URL_WEBCAST = "https://webcast.tiktok.com/webcast/";
|
public static final String TIKTOK_URL_WEBCAST = "https://webcast.tiktok.com/webcast/";
|
||||||
/// <summary>
|
/**
|
||||||
/// Signing API by Isaac Kogan
|
* Signing API by Isaac Kogan
|
||||||
/// https://github-wiki-see.page/m/isaackogan/TikTokLive/wiki/All-About-Signatures
|
* https://github-wiki-see.page/m/isaackogan/TikTokLive/wiki/All-About-Signatures
|
||||||
/// </summary>
|
*/
|
||||||
public static final String TIKTOK_SIGN_API = "https://tiktok.eulerstream.com/webcast/sign_url";
|
public static final String TIKTOK_SIGN_API = "https://tiktok.eulerstream.com/webcast/sign_url";
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Default TimeOut for Connections
|
* Default TimeOut for Connections
|
||||||
/// </summary>
|
*/
|
||||||
public static final int DEFAULT_TIMEOUT = 20;
|
public static final int DEFAULT_TIMEOUT = 20;
|
||||||
/// <summary>
|
/**
|
||||||
/// Default Polling-Time for Socket-Connection
|
* Default Polling-Time for Socket-Connection
|
||||||
/// </summary>
|
*/
|
||||||
public static final int DEFAULT_POLLTIME = 1;
|
public static final int DEFAULT_POLLTIME = 1;
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Default Settings for Client
|
* Default Settings for Client
|
||||||
/// </summary>
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static ClientSettings DefaultClientSettings() {
|
public static ClientSettings DefaultClientSettings() {
|
||||||
@@ -53,11 +52,9 @@ public class Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Parameters for HTTP-Request
|
||||||
/// <summary>
|
*/
|
||||||
/// Default Parameters for HTTP-Request
|
|
||||||
/// </summary>
|
|
||||||
|
|
||||||
|
|
||||||
public static Map<String, Object> DefaultClientParams() {
|
public static Map<String, Object> DefaultClientParams() {
|
||||||
@@ -100,9 +97,9 @@ public class Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/**
|
||||||
/// Default Headers for HTTP-Request
|
* Default Headers for HTTP-Request
|
||||||
/// </summary>
|
*/
|
||||||
public static Map<String, String> DefaultRequestHeaders() {
|
public static Map<String, String> DefaultRequestHeaders() {
|
||||||
var headers = new HashMap<String, String>();
|
var headers = new HashMap<String, String>();
|
||||||
|
|
||||||
|
|||||||
@@ -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.events.objects.User;
|
||||||
import io.github.jwdeveloper.tiktok.messages.WebcastChatMessage;
|
import io.github.jwdeveloper.tiktok.messages.WebcastChatMessage;
|
||||||
import io.github.jwdeveloper.tiktok.messages.WebcastRoomPinMessage;
|
import io.github.jwdeveloper.tiktok.messages.WebcastRoomPinMessage;
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -32,11 +31,11 @@ public class TikTokCommentEvent extends TikTokHeaderEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public TikTokCommentEvent(WebcastChatMessage msg) {
|
public TikTokCommentEvent(WebcastChatMessage msg) {
|
||||||
super(msg.getHeader());
|
super(msg.getCommon());
|
||||||
user = User.MapOrEmpty(msg.getSender());
|
user = User.MapOrEmpty(msg.getUser());
|
||||||
text = msg.getComment();
|
text = msg.getContent();
|
||||||
language = msg.getLanguage();
|
language = msg.getContentLanguage();
|
||||||
mentionedUsers = msg.getMentionedUsersList().stream().map(User::new).toList();
|
mentionedUsers = List.of(User.MapOrEmpty(msg.getAtUser()));
|
||||||
pictures = msg.getImagesList().stream().map(e -> new Picture(e.getImage())).toList();
|
pictures = msg.getEmotesListList().stream().map(e -> new Picture(e.getEmote().getImage())).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import lombok.Getter;
|
|||||||
@EventMeta(eventType = EventType.Custom)
|
@EventMeta(eventType = EventType.Custom)
|
||||||
public class TikTokJoinEvent extends TikTokHeaderEvent {
|
public class TikTokJoinEvent extends TikTokHeaderEvent {
|
||||||
private User user;
|
private User user;
|
||||||
|
|
||||||
private final Long totalViewers;
|
private final Long totalViewers;
|
||||||
|
|
||||||
public TikTokJoinEvent(WebcastSocialMessage msg) {
|
public TikTokJoinEvent(WebcastSocialMessage msg) {
|
||||||
|
|||||||
@@ -2,9 +2,15 @@ package io.github.jwdeveloper.tiktok.listener;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You can dynamically add or removing TikTokEventListener
|
||||||
|
*
|
||||||
|
* @see TikTokEventListener
|
||||||
|
*
|
||||||
|
*/
|
||||||
public interface ListenersManager
|
public interface ListenersManager
|
||||||
{
|
{
|
||||||
List<TikTokEventListener> getBindingModels();
|
List<TikTokEventListener> getListeners();
|
||||||
void addListener(TikTokEventListener listener);
|
void addListener(TikTokEventListener listener);
|
||||||
|
|
||||||
void removeListener(TikTokEventListener listener);
|
void removeListener(TikTokEventListener listener);
|
||||||
|
|||||||
@@ -1,5 +1,51 @@
|
|||||||
package io.github.jwdeveloper.tiktok.listener;
|
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
|
public interface TikTokEventListener
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,25 @@ import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public interface GiftManager
|
public interface GiftManager {
|
||||||
{
|
|
||||||
|
/**
|
||||||
|
* 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<Integer, TikTokGiftInfo> getGiftsInfo();
|
Map<Integer, TikTokGiftInfo> 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<GiftId, TikTokGift> getActiveGifts();
|
Map<GiftId, TikTokGift> getActiveGifts();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,34 @@
|
|||||||
package io.github.jwdeveloper.tiktok.live;
|
package io.github.jwdeveloper.tiktok.live;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
|
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
|
||||||
|
import io.github.jwdeveloper.tiktok.listener.TikTokEventListener;
|
||||||
|
|
||||||
public interface LiveClient {
|
public interface LiveClient {
|
||||||
|
|
||||||
// Connects to the live stream.
|
/**
|
||||||
|
* Connects to the live stream.
|
||||||
|
*/
|
||||||
void connect();
|
void connect();
|
||||||
|
|
||||||
// Disconnects the connection.
|
/**
|
||||||
|
* Disconnects the connection.
|
||||||
|
*/
|
||||||
void disconnect();
|
void disconnect();
|
||||||
|
|
||||||
// Gets the meta information about all gifts.
|
|
||||||
|
/**
|
||||||
|
* Get information about gifts
|
||||||
|
*/
|
||||||
GiftManager getGiftManager();
|
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();
|
LiveRoomInfo getRoomInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manage TikTokEventListener
|
||||||
|
* @see TikTokEventListener
|
||||||
|
*/
|
||||||
ListenersManager getListenersManager();
|
ListenersManager getListenersManager();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ public interface LiveRoomInfo
|
|||||||
int getViewersCount();
|
int getViewersCount();
|
||||||
String getRoomId();
|
String getRoomId();
|
||||||
String getUserName();
|
String getUserName();
|
||||||
|
ConnectionState getConnectionState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1348,19 +1348,57 @@ message ModerationData {
|
|||||||
|
|
||||||
// Comment sent by User
|
// Comment sent by User
|
||||||
message WebcastChatMessage {
|
message WebcastChatMessage {
|
||||||
MessageHeader header = 1;
|
Common common = 1;
|
||||||
User sender = 2; // User who sent message
|
User user = 2;
|
||||||
string comment = 3; // Text for Chat-Message
|
string content = 3;
|
||||||
uint64 data1 = 11;
|
bool visibleToSender = 4;
|
||||||
repeated User mentionedUsers = 12; // Users mentioned in comment
|
Image backgroundImage = 5;
|
||||||
repeated ChatImage images = 13;
|
string fullScreenTextColor = 6;
|
||||||
string language = 14; // Language for sender
|
Image backgroundImageV2 = 7;
|
||||||
DataContainer chatData = 18;
|
Image giftImage = 10;
|
||||||
repeated ModerationData moderationData = 19;
|
int32 inputType = 11;
|
||||||
|
User atUser = 12;
|
||||||
|
repeated EmoteWithIndex emotesList = 13;
|
||||||
|
string contentLanguage = 14;
|
||||||
|
int32 quickChatScene = 16;
|
||||||
|
int32 communityFlaggedStatus = 17;
|
||||||
|
|
||||||
message ChatImage {
|
// @EmoteWithIndex
|
||||||
uint64 data1 = 1;
|
// proto.webcast.im.ChatMessage
|
||||||
Image Image = 2;
|
// 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class TikTokGiftManager implements GiftManager {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final Map<Integer, TikTokGiftInfo> giftsInfo;
|
private final Map<Integer, TikTokGiftInfo> giftsInfo;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final Map<GiftId, TikTokGift> activeGifts;
|
private final Map<GiftId, TikTokGift> activeGifts;
|
||||||
|
|
||||||
|
|||||||
@@ -108,12 +108,11 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
|
|
||||||
if (matcher.find())
|
if (matcher.find())
|
||||||
{
|
{
|
||||||
var value = matcher.group(0);
|
var value = matcher.group(1);
|
||||||
var number = Integer.parseInt(value);
|
var number = Integer.parseInt(value);
|
||||||
return new TikTokShareEvent(message, number);
|
return new TikTokShareEvent(message, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return switch (socialType) {
|
return switch (socialType) {
|
||||||
case SocialTypes.LikeType -> new TikTokLikeEvent(message);
|
case SocialTypes.LikeType -> new TikTokLikeEvent(message);
|
||||||
case SocialTypes.FollowType -> new TikTokFollowEvent(message);
|
case SocialTypes.FollowType -> new TikTokFollowEvent(message);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class TikTokListenersManager implements ListenersManager {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TikTokEventListener> getBindingModels() {
|
public List<TikTokEventListener> getListeners() {
|
||||||
return bindingModels.stream().map(ListenerBindingModel::getListener).toList();
|
return bindingModels.stream().map(ListenerBindingModel::getListener).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
FUNDING.yml
Normal file
3
FUNDING.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
github: [jwdeveloper]
|
||||||
|
patreon: jwdeveloper
|
||||||
|
custom: ["https://www.buymeacoffee.com/jwdev"]
|
||||||
@@ -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.TikTokCommentEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.TikTokGiftMessageEvent;
|
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.listener.TikTokEventListener;
|
||||||
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||||
|
|
||||||
@@ -34,6 +35,11 @@ public class ListenerExample
|
|||||||
public static class CustomListener implements TikTokEventListener
|
public static class CustomListener implements TikTokEventListener
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@TikTokEventHandler
|
||||||
|
public void onLike(LiveClient liveClient, TikTokLikeEvent event)
|
||||||
|
{
|
||||||
|
System.out.println(event.toString());
|
||||||
|
}
|
||||||
|
|
||||||
@TikTokEventHandler
|
@TikTokEventHandler
|
||||||
public void onError(LiveClient liveClient, TikTokErrorEvent event)
|
public void onError(LiveClient liveClient, TikTokErrorEvent event)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class Main {
|
|||||||
{
|
{
|
||||||
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(5));
|
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(5));
|
||||||
clientSettings.setRetryOnConnectionFailure(true);
|
clientSettings.setRetryOnConnectionFailure(true);
|
||||||
|
clientSettings.setDownloadGiftInfo(true);
|
||||||
})
|
})
|
||||||
.onConnected(Main::onConnected)
|
.onConnected(Main::onConnected)
|
||||||
.onDisconnected(Main::onDisconnected)
|
.onDisconnected(Main::onDisconnected)
|
||||||
@@ -29,10 +30,6 @@ public class Main {
|
|||||||
.onLike(Main::onLike)
|
.onLike(Main::onLike)
|
||||||
.onGiftMessage(Main::onGiftMessage)
|
.onGiftMessage(Main::onGiftMessage)
|
||||||
.onEmote(Main::onEmote)
|
.onEmote(Main::onEmote)
|
||||||
.onEvent((liveClient, event) ->
|
|
||||||
{
|
|
||||||
|
|
||||||
})
|
|
||||||
.onError((_client, error) ->
|
.onError((_client, error) ->
|
||||||
{
|
{
|
||||||
error.getException().printStackTrace();
|
error.getException().printStackTrace();
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package io.github.jwdeveloper.tiktok.tools.collector;
|
package io.github.jwdeveloper.tiktok.tools.collector;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.TikTokLive;
|
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.exceptions.TikTokLiveMessageException;
|
||||||
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
|
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
|
||||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.ExceptionInfoModel;
|
import io.github.jwdeveloper.tiktok.tools.collector.tables.ExceptionInfoModel;
|
||||||
@@ -13,9 +12,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Main {
|
public class RunCollector {
|
||||||
|
|
||||||
//https://protobuf-decoder.netlify.app/
|
//https://protobuf-decoder.netlify.app/
|
||||||
|
//https://streamdps.com/tiktok-widgets/gifts/
|
||||||
/*
|
/*
|
||||||
mia_tattoo
|
mia_tattoo
|
||||||
moniczkka
|
moniczkka
|
||||||
@@ -25,8 +25,6 @@ public class Main {
|
|||||||
public static List<String> ignoredEvents;
|
public static List<String> ignoredEvents;
|
||||||
|
|
||||||
public static void main(String[] args) throws SQLException {
|
public static void main(String[] args) throws SQLException {
|
||||||
|
|
||||||
|
|
||||||
ignoredEvents = new ArrayList<>();
|
ignoredEvents = new ArrayList<>();
|
||||||
//ignoredEvents = List.of("TikTokJoinEvent","TikTokLikeEvent");
|
//ignoredEvents = List.of("TikTokJoinEvent","TikTokLikeEvent");
|
||||||
|
|
||||||
@@ -34,27 +32,26 @@ public class Main {
|
|||||||
var db = new TikTokDatabase("test");
|
var db = new TikTokDatabase("test");
|
||||||
db.init();
|
db.init();
|
||||||
|
|
||||||
|
var errors = db.selectErrors();
|
||||||
|
|
||||||
var users = new ArrayList<String>();
|
var users = new ArrayList<String>();
|
||||||
// users.add("mia_tattoo");
|
// users.add("mia_tattoo");
|
||||||
// users.add("moniczkka");
|
// users.add("moniczkka");
|
||||||
// users.add("besin1276");
|
// users.add("besin1276");
|
||||||
users.add("jackwoln");
|
users.add("evequinte96");
|
||||||
for(var user : users)
|
for (var user : users) {
|
||||||
{
|
|
||||||
runTikTokLiveInstance(user, db);
|
runTikTokLiveInstance(user, db);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase)
|
private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase) {
|
||||||
{
|
|
||||||
|
|
||||||
TikTokLive.newClient(tiktokUser)
|
TikTokLive.newClient(tiktokUser)
|
||||||
.onWebsocketMessage((liveClient, event) ->
|
.onWebsocketMessage((liveClient, event) ->
|
||||||
{
|
{
|
||||||
var eventName = event.getEvent().getClass().getSimpleName();
|
var eventName = event.getEvent().getClass().getSimpleName();
|
||||||
|
|
||||||
if(ignoredEvents.contains(eventName))
|
if (ignoredEvents.contains(eventName)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,26 +70,26 @@ public class Main {
|
|||||||
{
|
{
|
||||||
var exception = event.getException();
|
var exception = event.getException();
|
||||||
var exceptionContent = ExceptionInfoModel.getStackTraceAsString(exception);
|
var exceptionContent = ExceptionInfoModel.getStackTraceAsString(exception);
|
||||||
var builder = TikTokErrorModel.builder();
|
var errorModel = new TikTokErrorModel();
|
||||||
if (exception instanceof TikTokLiveMessageException ex) {
|
if (exception instanceof TikTokLiveMessageException ex) {
|
||||||
builder.hostName(tiktokUser)
|
errorModel.setHostName(tiktokUser);
|
||||||
.errorName(ex.messageName())
|
errorModel.setErrorName(ex.messageName());
|
||||||
.errorType("error-message")
|
errorModel.setErrorType("error-message");
|
||||||
.exceptionContent(exceptionContent)
|
errorModel.setExceptionContent(exceptionContent);
|
||||||
.message(ex.messageToBase64())
|
errorModel.setMessage(ex.messageToBase64());
|
||||||
.response(ex.webcastResponseToBase64());
|
errorModel.setResponse(ex.webcastResponseToBase64());
|
||||||
} else {
|
} else {
|
||||||
builder.hostName(tiktokUser)
|
errorModel.setHostName(tiktokUser);
|
||||||
.errorName(exception.getClass().getSimpleName())
|
errorModel.setErrorName(exception.getClass().getSimpleName());
|
||||||
.errorType("error-system")
|
errorModel.setErrorType("error-system");
|
||||||
.exceptionContent(exceptionContent)
|
errorModel.setExceptionContent(exceptionContent);
|
||||||
.message("")
|
errorModel.setMessage("");
|
||||||
.response("");
|
errorModel.setResponse("");
|
||||||
}
|
}
|
||||||
|
|
||||||
var error = builder.build();
|
|
||||||
tikTokDatabase.insertError(error);
|
tikTokDatabase.insertError(errorModel);
|
||||||
System.out.println("ERROR: "+error.getErrorName());
|
System.out.println("ERROR: " + errorModel.getErrorName());
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
|
|
||||||
})
|
})
|
||||||
@@ -5,11 +5,11 @@ import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
|
|||||||
import org.jdbi.v3.core.Jdbi;
|
import org.jdbi.v3.core.Jdbi;
|
||||||
import org.jdbi.v3.sqlobject.SqlObjectPlugin;
|
import org.jdbi.v3.sqlobject.SqlObjectPlugin;
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TikTokDatabase
|
public class TikTokDatabase
|
||||||
{
|
{
|
||||||
@@ -24,12 +24,13 @@ public class TikTokDatabase
|
|||||||
public void init() throws SQLException {
|
public void init() throws SQLException {
|
||||||
var jdbcUrl ="jdbc:sqlite:"+database+".db";
|
var jdbcUrl ="jdbc:sqlite:"+database+".db";
|
||||||
var connection = DriverManager.getConnection(jdbcUrl);
|
var connection = DriverManager.getConnection(jdbcUrl);
|
||||||
Jdbi jdbi = Jdbi.create(jdbcUrl)
|
var jdbi = Jdbi.create(jdbcUrl)
|
||||||
.installPlugin(new SqlObjectPlugin());
|
.installPlugin(new SqlObjectPlugin());
|
||||||
jdbi.useHandle(handle -> {
|
jdbi.useHandle(handle -> {
|
||||||
handle.execute(SqlConsts.CREATE_MESSAGES_TABLE);
|
handle.execute(SqlConsts.CREATE_MESSAGES_TABLE);
|
||||||
handle.execute(SqlConsts.CREATE_ERROR_TABLE);
|
handle.execute(SqlConsts.CREATE_ERROR_TABLE);
|
||||||
});
|
});
|
||||||
|
// jdbi.registerRowMapper(new TikTokErrorModelMapper());
|
||||||
messagesTable = jdbi.onDemand(TikTokMessageModelDAO.class);
|
messagesTable = jdbi.onDemand(TikTokMessageModelDAO.class);
|
||||||
errorTable = jdbi.onDemand(TikTokErrorModelDAO.class);
|
errorTable = jdbi.onDemand(TikTokErrorModelDAO.class);
|
||||||
}
|
}
|
||||||
@@ -47,4 +48,9 @@ public class TikTokDatabase
|
|||||||
message.setCreatedAt(dateFormat.format(new Date()));
|
message.setCreatedAt(dateFormat.format(new Date()));
|
||||||
errorTable.insertTikTokMessage(message);
|
errorTable.insertTikTokMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<TikTokErrorModel> selectErrors()
|
||||||
|
{
|
||||||
|
return errorTable.selectErrors();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,21 @@ package io.github.jwdeveloper.tiktok.tools.collector.db;
|
|||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
|
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.customizer.BindBean;
|
||||||
|
import org.jdbi.v3.sqlobject.statement.SqlQuery;
|
||||||
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
|
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@RegisterBeanMapper(TikTokErrorModel.class)
|
||||||
public interface TikTokErrorModelDAO
|
public interface TikTokErrorModelDAO
|
||||||
{
|
{
|
||||||
@SqlUpdate("INSERT INTO TikTokErrorModel (hostName, errorName, errorType, exceptionContent, message, response, createdAt) " +
|
@SqlUpdate("INSERT INTO TikTokErrorModel (hostName, errorName, errorType, exceptionContent, message, response, createdAt) " +
|
||||||
"VALUES (:hostName, :errorName, :errorType, :exceptionContent, :message, :response, :createdAt)")
|
"VALUES (:hostName, :errorName, :errorType, :exceptionContent, :message, :response, :createdAt)")
|
||||||
void insertTikTokMessage(@BindBean TikTokErrorModel message);
|
void insertTikTokMessage(@BindBean TikTokErrorModel message);
|
||||||
|
|
||||||
|
@SqlQuery("SELECT * FROM TikTokErrorModel")
|
||||||
|
List<TikTokErrorModel> selectErrors();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
||||||
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
|
||||||
public class TikTokErrorModel
|
public class TikTokErrorModel
|
||||||
{
|
{
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package io.github.jwdeveloper.tiktok.tools.collector.tables;
|
|||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
|
|||||||
@@ -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.<TikTokErrorEvent>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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,12 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>Tools-ReadmeGenerator</artifactId>
|
<artifactId>Tools-ReadmeGenerator</artifactId>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>16</maven.compiler.source>
|
<maven.compiler.source>16</maven.compiler.source>
|
||||||
<maven.compiler.target>16</maven.compiler.target>
|
<maven.compiler.target>16</maven.compiler.target>
|
||||||
@@ -24,5 +29,11 @@
|
|||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.jwdeveloper.Descrabble</groupId>
|
||||||
|
<artifactId>Descrabble-Full</artifactId>
|
||||||
|
<version>0.0.7-Release</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
@@ -14,10 +14,7 @@ public class ReadmeGenerator
|
|||||||
var template = FilesUtility.getFileFromResource(Main.class,"template.md");
|
var template = FilesUtility.getFileFromResource(Main.class,"template.md");
|
||||||
var variables = new HashMap<String,Object>();
|
var variables = new HashMap<String,Object>();
|
||||||
|
|
||||||
var pomPath = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\Tools-ReadmeGenerator\\pom.xml";
|
variables.put("version", getCurrentVersion());
|
||||||
|
|
||||||
variables.put("version", getCurrentVersion(pomPath));
|
|
||||||
|
|
||||||
|
|
||||||
var exampleCodePath = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\TestApplication\\src\\main\\java\\io\\github\\jwdeveloper\\tiktok\\SimpleExample.java";
|
var exampleCodePath = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\TestApplication\\src\\main\\java\\io\\github\\jwdeveloper\\tiktok\\SimpleExample.java";
|
||||||
variables.put("Code-Example", getCodeExample(exampleCodePath));
|
variables.put("Code-Example", getCodeExample(exampleCodePath));
|
||||||
@@ -39,23 +36,11 @@ public class ReadmeGenerator
|
|||||||
FilesUtility.saveFile(outputPath, template);
|
FilesUtility.saveFile(outputPath, template);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentVersion(String path)
|
public String getCurrentVersion()
|
||||||
{
|
{
|
||||||
var content = FilesUtility.loadFileContent(path);
|
var version = System.getenv("version");;
|
||||||
var pattern = "<version>(.*?)<\\/version>";
|
|
||||||
|
|
||||||
// Create a Pattern object
|
return version == null?"NOT_FOUND":version;
|
||||||
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";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCodeExample(String path)
|
public String getCodeExample(String path)
|
||||||
|
|||||||
1
pom.xml
1
pom.xml
@@ -48,6 +48,7 @@
|
|||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
<version>3.5.0</version> <!-- Use the latest version -->
|
<version>3.5.0</version> <!-- Use the latest version -->
|
||||||
<executions>
|
<executions>
|
||||||
|
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
<goals>
|
<goals>
|
||||||
|
|||||||
Reference in New Issue
Block a user