Compare commits

...

84 Commits

Author SHA1 Message Date
GitHub Action
e6dcc8f5fd Update version in pom.xml 2023-09-07 14:00:03 +00:00
JW
d87506da88 Bugs:
TikTokEventListener method with parameter TikTokEvent was invalid
2023-09-07 15:58:25 +02:00
GitHub Action
084e787838 Update version in pom.xml 2023-09-07 13:51:38 +00:00
JW
ff9e75505d Bugs:
TikTokEventListener method with parameter TikTokEvent was invalid
2023-09-07 15:49:45 +02:00
GitHub Action
08379994fd Update version in pom.xml 2023-09-07 13:12:35 +00:00
GitHub Action
cc871c70f6 Update version in pom.xml 2023-09-07 12:56:38 +00:00
JW
32294cc3ec Merge remote-tracking branch 'origin/master' 2023-09-07 14:55:02 +02:00
JW
cea19abda7 Bugs:
Method for listeners was throwing exception
  TikTokListenersManager.removeListener() was not working

- fix pom
2023-09-07 14:54:57 +02:00
JW
30117917de Update maven-publish.yml 2023-09-07 14:54:33 +02:00
JW
11da8bf009 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	README.md
2023-09-07 14:52:01 +02:00
JW
97f57912ad Bugs:
Method for listeners was throwing exception
  TikTokListenersManager.removeListener() was not working
2023-09-07 14:51:51 +02:00
JW
e2ccfee399 Update README.md 2023-09-07 03:25:57 +02:00
GitHub Action
edba573ecc Update version in pom.xml 2023-09-07 01:25:21 +00:00
JW
d61697dbff Fixing Pom files 2023-09-07 03:23:40 +02:00
JW
daf8242f6e Merge remote-tracking branch 'origin/master'
# Conflicts:
#	README.md
2023-09-07 03:19:35 +02:00
JW
4a157143ec Changes:
`TikTokEventListener` new method of listening events
   see it at TestApplication/ListenerExample.java

Bugs:
 - Fixed bug: Websocket was sending ping after it was closed
2023-09-07 03:19:25 +02:00
JW
defebc92ce Update README.md 2023-09-04 12:09:39 +02:00
GitHub Action
c267392888 Update version in pom.xml 2023-09-04 10:07:55 +00:00
JW
818c4cb364 Update maven-publish.yml 2023-09-04 12:06:33 +02:00
JW
911e2b12a5 Merge remote-tracking branch 'origin/master' 2023-09-04 12:05:19 +02:00
JW
1aff710523 Changes:
`onWebsocketMessage()` TikTokWebsocketMessageEvent new event that is
   triggered when new ProtocolBuffer message come from TikTok server.
   Should be mainly use for debuging purpose

Bugs:
 - Fixed bug: WebcastSocialMessage was always triggering `TikTokShareEvent` events such as `TikTokLikeEvent`, `TikTokFollowEvent`, `TikTokShareEvent`, `TikTokJoinEvent` was ignored

 - Fixed bug: Websocket was disconnecting when there was no incoming events for the while. Fixed by implementing background loop that pinging TikTok server every few ms.

 - Fixed bug: Disconnect method was not working
2023-09-04 12:05:13 +02:00
JW
c0f8e6d904 Update README.md 2023-09-04 11:41:33 +02:00
JW
b059afd621 Update README.md 2023-08-31 00:22:45 +02:00
JW
1275878822 Merge pull request #3 from isaackogan/patch-1
Update README.md
2023-08-30 22:39:44 +02:00
Isaac Kogan
761f3ab633 Update README.md 2023-08-30 15:58:50 -04:00
Jacek Wolniewicz
66def92316 quick fix 2023-08-30 21:50:25 +02:00
Jacek Wolniewicz
cc85d7c124 Changes:
- New event `onSuccessResponseMapping`
  triggered when Webcast.Message was  successfully mapped to TikTokEvent

- New Project Tools-collector:
  Tool generates instance of SqlLite
  database and collect to it both to
 events and exceptions occurred while TikTokLive client was running
2023-08-30 21:47:57 +02:00
Jacek Wolniewicz
384cfade5a Changes:
- New event `onSuccessResponseMapping`
  triggered when Webcast.Message was  successfully mapped to TikTokEvent

- New Project Tools-collector:
  Tool generates instance of SqlLite
  database and collect to it both to
 events and exceptions occurred while TikTokLive client was running
2023-08-30 21:47:45 +02:00
JW
483dceadcf Update README.md 2023-08-27 14:23:25 +02:00
JW
5f8cba5126 Update README.md 2023-08-26 03:42:09 +02:00
JW
f9966c9a5f Update README.md 2023-08-26 01:34:43 +02:00
JW
48a79736ad Update README.md 2023-08-26 01:34:19 +02:00
JW
eb82d0df78 Update README.md 2023-08-25 21:03:51 +02:00
GitHub Action
4ed821925d Update version in pom.xml 2023-08-25 19:03:24 +00:00
JW
6e9244aa67 Changes:
- Fixed bug: WebcastSocialMessage was always triggering `TikTokShareEvent` events such as `TikTokLikeEvent`, `TikTokFollowEvent`, `TikTokShareEvent`, `TikTokJoinEvent` was ignored
2023-08-25 21:01:56 +02:00
JW
fadb1ab267 changeing client name 2023-08-24 22:37:56 +02:00
JW
4273375eb9 Update README.md 2023-08-24 16:51:04 +02:00
JW
3daeee6316 Update README.md 2023-08-24 16:45:25 +02:00
GitHub Action
cde38df1b3 Update version in pom.xml 2023-08-24 14:38:53 +00:00
JW
15d6351d65 Changes:
- Fixed bug: library was not working on certain java versions
   due to different WebSocket implementation. Instead of using java websocket api now there is `org.java-websocket`
2023-08-24 16:36:40 +02:00
JW
44ba999b83 Update README.md 2023-08-23 21:56:08 +02:00
JW
5cf0d30962 Update README.md 2023-08-23 21:10:12 +02:00
JW
71ebc6e05e Update README.md 2023-08-23 21:00:37 +02:00
GitHub Action
c6d09927a0 Update version in pom.xml 2023-08-23 18:57:15 +00:00
JW
f03cb14262 Merge remote-tracking branch 'origin/master' 2023-08-23 20:55:46 +02:00
JW
d9ef60ccad Changes:
- Implementation on all features in `clientSettings`
  - Code optimization
  - More detail exceptions
  - Downloading gifts
2023-08-23 20:55:40 +02:00
JW
6fb89e72d4 Update README.md 2023-08-22 21:10:34 +02:00
JW
230764ed6a Update README.md 2023-08-22 21:08:38 +02:00
JW
b9a4fb193e Update README.md 2023-08-22 21:03:55 +02:00
JW
af209fc2ca Update README.md 2023-08-22 21:00:16 +02:00
JW
74bfe0b9e7 Merge remote-tracking branch 'origin/master' 2023-08-22 20:58:50 +02:00
JW
3545167873 Update example project 2023-08-22 20:58:45 +02:00
JW
c22483043d Update README.md 2023-08-22 20:51:17 +02:00
GitHub Action
8155d49366 Update version in pom.xml 2023-08-22 18:49:05 +00:00
JW
321b7c0eda Merge remote-tracking branch 'origin/master' 2023-08-22 20:47:33 +02:00
JW
26c7db8f99 Fix messages
- WebcastSocialMessage
  - ImDeleteMessage
2023-08-22 20:47:27 +02:00
JW
5f7ead2f05 Update README.md 2023-08-22 20:01:05 +02:00
GitHub Action
dffae3a521 Update version in pom.xml 2023-08-22 18:00:21 +00:00
JW
6254443755 Merge remote-tracking branch 'origin/master' 2023-08-22 19:58:51 +02:00
JW
c001eacbce Remove old test 2023-08-22 19:58:46 +02:00
JW
1bbb704d14 Update README.md 2023-08-22 19:54:56 +02:00
JW
8c3a5c6627 Remove old test 2023-08-22 19:54:10 +02:00
JW
470b154c5e Merge remote-tracking branch 'origin/master' 2023-08-22 19:53:39 +02:00
JW
2391b12598 Fix Message parsing for
- LikeMessage
- MessageWebcastGiftMessage
- MessageWebcastChatMessage
2023-08-22 19:53:33 +02:00
JW
cb68050e24 Update README.md 2023-08-22 19:14:46 +02:00
JW
a9e347b8da Update README.md 2023-08-22 17:50:22 +02:00
JW
73823c82ea Update README.md 2023-08-22 17:49:35 +02:00
JW
e0542d39af Update README.md 2023-08-22 17:46:42 +02:00
GitHub Action
d33dab0a98 Update version in pom.xml 2023-08-22 15:40:34 +00:00
JW
32cb1e0d8f Update pom.xml 2023-08-22 17:39:22 +02:00
JW
3210707bce Update maven-publish.yml 2023-08-22 17:39:04 +02:00
JW
e7f9d6e9d5 Update maven-publish.yml 2023-08-22 17:38:48 +02:00
GitHub Action
03001d607d Update version in pom.xml 2023-08-22 15:33:39 +00:00
JW
cbabad0888 Update pom.xml 2023-08-22 17:32:34 +02:00
JW
09c531e9f4 Update maven-publish.yml 2023-08-22 17:32:17 +02:00
GitHub Action
997c8d399e Update version in pom.xml 2023-08-22 15:30:36 +00:00
JW
668f28e357 Update maven-publish.yml 2023-08-22 17:29:30 +02:00
JW
b332c2f5d8 Update pom.xml 2023-08-22 17:27:57 +02:00
GitHub Action
5be113cbc8 Update version in pom.xml 2023-08-22 15:26:05 +00:00
JW
e0287aaa96 Update pom.xml 2023-08-22 17:24:52 +02:00
JW
8e2759cb1e Update maven-publish.yml 2023-08-22 17:23:32 +02:00
JW
fb9a48376b Update README.md 2023-08-22 14:24:20 +02:00
JW
3741351b7b Update README.md 2023-08-22 14:22:55 +02:00
GitHub Action
7eed221bab Update version in pom.xml 2023-08-22 11:55:25 +00:00
160 changed files with 4278 additions and 1548 deletions

View File

@@ -1,4 +1,4 @@
name: Publish Artifacts name: Publish New Version
on: on:
workflow_dispatch: workflow_dispatch:
@@ -32,7 +32,6 @@ jobs:
change_path: "." change_path: "."
short_tags: false short_tags: false
bump_each_commit: false bump_each_commit: false
- name: 2.7 Update version in pom.xml (Release only) - name: 2.7 Update version in pom.xml (Release only)
@@ -74,6 +73,12 @@ jobs:
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 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 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

81
.gitignore vendored
View File

@@ -1,3 +1,82 @@
# Project exclude paths # Project exclude paths
/API/target/ /API/target/
/Client/target/ /Client/target/
*.db
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>TikTokLiveJava</artifactId> <artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId> <groupId>io.github.jwdeveloper.tiktok</groupId>
<version>1.0.0</version> <version>0.0.20-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>API</artifactId> <artifactId>API</artifactId>

View File

@@ -3,6 +3,8 @@ 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.logging.Level; import java.util.logging.Level;
@Data @Data
@@ -10,62 +12,60 @@ public class ClientSettings {
/// <summary> /// <summary>
/// Timeout for Connections /// Timeout for Connections
/// </summary> /// </summary>
private Duration timeout;
private Duration Timeout;
/// <summary>
/// Polling-Interval for Socket-Connection
/// </summary
private Duration PollingInterval;
/// <summary>
/// Proxy for Connection
/// </summary>
// public RotatingProxy Proxy; // public RotatingProxy Proxy;
/// <summary> /// <summary>
/// ISO-Language for Client /// ISO-Language for Client
/// </summary> /// </summary>
private String ClientLanguage; private String clientLanguage;
/// <summary>
/// Size for Buffer for Socket-Connection
/// </summary>
private int SocketBufferSize;
/// <summary> /// <summary>
/// Whether to Retry if Connection Fails /// Whether to Retry if Connection Fails
/// </summary> /// </summary>
private boolean RetryOnConnectionFailure; private boolean retryOnConnectionFailure;
/// <summary>
/// Wait to connect again for selected amount of time
/// </summary>
private Duration retryConnectionTimeout;
/// <summary> /// <summary>
/// Whether to handle Messages received from Room when Connecting /// Whether to handle Messages received from Room when Connecting
/// </summary> /// </summary>
private boolean HandleExistingMessagesOnConnect; private boolean handleExistingMessagesOnConnect;
/// <summary> /// <summary>
/// Whether to download List of Gifts for Room when Connecting /// Whether to download List of Gifts for Room when Connecting
/// </summary> /// </summary>
private boolean DownloadGiftInfo; private boolean downloadGiftInfo;
/// <summary> /// <summary>
/// Whether to print Logs to Console /// Whether to print Logs to Console
/// </summary> /// </summary>
private boolean PrintToConsole; private boolean printToConsole;
/// <summary> /// <summary>
/// LoggingLevel for Logs /// LoggingLevel for Logs
/// </summary> /// </summary>
private Level LogLevel; private Level logLevel;
/// <summary> /// <summary>
/// Whether to print Base64-Data for Messages to Console /// Whether to print Base64-Data for Messages to Console
/// </summary> /// </summary>
private boolean PrintMessageData; private boolean printMessageData;
/// <summary> /// <summary>
/// Whether to check Messages for Unparsed Data /// Tiktok user name
/// </summary> /// </summary>
private boolean CheckForUnparsedData; private String hostName;
/// <summary>
/// Parameters used in requests to tiktok api
/// </summary>
private Map<String, Object> clientParameters;
} }

View File

@@ -39,18 +39,16 @@ public class Constants {
public static ClientSettings DefaultClientSettings() { public static ClientSettings DefaultClientSettings() {
var clientSettings = new ClientSettings(); var clientSettings = new ClientSettings();
clientSettings.setTimeout(Duration.ofSeconds(DEFAULT_TIMEOUT)); clientSettings.setTimeout(Duration.ofSeconds(DEFAULT_TIMEOUT));
clientSettings.setPollingInterval(Duration.ofSeconds(DEFAULT_POLLTIME));
clientSettings.setClientLanguage("en-US"); clientSettings.setClientLanguage("en-US");
clientSettings.setHandleExistingMessagesOnConnect(true); clientSettings.setHandleExistingMessagesOnConnect(true);
clientSettings.setDownloadGiftInfo(true); clientSettings.setDownloadGiftInfo(true);
clientSettings.setRetryOnConnectionFailure(true); clientSettings.setRetryOnConnectionFailure(false);
clientSettings.setSocketBufferSize(500_000); clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1));
clientSettings.setPrintToConsole(true); clientSettings.setPrintToConsole(false);
clientSettings.setLogLevel(Level.ALL); clientSettings.setLogLevel(Level.ALL);
clientSettings.setCheckForUnparsedData(false);
clientSettings.setPrintMessageData(false); clientSettings.setPrintMessageData(false);
clientSettings.setClientParameters(Constants.DefaultClientParams());
return clientSettings; return clientSettings;
} }

View File

@@ -0,0 +1,10 @@
package io.github.jwdeveloper.tiktok.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface EventMeta
{
EventType eventType();
}

View File

@@ -0,0 +1,10 @@
package io.github.jwdeveloper.tiktok.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
public enum EventType
{
Control, Message, Custom
}

View File

@@ -1,4 +0,0 @@
package io.github.jwdeveloper.tiktok.annotations;
public @interface Nullable {
}

View File

@@ -0,0 +1,10 @@
package io.github.jwdeveloper.tiktok.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface TikTokEventHandler
{
}

View File

@@ -3,39 +3,11 @@ package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.messages.*; import io.github.jwdeveloper.tiktok.messages.*;
import lombok.Getter; import lombok.Getter;
/*
Base class for all events
*/
@Getter @Getter
public class TikTokEvent { public abstract class TikTokEvent
private long messageId; {
private long roomId;
private long timeStamp;
public TikTokEvent(MessageHeader header) {
this(header.getMessageId(),header.getRoomId(), header.getTimeStamp1());
}
public TikTokEvent(GiftMessageHeader header) {
this(header.getMessageId(),header.getRoomId(), header.getTimeStamp1());
}
public TikTokEvent(MemberMessageHeader header) {
this(header.getMessageId(),header.getRoomId(), header.getTimeStamp1());
}
public TikTokEvent(SocialMessageHeader header) {
this(header.getMessageId(),header.getRoomId(), header.getTimeStamp1());
}
public TikTokEvent(LikeMessageHeader header) {
this(header.getMessageId(),header.getRoomId(), header.getTimeStamp1());
}
public TikTokEvent(long messageId, long roomId, long timeStamp) {
this.messageId = messageId;
this.roomId = roomId;
this.timeStamp = timeStamp;
}
public TikTokEvent() {
}
} }

View File

@@ -2,94 +2,94 @@ package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.events.messages.*; import io.github.jwdeveloper.tiktok.events.messages.*;
import java.util.function.Consumer;
public interface TikTokEventBuilder<T> { public interface TikTokEventBuilder<T> {
T onUnhandledSocial(Consumer<TikTokUnhandledSocialEvent> event); T onUnhandledSocial(TikTokEventConsumer<TikTokUnhandledSocialEvent> event);
T onLinkMicFanTicket(Consumer<TikTokLinkMicFanTicketEvent> event); T onLinkMicFanTicket(TikTokEventConsumer<TikTokLinkMicFanTicketEvent> event);
T onEnvelope(Consumer<TikTokEnvelopeEvent> event); T onEnvelope(TikTokEventConsumer<TikTokEnvelopeEvent> event);
T onShopMessage(Consumer<TikTokShopMessageEvent> event); T onShopMessage(TikTokEventConsumer<TikTokShopMessageEvent> event);
T onDetectMessage(Consumer<TikTokDetectMessageEvent> event); T onDetectMessage(TikTokEventConsumer<TikTokDetectMessageEvent> event);
T onLinkLayerMessage(Consumer<TikTokLinkLayerMessageEvent> event); T onLinkLayerMessage(TikTokEventConsumer<TikTokLinkLayerMessageEvent> event);
T onConnected(Consumer<TikTokConnectedEvent> event); T onConnected(TikTokEventConsumer<TikTokConnectedEvent> event);
T onCaption(Consumer<TikTokCaptionEvent> event); T onCaption(TikTokEventConsumer<TikTokCaptionEvent> event);
T onQuestion(Consumer<TikTokQuestionEvent> event); T onQuestion(TikTokEventConsumer<TikTokQuestionEvent> event);
T onRoomPinMessage(Consumer<TikTokRoomPinMessageEvent> event); T onRoomPinMessage(TikTokEventConsumer<TikTokRoomPinMessageEvent> event);
T onRoomMessage(Consumer<TikTokRoomMessageEvent> event); T onRoomMessage(TikTokEventConsumer<TikTokRoomMessageEvent> event);
T onLivePaused(Consumer<TikTokLivePausedEvent> event); T onLivePaused(TikTokEventConsumer<TikTokLivePausedEvent> event);
T onLike(Consumer<TikTokLikeEvent> event); T onLike(TikTokEventConsumer<TikTokLikeEvent> event);
T onLinkMessage(Consumer<TikTokLinkMessageEvent> event); T onLinkMessage(TikTokEventConsumer<TikTokLinkMessageEvent> event);
T onBarrageMessage(Consumer<TikTokBarrageMessageEvent> event); T onBarrageMessage(TikTokEventConsumer<TikTokBarrageMessageEvent> event);
T onGiftMessage(Consumer<TikTokGiftMessageEvent> event); T onGiftMessage(TikTokEventConsumer<TikTokGiftMessageEvent> event);
T onLinkMicArmies(Consumer<TikTokLinkMicArmiesEvent> event); T onLinkMicArmies(TikTokEventConsumer<TikTokLinkMicArmiesEvent> event);
T onEmote(Consumer<TikTokEmoteEvent> event); T onEmote(TikTokEventConsumer<TikTokEmoteEvent> event);
T onUnauthorizedMember(Consumer<TikTokUnauthorizedMemberEvent> event); T onUnauthorizedMember(TikTokEventConsumer<TikTokUnauthorizedMemberEvent> event);
T onInRoomBanner(Consumer<TikTokInRoomBannerEvent> event); T onInRoomBanner(TikTokEventConsumer<TikTokInRoomBannerEvent> event);
T onLinkMicMethod(Consumer<TikTokLinkMicMethodEvent> event); T onLinkMicMethod(TikTokEventConsumer<TikTokLinkMicMethodEvent> event);
T onSubscribe(Consumer<TikTokSubscribeEvent> event); T onSubscribe(TikTokEventConsumer<TikTokSubscribeEvent> event);
T onPollMessage(Consumer<TikTokPollMessageEvent> event); T onPollMessage(TikTokEventConsumer<TikTokPollMessageEvent> event);
T onFollow(Consumer<TikTokFollowEvent> event); T onFollow(TikTokEventConsumer<TikTokFollowEvent> event);
T onRoomViewerData(Consumer<TikTokRoomViewerDataEvent> event); T onRoomViewerData(TikTokEventConsumer<TikTokRoomViewerDataEvent> event);
T onGoalUpdate(Consumer<TikTokGoalUpdateEvent> event); T onGoalUpdate(TikTokEventConsumer<TikTokGoalUpdateEvent> event);
T onComment(Consumer<TikTokCommentEvent> event); T onComment(TikTokEventConsumer<TikTokCommentEvent> event);
T onRankUpdate(Consumer<TikTokRankUpdateEvent> event); T onRankUpdate(TikTokEventConsumer<TikTokRankUpdateEvent> event);
T onIMDelete(Consumer<TikTokIMDeleteEvent> event); T onIMDelete(TikTokEventConsumer<TikTokIMDeleteEvent> event);
T onLiveEnded(Consumer<TikTokLiveEndedEvent> event); T onLiveEnded(TikTokEventConsumer<TikTokLiveEndedEvent> event);
T onError(Consumer<TikTokErrorEvent> event); T onError(TikTokEventConsumer<TikTokErrorEvent> event);
T onUnhandled(Consumer<TikTokUnhandledEvent> event); T onUnhandled(TikTokEventConsumer<TikTokUnhandledWebsocketMessageEvent> event);
T onJoin(Consumer<TikTokJoinEvent> event); T onJoin(TikTokEventConsumer<TikTokJoinEvent> event);
T onRankText(Consumer<TikTokRankTextEvent> event); T onRankText(TikTokEventConsumer<TikTokRankTextEvent> event);
T onShare(Consumer<TikTokShareEvent> event); T onShare(TikTokEventConsumer<TikTokShareEvent> event);
T onUnhandledMember(Consumer<TikTokUnhandledMemberEvent> event); T onUnhandledMember(TikTokEventConsumer<TikTokUnhandledMemberEvent> event);
T onSubNotify(Consumer<TikTokSubNotifyEvent> event); T onSubNotify(TikTokEventConsumer<TikTokSubNotifyEvent> event);
T onLinkMicBattle(Consumer<TikTokLinkMicBattleEvent> event); T onLinkMicBattle(TikTokEventConsumer<TikTokLinkMicBattleEvent> event);
T onDisconnected(Consumer<TikTokDisconnectedEvent> event); T onDisconnected(TikTokEventConsumer<TikTokDisconnectedEvent> event);
T onGiftBroadcast(Consumer<TikTokGiftBroadcastEvent> event); T onGiftBroadcast(TikTokEventConsumer<TikTokGiftBroadcastEvent> event);
T onUnhandledControl(Consumer<TikTokUnhandledControlEvent> event); T onUnhandledControl(TikTokEventConsumer<TikTokUnhandledControlEvent> event);
T onEvent(TikTokEventConsumer<TikTokEvent> event);
T onWebsocketMessage(TikTokEventConsumer<TikTokWebsocketMessageEvent> event);
T onEvent(Consumer<TikTokEvent> event);
} }

View File

@@ -2,7 +2,7 @@ package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveClient;
public interface TikTokLiveEvent<T extends TikTokEvent> public interface TikTokEventConsumer<T extends TikTokEvent>
{ {
void onEvent(LiveClient liveClient, T event); void onEvent(LiveClient liveClient, T event);
} }

View File

@@ -0,0 +1,48 @@
package io.github.jwdeveloper.tiktok.events.base;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.messages.*;
import lombok.Getter;
@Getter
public class TikTokHeaderEvent extends TikTokEvent {
private final long messageId;
private final long roomId;
private final long timeStamp;
public TikTokHeaderEvent(Common header) {
this(header.getMsgId(), header.getRoomId(), header.getCreateTime());
}
public TikTokHeaderEvent(MessageHeader header) {
this(header.getMessageId(), header.getRoomId(), header.getTimeStamp1());
}
public TikTokHeaderEvent(GiftMessageHeader header) {
this(header.getMessageId(), header.getRoomId(), header.getTimeStamp1());
}
public TikTokHeaderEvent(MemberMessageHeader header) {
this(header.getMessageId(), header.getRoomId(), header.getTimeStamp1());
}
public TikTokHeaderEvent(SocialMessageHeader header) {
this(header.getMessageId(), header.getRoomId(), header.getTimeStamp1());
}
public TikTokHeaderEvent(LikeMessageHeader header) {
this(header.getMessageId(), header.getRoomId(), header.getTimeStamp1());
}
public TikTokHeaderEvent(long messageId, long roomId, long timeStamp) {
this.messageId = messageId;
this.roomId = roomId;
this.timeStamp = timeStamp;
}
public TikTokHeaderEvent() {
messageId = 0;
roomId = 0;
timeStamp = 0;
}
}

View File

@@ -0,0 +1,7 @@
package io.github.jwdeveloper.tiktok.events.base;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
public class TikTokLiveClientEvent extends TikTokEvent {
}

View File

@@ -0,0 +1,12 @@
package io.github.jwdeveloper.tiktok.events.base;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class TikTokUnhandledEvent<T> extends TikTokEvent
{
private final T data;
}

View File

@@ -1,29 +1,28 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.BarrageData; import io.github.jwdeveloper.tiktok.events.objects.BarrageData;
import io.github.jwdeveloper.tiktok.events.objects.Picture; 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.WebcastBarrageMessage; import io.github.jwdeveloper.tiktok.messages.WebcastBarrageMessage;
import lombok.Getter; import lombok.Value;
@Getter
public class TikTokBarrageMessageEvent extends TikTokEvent {
private final Picture picture;
private final Picture picture2;
private final Picture picture3;
private final User user;
private final BarrageData barrageData;
@Value
@EventMeta(eventType = EventType.Message)
public class TikTokBarrageMessageEvent extends TikTokHeaderEvent {
Picture picture;
Picture picture2;
Picture picture3;
User user;
BarrageData barrageData;
public TikTokBarrageMessageEvent(WebcastBarrageMessage msg) { public TikTokBarrageMessageEvent(WebcastBarrageMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
picture = new Picture(msg.getPicture()); picture = new Picture(msg.getImage());
picture2 = new Picture(msg.getPicture2()); picture2 = new Picture(msg.getImage2());
picture3 = new Picture(msg.getPicture3()); picture3 = new Picture(msg.getImage3());
user = new User(msg.getUserData().getUser()); user = new User(msg.getUserData().getUser());
barrageData = new BarrageData(msg.getMessage().getEventType(), barrageData = new BarrageData(msg.getMessage().getEventType(),
msg.getMessage().getLabel(), msg.getMessage().getLabel(),

View File

@@ -1,16 +1,19 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastCaptionMessage; import io.github.jwdeveloper.tiktok.messages.WebcastCaptionMessage;
import lombok.Getter; import lombok.Value;
@Getter @Value
public class TikTokCaptionEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private final Long captionTimeStamp; public class TikTokCaptionEvent extends TikTokHeaderEvent {
Long captionTimeStamp;
private final String iSOLanguage; String iSOLanguage;
private final String text; String text;
public TikTokCaptionEvent(WebcastCaptionMessage msg) { public TikTokCaptionEvent(WebcastCaptionMessage msg) {
super(msg.getHeader()); super(msg.getHeader());

View File

@@ -1,30 +1,30 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Picture; 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.Getter;
import lombok.Value;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Getter @Value
public class TikTokCommentEvent extends TikTokEvent @EventMeta(eventType = EventType.Message)
{ public class TikTokCommentEvent extends TikTokHeaderEvent {
@Nullable User user;
private User user; String text;
private final String text; String language;
private final String language; List<User> mentionedUsers;
private final List<User> mentionedUsers; List<Picture> pictures;
private final List<Picture> pictures;
public TikTokCommentEvent(WebcastRoomPinMessage.RoomPinMessageData data) { public TikTokCommentEvent(WebcastRoomPinMessage.RoomPinMessageData data) {
super(data.getDetails().getRoomId(), data.getDetails().getMessageId(), data.getDetails().getServerTime()); super(data.getDetails().getRoomId(), data.getDetails().getMessageId(), data.getDetails().getServerTime());
if (data.hasSender()) user = User.MapOrEmpty(data.getSender());
user = new User(data.getSender());
text = data.getComment(); text = data.getComment();
language = data.getLanguage(); language = data.getLanguage();
mentionedUsers = new ArrayList<>(); mentionedUsers = new ArrayList<>();
@@ -33,11 +33,10 @@ public class TikTokCommentEvent extends TikTokEvent
public TikTokCommentEvent(WebcastChatMessage msg) { public TikTokCommentEvent(WebcastChatMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
if (msg.hasSender()) user = User.MapOrEmpty(msg.getSender());
user = new User(msg.getSender());
text = msg.getComment(); text = msg.getComment();
language = msg.getLanguage(); language = msg.getLanguage();
mentionedUsers = msg.getMentionedUsersList().stream().map(User::new).toList(); mentionedUsers = msg.getMentionedUsersList().stream().map(User::new).toList();
pictures = msg.getImagesList().stream().map(e -> new Picture(e.getPicture())).toList(); pictures = msg.getImagesList().stream().map(e -> new Picture(e.getImage())).toList();
} }
} }

View File

@@ -1,8 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokLiveClientEvent;
public class TikTokConnectedEvent extends TikTokEvent @EventMeta(eventType = EventType.Control)
public class TikTokConnectedEvent extends TikTokLiveClientEvent
{ {
} }

View File

@@ -1,18 +1,22 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastMsgDetectMessage; import io.github.jwdeveloper.tiktok.messages.WebcastMsgDetectMessage;
import lombok.Getter; import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokDetectMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private final String language; public class TikTokDetectMessageEvent extends TikTokHeaderEvent {
String language;
private final List<Number> data; List<Number> data;
private final List<Number> timings; List<Number> timings;
public TikTokDetectMessageEvent(WebcastMsgDetectMessage msg) { public TikTokDetectMessageEvent(WebcastMsgDetectMessage msg) {
super(msg.getHeader());; super(msg.getHeader());;

View File

@@ -1,6 +1,8 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokLiveClientEvent;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; @EventMeta(eventType = EventType.Control)
public class TikTokDisconnectedEvent extends TikTokLiveClientEvent {
public class TikTokDisconnectedEvent extends TikTokEvent {
} }

View File

@@ -1,25 +1,23 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Picture; 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.WebcastEmoteChatMessage; import io.github.jwdeveloper.tiktok.messages.WebcastEmoteChatMessage;
import lombok.Getter; import lombok.Value;
@Getter @Value
public class TikTokEmoteEvent extends TikTokEvent @EventMeta(eventType = EventType.Message)
{ public class TikTokEmoteEvent extends TikTokHeaderEvent {
@Nullable User user;
private User user; String emoteId;
private final String emoteId; Picture picture;
private final Picture picture;
public TikTokEmoteEvent(WebcastEmoteChatMessage msg) { public TikTokEmoteEvent(WebcastEmoteChatMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
if (msg.hasSender()) { user = User.MapOrEmpty(msg.getSender());
user = new User(msg.getSender());
}
emoteId = msg.getDetails().getId(); emoteId = msg.getDetails().getId();
picture = new Picture(msg.getDetails().getImage().getUrl()); picture = new Picture(msg.getDetails().getImage().getUrl());
} }

View File

@@ -1,14 +1,18 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastEnvelopeMessage; import io.github.jwdeveloper.tiktok.messages.WebcastEnvelopeMessage;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
@Getter @Value
public class TikTokEnvelopeEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private final User user; public class TikTokEnvelopeEvent extends TikTokHeaderEvent {
User user;
public TikTokEnvelopeEvent(WebcastEnvelopeMessage msg) { public TikTokEnvelopeEvent(WebcastEnvelopeMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
user = new User(msg.getUser().getId(), msg.getUser().getUsername()); user = new User(msg.getUser().getId(), msg.getUser().getUsername());

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokLiveClientEvent;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public class TikTokErrorEvent extends TikTokEvent @EventMeta(eventType = EventType.Control)
public class TikTokErrorEvent extends TikTokLiveClientEvent
{ {
private final Throwable exception; private final Throwable exception;
} }

View File

@@ -1,25 +1,22 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage;
import lombok.Getter; import lombok.Value;
@Getter @Value
public class TikTokFollowEvent extends TikTokEvent @EventMeta(eventType = EventType.Custom)
public class TikTokFollowEvent extends TikTokHeaderEvent
{ {
@Nullable User newFollower;
private User newFollower; Long totalFollowers;
private final Long totalFollowers;
public TikTokFollowEvent(WebcastSocialMessage msg) { public TikTokFollowEvent(WebcastSocialMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
if(msg.hasSender()) newFollower = User.MapOrEmpty(msg.getSender());
{
newFollower = new User(msg.getSender());
}
totalFollowers = msg.getTotalFollowers(); totalFollowers = msg.getTotalFollowers();
} }
} }

View File

@@ -1,27 +1,32 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Picture; import io.github.jwdeveloper.tiktok.events.objects.Picture;
import io.github.jwdeveloper.tiktok.messages.WebcastGiftBroadcastMessage; import io.github.jwdeveloper.tiktok.messages.WebcastGiftBroadcastMessage;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
@Getter @Value
public class TikTokGiftBroadcastEvent extends TikTokEvent @EventMeta(eventType = EventType.Message)
public class TikTokGiftBroadcastEvent extends TikTokHeaderEvent
{ {
private final Picture picture; Picture picture;
private final String shortURL; String shortURL;
private final String notifyEventType; String notifyEventType;
private final String notifyLabel; String notifyLabel;
private final String notifyType; String notifyType;
public TikTokGiftBroadcastEvent(WebcastGiftBroadcastMessage msg) public TikTokGiftBroadcastEvent(WebcastGiftBroadcastMessage msg)
{ {
super(msg.getHeader()); super(msg.getHeader());
picture = new Picture(msg.getPicture()); picture = new Picture(msg.getImage());
var data = msg.getData(); var data = msg.getData();
shortURL = data.getUri(); shortURL = data.getUri();
notifyEventType = data.getRoomNotifyMessage().getData().getType(); notifyEventType = data.getRoomNotifyMessage().getData().getType();

View File

@@ -1,40 +1,33 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Gift; import io.github.jwdeveloper.tiktok.events.objects.Gift;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastGiftMessage; import io.github.jwdeveloper.tiktok.messages.WebcastGiftMessage;
import lombok.Getter; import lombok.Value;
@Getter @Value
public class TikTokGiftMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private final Gift gift; public class TikTokGiftMessageEvent extends TikTokHeaderEvent {
@Nullable Gift gift;
private User sender; User sender;
String purchaseId;
String receipt;
Long comboCount;
Boolean streakFinished;
Long streakIndex;
private final String purchaseId; public TikTokGiftMessageEvent(WebcastGiftMessage msg) {
super(msg.getCommon());
private final String receipt; gift = new Gift(msg.getGift());
sender = User.MapOrEmpty(msg.getUser());
private final Integer amount; purchaseId = msg.getLogId();
receipt = msg.getMonitorExtra();
private final Boolean streakFinished; comboCount = msg.getComboCount();
streakFinished = msg.getRepeatEnd() > 0; //todo check values
private final Integer streakIndex; streakIndex = msg.getRepeatCount();
public TikTokGiftMessageEvent(WebcastGiftMessage msg) {
super(msg.getHeader());;
gift = new Gift(msg.getGiftDetails());
if(msg.hasSender())
{
sender = new User(msg.getSender());
} }
purchaseId = msg.getLogId();
receipt = msg.getReceiptJson();
amount = msg.getAmount();
streakFinished = msg.getRepeatEnd();
streakIndex = msg.getRepeatCount();
}
} }

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Picture; import io.github.jwdeveloper.tiktok.events.objects.Picture;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
@@ -10,7 +13,8 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokGoalUpdateEvent extends TikTokEvent @EventMeta(eventType = EventType.Message)
public class TikTokGoalUpdateEvent extends TikTokHeaderEvent
{ {
private final Long goalId; private final Long goalId;
private final Picture picture; private final Picture picture;
@@ -20,10 +24,10 @@ public class TikTokGoalUpdateEvent extends TikTokEvent
public TikTokGoalUpdateEvent(WebcastGoalUpdateMessage msg) { public TikTokGoalUpdateEvent(WebcastGoalUpdateMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
picture = new Picture(msg.getPicture()); picture = new Picture(msg.getImage());
goalId = msg.getId(); goalId = msg.getId();
eventType = msg.getData().getType(); eventType = msg.getData().getType();
label = msg.getUpdateData().getLabel(); label = msg.getUpdateData().getLabel();
users = msg.getUpdateData().getUsersList().stream().map(u ->new User(u.getId(),u.getNickname(),new Picture(u.getProfilePicture()))).toList(); users = msg.getUpdateData().getUsersList().stream().map(u ->new User(u.getId(),u.getNickname(),new Picture(u.getProfileImage()))).toList();
} }
} }

View File

@@ -1,17 +1,19 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastImDeleteMessage; import io.github.jwdeveloper.tiktok.messages.WebcastImDeleteMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokIMDeleteEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private final String data1; public class TikTokIMDeleteEvent extends TikTokHeaderEvent {
private final String data2; private final byte[] data;
public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) { public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) {
super(msg.getHeader());; super(msg.getHeader());
data1 = msg.getData1(); data = msg.getData().toByteArray();
data2 = msg.getData2(); }
}
} }

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastInRoomBannerMessage; import io.github.jwdeveloper.tiktok.messages.WebcastInRoomBannerMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokInRoomBannerEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private String jSON; public class TikTokInRoomBannerEvent extends TikTokHeaderEvent {
private final String jSON;
public TikTokInRoomBannerEvent(WebcastInRoomBannerMessage msg) { public TikTokInRoomBannerEvent(WebcastInRoomBannerMessage msg) {
super(msg.getHeader());; super(msg.getHeader());;

View File

@@ -1,15 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage;
import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokJoinEvent extends TikTokEvent { @EventMeta(eventType = EventType.Custom)
@Nullable public class TikTokJoinEvent extends TikTokHeaderEvent {
private User user; private User user;
private final Long totalViewers; private final Long totalViewers;

View File

@@ -1,16 +1,17 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastLikeMessage; import io.github.jwdeveloper.tiktok.messages.WebcastLikeMessage;
import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokLikeEvent extends TikTokEvent @EventMeta(eventType = EventType.Custom)
public class TikTokLikeEvent extends TikTokHeaderEvent
{ {
@Nullable
private User sender; private User sender;
private final Integer count; private final Integer count;

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkLayerMessage; import io.github.jwdeveloper.tiktok.messages.WebcastLinkLayerMessage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokLinkLayerMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkLayerMessageEvent extends TikTokHeaderEvent {
private final Long linkId; private final Long linkId;
private final LinkData link1; private final LinkData link1;
private final LinkData link2; private final LinkData link2;

View File

@@ -1,7 +1,8 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMessage; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMessage;
import lombok.Getter; import lombok.Getter;
@@ -9,10 +10,10 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokLinkMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkMessageEvent extends TikTokHeaderEvent {
private final String token; private final String token;
@Nullable
private User user; private User user;
private final List<User> otherUsers; private final List<User> otherUsers;

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.LinkMicArmy; import io.github.jwdeveloper.tiktok.events.objects.LinkMicArmy;
import io.github.jwdeveloper.tiktok.events.objects.Picture; import io.github.jwdeveloper.tiktok.events.objects.Picture;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicArmies; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicArmies;
@@ -9,7 +12,8 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokLinkMicArmiesEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkMicArmiesEvent extends TikTokHeaderEvent {
private final Long battleId; private final Long battleId;
private final Integer battleStatus; private final Integer battleStatus;
@@ -22,7 +26,7 @@ public class TikTokLinkMicArmiesEvent extends TikTokEvent {
super(msg.getHeader()); super(msg.getHeader());
battleId = msg.getId(); battleId = msg.getId();
armies = msg.getBattleItemsList().stream().map(LinkMicArmy::new).toList(); armies = msg.getBattleItemsList().stream().map(LinkMicArmy::new).toList();
picture = new Picture(msg.getPicture()); picture = new Picture(msg.getImage());
battleStatus = msg.getBattleStatus(); battleStatus = msg.getBattleStatus();
} }
} }

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.LinkMicBattleTeam; import io.github.jwdeveloper.tiktok.events.objects.LinkMicBattleTeam;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicBattle; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicBattle;
import lombok.Getter; import lombok.Getter;
@@ -8,7 +11,8 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokLinkMicBattleEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent {
private final Long battleId; private final Long battleId;
private final List<LinkMicBattleTeam> team1; private final List<LinkMicBattleTeam> team1;
private final List<LinkMicBattleTeam> team2; private final List<LinkMicBattleTeam> team2;

View File

@@ -1,11 +1,15 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicFanTicketMethod; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicFanTicketMethod;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokLinkMicFanTicketEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkMicFanTicketEvent extends TikTokHeaderEvent {
private final Long id; private final Long id;
private final Integer data1; private final Integer data1;
private final Integer data2; private final Integer data2;

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.LinkMicMethod; import io.github.jwdeveloper.tiktok.messages.LinkMicMethod;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicMethod; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicMethod;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokLinkMicMethodEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokLinkMicMethodEvent extends TikTokHeaderEvent {
private final String jSON; private final String jSON;
public TikTokLinkMicMethodEvent(WebcastLinkMicMethod msg) { public TikTokLinkMicMethodEvent(WebcastLinkMicMethod msg) {

View File

@@ -1,6 +1,8 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
@EventMeta(eventType = EventType.Custom)
public class TikTokLiveEndedEvent extends TikTokEvent { public class TikTokLiveEndedEvent extends TikTokEvent {
} }

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
@EventMeta(eventType = EventType.Custom)
public class TikTokLivePausedEvent extends TikTokEvent { public class TikTokLivePausedEvent extends TikTokEvent {
} }

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.PollOption; import io.github.jwdeveloper.tiktok.events.objects.PollOption;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastPollMessage; import io.github.jwdeveloper.tiktok.messages.WebcastPollMessage;
@@ -9,7 +12,8 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokPollMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokPollMessageEvent extends TikTokHeaderEvent {
private final Long id; private final Long id;
private final PollOption option1; private final PollOption option1;

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastQuestionNewMessage; import io.github.jwdeveloper.tiktok.messages.WebcastQuestionNewMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokQuestionEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokQuestionEvent extends TikTokHeaderEvent {
private final Long questionId; private final Long questionId;
private final String text; private final String text;

View File

@@ -1,14 +1,18 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastRankTextMessage; import io.github.jwdeveloper.tiktok.messages.WebcastRankTextMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokRankTextEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
private String eventType; public class TikTokRankTextEvent extends TikTokHeaderEvent {
private final String eventType;
private String label; private final String label;
public TikTokRankTextEvent(WebcastRankTextMessage msg) { public TikTokRankTextEvent(WebcastRankTextMessage msg) {

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastHourlyRankMessage; import io.github.jwdeveloper.tiktok.messages.WebcastHourlyRankMessage;
import io.github.jwdeveloper.tiktok.messages.WebcastRankUpdateMessage; import io.github.jwdeveloper.tiktok.messages.WebcastRankUpdateMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokRankUpdateEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokRankUpdateEvent extends TikTokHeaderEvent {
private final String eventType; private final String eventType;
private final String label; private final String label;
@@ -20,10 +24,15 @@ public class TikTokRankUpdateEvent extends TikTokEvent {
var rankData = msg.getData().getRankings(); var rankData = msg.getData().getRankings();
eventType = rankData.getType(); eventType = rankData.getType();
label = rankData.getLabel(); label = rankData.getLabel();
rank = rankData.getDetails(0).getLabel(); if(rankData.getDetailsList().isEmpty())
{
rank = "";
}
else
{
rank = rankData.getDetails(0).getLabel();
}
color = rankData.getColor().getColor(); color = rankData.getColor().getColor();
} }
public TikTokRankUpdateEvent(WebcastRankUpdateMessage msg) { public TikTokRankUpdateEvent(WebcastRankUpdateMessage msg) {
@@ -31,7 +40,14 @@ public class TikTokRankUpdateEvent extends TikTokEvent {
var rankData = msg.getData().getRankData(); var rankData = msg.getData().getRankData();
eventType = rankData.getType(); eventType = rankData.getType();
label = rankData.getLabel(); label = rankData.getLabel();
rank = rankData.getDetails(0).getLabel(); if(rankData.getDetailsList().isEmpty())
{
rank = "";
}
else
{
rank = rankData.getDetails(0).getLabel();
}
color = rankData.getColor().getColor(); color = rankData.getColor().getColor();
} }

View File

@@ -1,7 +1,8 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable; import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.RoomMessage; import io.github.jwdeveloper.tiktok.messages.RoomMessage;
import io.github.jwdeveloper.tiktok.messages.SystemMessage; import io.github.jwdeveloper.tiktok.messages.SystemMessage;
@@ -10,10 +11,9 @@ import io.github.jwdeveloper.tiktok.messages.WebcastRoomMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokRoomMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
@Nullable public class TikTokRoomMessageEvent extends TikTokHeaderEvent {
private User host; private User host;
@Nullable
private String hostLanguage; private String hostLanguage;
private final String message; private final String message;

View File

@@ -1,11 +1,15 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastRoomPinMessage; import io.github.jwdeveloper.tiktok.messages.WebcastRoomPinMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokRoomPinMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokRoomPinMessageEvent extends TikTokHeaderEvent {
private final Long pinTimeStamp; private final Long pinTimeStamp;
private final TikTokCommentEvent comment; private final TikTokCommentEvent comment;

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.TopViewer; import io.github.jwdeveloper.tiktok.events.objects.TopViewer;
import io.github.jwdeveloper.tiktok.messages.WebcastRoomUserSeqMessage; import io.github.jwdeveloper.tiktok.messages.WebcastRoomUserSeqMessage;
import lombok.Getter; import lombok.Getter;
@@ -8,7 +11,8 @@ import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Getter
public class TikTokRoomViewerDataEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokRoomViewerDataEvent extends TikTokHeaderEvent {
private final Integer viewerCount; private final Integer viewerCount;
private final List<TopViewer> topViewers; private final List<TopViewer> topViewers;

View File

@@ -1,31 +1,28 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokShareEvent extends TikTokEvent { @EventMeta(eventType = EventType.Custom)
private User user; public class TikTokShareEvent extends TikTokHeaderEvent {
private final User user;
private Integer amount; private final Integer amount;
public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) { public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) {
super(msg.getHeader());; super(msg.getHeader());;
if(msg.hasSender()) user = User.MapOrEmpty(msg.getSender());
{
user = new User(msg.getSender());
}
this.amount = amount; this.amount = amount;
} }
public TikTokShareEvent(WebcastSocialMessage msg) { public TikTokShareEvent(WebcastSocialMessage msg) {
super(msg.getHeader()); super(msg.getHeader());
if(msg.hasSender()) user = User.MapOrEmpty(msg.getSender());
{
user = new User(msg.getSender());
}
amount = 1; amount = 1;
} }

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.Picture; import io.github.jwdeveloper.tiktok.events.objects.Picture;
import io.github.jwdeveloper.tiktok.messages.WebcastOecLiveShoppingMessage; import io.github.jwdeveloper.tiktok.messages.WebcastOecLiveShoppingMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokShopMessageEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokShopMessageEvent extends TikTokHeaderEvent {
private final String title; private final String title;
private final String price; private final String price;

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastSubNotifyMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSubNotifyMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokSubNotifyEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokSubNotifyEvent extends TikTokHeaderEvent {
private User user; private User user;
public TikTokSubNotifyEvent(WebcastSubNotifyMessage msg) { public TikTokSubNotifyEvent(WebcastSubNotifyMessage msg) {

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.objects.User; import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokSubscribeEvent extends TikTokEvent { @EventMeta(eventType = EventType.Custom)
public class TikTokSubscribeEvent extends TikTokHeaderEvent {
private User newSubscriber; private User newSubscriber;
public TikTokSubscribeEvent(WebcastMemberMessage msg) { public TikTokSubscribeEvent(WebcastMemberMessage msg) {

View File

@@ -1,12 +1,16 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastUnauthorizedMemberMessage; import io.github.jwdeveloper.tiktok.messages.WebcastUnauthorizedMemberMessage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class TikTokUnauthorizedMemberEvent extends TikTokEvent { @EventMeta(eventType = EventType.Message)
public class TikTokUnauthorizedMemberEvent extends TikTokHeaderEvent {
private final String data; private final String data;
private final UnauthorizedMemberData event; private final UnauthorizedMemberData event;

View File

@@ -1,13 +1,18 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokUnhandledEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastControlMessage; import io.github.jwdeveloper.tiktok.messages.WebcastControlMessage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@AllArgsConstructor @EventMeta(eventType = EventType.Custom)
public class TikTokUnhandledControlEvent extends TikTokEvent { public class TikTokUnhandledControlEvent extends TikTokUnhandledEvent<WebcastControlMessage> {
private final WebcastControlMessage message; public TikTokUnhandledControlEvent(WebcastControlMessage data) {
super(data);
}
} }

View File

@@ -1,14 +0,0 @@
package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class TikTokUnhandledEvent extends TikTokEvent
{
private final WebcastResponse.Message message;
}

View File

@@ -1,13 +1,18 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokUnhandledEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@AllArgsConstructor @EventMeta(eventType = EventType.Message)
public class TikTokUnhandledMemberEvent extends TikTokEvent public class TikTokUnhandledMemberEvent extends TikTokUnhandledEvent<WebcastMemberMessage>
{ {
private final WebcastMemberMessage message; public TikTokUnhandledMemberEvent(WebcastMemberMessage data) {
super(data);
}
} }

View File

@@ -1,13 +1,19 @@
package io.github.jwdeveloper.tiktok.events.messages; package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent; import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokUnhandledEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastMemberMessage;
import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage; import io.github.jwdeveloper.tiktok.messages.WebcastSocialMessage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@AllArgsConstructor @EventMeta(eventType = EventType.Custom)
public class TikTokUnhandledSocialEvent extends TikTokEvent public class TikTokUnhandledSocialEvent extends TikTokUnhandledEvent<WebcastSocialMessage>
{ {
private final WebcastSocialMessage message; public TikTokUnhandledSocialEvent(WebcastSocialMessage data) {
super(data);
}
} }

View File

@@ -0,0 +1,19 @@
package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.base.TikTokUnhandledEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@EventMeta(eventType = EventType.Message)
public class TikTokUnhandledWebsocketMessageEvent extends TikTokUnhandledEvent<WebcastResponse.Message>
{
public TikTokUnhandledWebsocketMessageEvent(WebcastResponse.Message data) {
super(data);
}
}

View File

@@ -0,0 +1,23 @@
package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
/**
* Happens when TikTok websocket receive message from server
*/
@Getter
@AllArgsConstructor
@EventMeta(eventType = EventType.Custom)
public class TikTokWebsocketMessageEvent extends TikTokEvent
{
private TikTokEvent event;
private WebcastResponse.Message message;
}

View File

@@ -1,41 +1,77 @@
package io.github.jwdeveloper.tiktok.events.objects; package io.github.jwdeveloper.tiktok.events.objects;
import lombok.AllArgsConstructor; import io.github.jwdeveloper.tiktok.messages.BadgeStruct;
import lombok.Getter; import lombok.Value;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Getter @Value
public class Badge { public class Badge {
private final ComboBadge comboBadges; ComboBadge comboBadges;
private final List<TextBadge> textBadges; List<TextBadge> textBadges;
private final List<ImageBadge> imageBadges; List<ImageBadge> imageBadges;
public Badge(io.github.jwdeveloper.tiktok.messages.Badge badge) { public Badge(ComboBadge comboBadges, List<TextBadge> textBadges, List<ImageBadge> imageBadges) {
textBadges = badge.getTextBadgesList().stream().map(b -> new TextBadge(b.getType(), b.getName())).toList(); this.comboBadges = comboBadges;
imageBadges = badge.getImageBadgesList().stream().map(b -> new ImageBadge(b.getDisplayType(), new Picture(b.getImage()))).toList(); this.textBadges = textBadges;
comboBadges = new ComboBadge(new Picture(badge.getComplexBadge().getImageUrl()), badge.getComplexBadge().getData()); this.imageBadges = imageBadges;
} }
public Badge(io.github.jwdeveloper.tiktok.messages.BadgeStruct badge)
@AllArgsConstructor {
@Getter comboBadges = ComboBadge.map(badge.getCombine());
public class TextBadge { textBadges = TextBadge.mapAll(badge.getTextList());
private final String type; imageBadges = ImageBadge.mapAll(badge.getImageList());
private final String name;
} }
@AllArgsConstructor @Value
@Getter public static class TextBadge {
public class ImageBadge { EnumValue type;
private final Integer displayType; String name;
private final Picture image;
public static TextBadge map(BadgeStruct.TextBadge input) {
return new TextBadge(EnumValue.Map(input.getDisplayType()),input.getKey());
}
public static List<TextBadge> mapAll(List<BadgeStruct.TextBadge> list) {
return list.stream().map(TextBadge::map).toList();
}
} }
@AllArgsConstructor @Value
@Getter public static class ImageBadge {
public class ComboBadge { EnumValue displayType;
private final Picture image; Picture image;
private final String data;
public static ImageBadge map(BadgeStruct.ImageBadge input) {
return new ImageBadge(EnumValue.Map(input.getDisplayType()), Picture.Map(input.getImage()));
}
public static List<ImageBadge> mapAll(List<BadgeStruct.ImageBadge> list) {
return list.stream().map(ImageBadge::map).toList();
}
}
@Value
public static class ComboBadge {
Picture image;
String data;
public static ComboBadge map(BadgeStruct.CombineBadge input) {
return new ComboBadge(Picture.Map(input.getIcon()),input.getStr());
}
public static List<ComboBadge> mapAll(List<BadgeStruct.CombineBadge> list) {
return list.stream().map(ComboBadge::map).toList();
}
}
public static Badge Empty() {
var comboBadge = new ComboBadge(Picture.Empty(), "");
var textBadges = new ArrayList<TextBadge>();
var imageBadges = new ArrayList<ImageBadge>();
return new Badge(comboBadge, textBadges, imageBadges);
}
public static List<Badge> EmptyList() {
return new ArrayList<Badge>();
} }
} }

View File

@@ -2,14 +2,15 @@ package io.github.jwdeveloper.tiktok.events.objects;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
import java.util.List; import java.util.List;
@Getter @Value
public class BarrageData { public class BarrageData {
private final String eventType; String eventType;
private final String label; String label;
private final List<BarrageUser> users; List<BarrageUser> users;
public BarrageData(String eventType, String label, List<BarrageUser> users) public BarrageData(String eventType, String label, List<BarrageUser> users)
{ {
@@ -18,12 +19,11 @@ public class BarrageData {
this.users = users; this.users = users;
} }
@Getter @Value
@AllArgsConstructor public static class BarrageUser
public static final class BarrageUser
{ {
private final User user; User user;
private final String data; String data;
} }
} }

View File

@@ -0,0 +1,15 @@
package io.github.jwdeveloper.tiktok.events.objects;
import lombok.Value;
@Value
public class EnumValue
{
public int value;
public String name;
public static EnumValue Map(Enum<?> _enum)
{
return new EnumValue(_enum.ordinal() ,_enum.name());
}
}

View File

@@ -1,27 +1,22 @@
package io.github.jwdeveloper.tiktok.events.objects; package io.github.jwdeveloper.tiktok.events.objects;
import lombok.Getter; import lombok.Value;
@Getter @Value
public class Gift { public class Gift {
private final Long id; Long id;
String name;
String description;
Integer diamondCost;
Integer type;
Picture picture;
private final String name; public Gift(io.github.jwdeveloper.tiktok.messages.GiftStruct gift) {
private final String description;
private final Integer diamondCost;
private final Integer type;
private final Picture picture;
public Gift(io.github.jwdeveloper.tiktok.messages.Gift gift) {
id = gift.getId(); id = gift.getId();
name = gift.getName(); name = gift.getName();
description = gift.getDescription(); description = gift.getDescribe();
diamondCost = gift.getCoinCount(); diamondCost = gift.getDiamondCount();
type = gift.getGiftType(); type = gift.getType();
picture = new Picture(gift.getImage()); picture = new Picture(gift.getImage());
} }
} }

View File

@@ -1,31 +1,28 @@
package io.github.jwdeveloper.tiktok.events.objects; package io.github.jwdeveloper.tiktok.events.objects;
import io.github.jwdeveloper.tiktok.messages.LinkMicArmiesItems; import io.github.jwdeveloper.tiktok.messages.LinkMicArmiesItems;
import lombok.AllArgsConstructor; import lombok.Value;
import lombok.Getter;
import java.util.List; import java.util.List;
@Getter @Value
public class LinkMicArmy { public class LinkMicArmy {
private final Long armyId; Long armyId;
private final List<Army> armies; List<Army> armies;
public LinkMicArmy(LinkMicArmiesItems army) { public LinkMicArmy(LinkMicArmiesItems army) {
armyId = army.getHostUserId(); armyId = army.getHostUserId();
armies = army.getBattleGroupsList() armies = army.getBattleGroupsList()
.stream() .stream()
.map(x -> new Army(x.getUsersList() .map(x -> new Army(x.getUsersList().stream().map(User::MapOrEmpty).toList(), x.getPoints()))
.stream()
.map(User::new).toList(), x.getPoints()))
.toList(); .toList();
} }
@Value
@Getter public static class Army {
@AllArgsConstructor List<User> Users;
public final class Army { Integer Points;
private final List<User> Users;
private final Integer Points;
} }
} }

View File

@@ -3,13 +3,14 @@ package io.github.jwdeveloper.tiktok.events.objects;
import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicBattle; import io.github.jwdeveloper.tiktok.messages.WebcastLinkMicBattle;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
import java.util.List; import java.util.List;
@Getter @Value
public class LinkMicBattleTeam { public class LinkMicBattleTeam {
private final Long teamId; Long teamId;
private final List<User> users; List<User> users;
public LinkMicBattleTeam(WebcastLinkMicBattle.LinkMicBattleTeam team) { public LinkMicBattleTeam(WebcastLinkMicBattle.LinkMicBattleTeam team) {
this.teamId = team.getId(); this.teamId = team.getId();

View File

@@ -1,19 +1,19 @@
package io.github.jwdeveloper.tiktok.events.objects; package io.github.jwdeveloper.tiktok.events.objects;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@Getter @Getter
public class Picture { public class Picture {
public final List<String> urls; List<String> urls;
public Picture(io.github.jwdeveloper.tiktok.messages.Image profilePicture) {
public Picture(io.github.jwdeveloper.tiktok.messages.Picture profilePicture) { this.urls = profilePicture.getUrlListList();
this.urls = profilePicture.getUrlsList();
} }
public Picture(List<String> urls) { public Picture(List<String> urls) {
this.urls = urls; this.urls = urls;
} }
@@ -22,4 +22,20 @@ public class Picture {
{ {
this.urls = Arrays.stream(urls).toList(); this.urls = Arrays.stream(urls).toList();
} }
public static Picture Map(io.github.jwdeveloper.tiktok.messages.Image profilePicture)
{
return new Picture(profilePicture.getUrlListList());
}
public static Picture Empty()
{
return new Picture();
}
public static List<Picture> EmptyList()
{
return new ArrayList<Picture>();
}
} }

View File

@@ -2,18 +2,17 @@ package io.github.jwdeveloper.tiktok.events.objects;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Value;
import java.util.List; import java.util.List;
@Getter @Value
@AllArgsConstructor
public class PollOption { public class PollOption {
private final User user; private final User user;
private final List<Option> options; private final List<Option> options;
@Getter @Value
@AllArgsConstructor
public static final class Option { public static final class Option {
private final String label; private final String label;

View File

@@ -7,19 +7,16 @@ import lombok.Setter;
@Getter @Getter
public class TikTokGift { public class TikTokGift {
private final Gift gift; private final Gift gift;
private User sender; private final User sender;
@Setter @Setter
private int amount; private long amount;
@Setter @Setter
private boolean streakFinished; private boolean streakFinished;
public TikTokGift(WebcastGiftMessage message) { public TikTokGift(WebcastGiftMessage message) {
gift = new Gift(message.getGiftDetails()); gift = new Gift(message.getGift());
if (message.hasSender()) { sender = User.MapOrEmpty(message.getUser());
sender = new User(message.getSender()); amount = message.getComboCount();
} streakFinished = message.getRepeatEnd() > 0;
amount = message.getAmount();
streakFinished = message.getRepeatEnd();
} }
} }

View File

@@ -1,22 +1,18 @@
package io.github.jwdeveloper.tiktok.events.objects; package io.github.jwdeveloper.tiktok.events.objects;
import lombok.Value;
import lombok.Getter; @Value
@Getter
public class TopViewer { public class TopViewer {
private Integer rank; Integer rank;
private User user; User user;
private Integer coinsGiven; Integer coinsGiven;
public TopViewer(io.github.jwdeveloper.tiktok.messages.TopViewer viewer) public TopViewer(io.github.jwdeveloper.tiktok.messages.TopViewer viewer)
{ {
rank = viewer.getRank(); rank = viewer.getRank();
if(viewer.hasUser()) user = User.MapOrEmpty(viewer.getUser());
{
user = new User(viewer.getUser());
}
coinsGiven = viewer.getCoinsGiven(); coinsGiven = viewer.getCoinsGiven();
} }
} }

View File

@@ -20,14 +20,14 @@ public class User {
private Picture picture1080; private Picture picture1080;
private Integer following; private long following;
private Integer followers; private long followers;
private Integer followsHost; private long followsHost;
public List<Picture> additionalPictures; private List<Picture> additionalPictures;
public List<Badge> badges; private List<Badge> badges;
public User(Long userId, public User(Long userId,
String uniqueId, String uniqueId,
@@ -71,17 +71,39 @@ public class User {
public User(io.github.jwdeveloper.tiktok.messages.User user) { public User(io.github.jwdeveloper.tiktok.messages.User user) {
assert user != null; assert user != null;
userId = user.getUserId(); userId = user.getId();
uniqueId = user.getUniqueId(); uniqueId = user.getSpecialId();
nickName = user.getNickname(); nickName = user.getNickname();
description = user.getDescription(); description = user.getBioDescription();
profilePicture = new Picture(user.getProfilePicture()); profilePicture = new Picture(user.getAvatarThumb());
picture720 = new Picture(user.getPicture720()); picture720 = new Picture(user.getAvatarMedium());
picture1080 = new Picture(user.getPicture1080()); picture1080 = new Picture(user.getAvatarLarge());
following = user.getFollowerData().getFollowing(); following = user.getFollowInfo().getFollowingCount();
followers = user.getFollowerData().getFollowers(); followers = user.getFollowInfo().getFollowerCount();
followsHost = user.getFollowerData().getFollowsHost(); followsHost = user.getFollowInfo().getFollowStatus();
badges = user.getBadgesList().stream().map(Badge::new).toList(); badges = user.getBadgeListList().stream().map(Badge::new).toList();
additionalPictures = new ArrayList<>(); additionalPictures = new ArrayList<>();
} }
public static User MapOrEmpty(io.github.jwdeveloper.tiktok.messages.User user)
{
if(user != null)
{
return new User(user);
}
return new User(0L,
"",
"",
"",
Picture.Empty(),
Picture.Empty(),
Picture.Empty(),
Picture.EmptyList(),
0,
0,
0,
Badge.EmptyList());
}
} }

View File

@@ -0,0 +1,23 @@
package io.github.jwdeveloper.tiktok.exceptions;
public class TikTokEventListenerMethodException extends TikTokLiveException
{
public TikTokEventListenerMethodException() {
}
public TikTokEventListenerMethodException(String message) {
super(message);
}
public TikTokEventListenerMethodException(String message, Throwable cause) {
super(message, cause);
}
public TikTokEventListenerMethodException(Throwable cause) {
super(cause);
}
public TikTokEventListenerMethodException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@@ -0,0 +1,38 @@
package io.github.jwdeveloper.tiktok.exceptions;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import lombok.Getter;
import java.util.Base64;
public class TikTokLiveMessageException extends TikTokLiveException {
@Getter
private final WebcastResponse.Message webcastMessage;
@Getter
private final WebcastResponse webcastResponse;
public TikTokLiveMessageException(WebcastResponse.Message message,
WebcastResponse webcastResponse,
Throwable cause) {
super("Error while handling Message: " + message.getType() + ": \n", cause);
this.webcastMessage = message;
this.webcastResponse = webcastResponse;
}
public String messageName()
{
return webcastMessage.getType();
}
public String messageToBase64()
{
return Base64.getEncoder().encodeToString(webcastMessage.getBinary().toByteArray());
}
public String webcastResponseToBase64()
{
return Base64.getEncoder().encodeToString(webcastResponse.toByteArray());
}
}

View File

@@ -1,23 +0,0 @@
package io.github.jwdeveloper.tiktok.exceptions;
public class TikTokLiveMessageParsingException extends TikTokLiveException
{
public TikTokLiveMessageParsingException() {
}
public TikTokLiveMessageParsingException(String message) {
super(message);
}
public TikTokLiveMessageParsingException(String message, Throwable cause) {
super(message, cause);
}
public TikTokLiveMessageParsingException(Throwable cause) {
super(cause);
}
public TikTokLiveMessageParsingException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@@ -0,0 +1,8 @@
package io.github.jwdeveloper.tiktok.exceptions;
public class TikTokLiveOfflineHostException extends TikTokLiveException
{
public TikTokLiveOfflineHostException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,23 @@
package io.github.jwdeveloper.tiktok.exceptions;
public class TikTokLiveRequestException extends TikTokLiveException
{
public TikTokLiveRequestException() {
}
public TikTokLiveRequestException(String message) {
super(message);
}
public TikTokLiveRequestException(String message, Throwable cause) {
super(message, cause);
}
public TikTokLiveRequestException(Throwable cause) {
super(cause);
}
public TikTokLiveRequestException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}

View File

@@ -0,0 +1,15 @@
package io.github.jwdeveloper.tiktok.exceptions;
public class TikTokMessageMappingException extends TikTokLiveException
{
public TikTokMessageMappingException(Class<?> inputClazz, Class<?> outputClass, Throwable throwable)
{
super("Unable to handle mapping from class: " + inputClazz.getSimpleName() + " to class " + outputClass.getSimpleName(),throwable);
}
public TikTokMessageMappingException(Class<?> inputClazz, Class<?> outputClass, String message)
{
super("Unable to handle mapping from class: " + inputClazz.getSimpleName() + " to class " + outputClass.getSimpleName()+": "+message);
}
}

View File

@@ -0,0 +1,15 @@
package io.github.jwdeveloper.tiktok.exceptions;
import lombok.Getter;
public class TikTokProtocolBufferException extends TikTokLiveException
{
@Getter
private final byte[] bytes;
public TikTokProtocolBufferException(String message, byte[] bytes, Throwable cause)
{
super(message, cause);
this.bytes = bytes;
}
}

View File

@@ -0,0 +1,10 @@
package io.github.jwdeveloper.tiktok.handler;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
public interface TikTokMessageHandler
{
TikTokEvent handle(WebcastResponse.Message message) throws Exception;
}

View File

@@ -1,7 +0,0 @@
package io.github.jwdeveloper.tiktok.http.Resource;
import lombok.Data;
@Data
public class ClientFetchDataResponse {
}

View File

@@ -1,13 +1,12 @@
package io.github.jwdeveloper.tiktok.http; package io.github.jwdeveloper.tiktok.http;
import java.net.http.HttpRequest;
import java.util.Map; import java.util.Map;
public interface TikTokHttpRequest { public interface TikTokHttpRequest {
TikTokHttpRequest SetQueries(Map<String, Object> queries); TikTokHttpRequest setQueries(Map<String, Object> queries);
TikTokHttpRequest setHeader(String key, String value); TikTokHttpRequest setHeader(String key, String value);
String Get(String url); String get(String url);
String Post(String url, HttpRequest.BodyPublisher data); String post(String url);
} }

View File

@@ -0,0 +1,11 @@
package io.github.jwdeveloper.tiktok.listener;
import java.util.List;
public interface ListenersManager
{
List<TikTokEventListener> getBindingModels();
void addListener(TikTokEventListener listener);
void removeListener(TikTokEventListener listener);
}

View File

@@ -0,0 +1,6 @@
package io.github.jwdeveloper.tiktok.listener;
public interface TikTokEventListener
{
}

View File

@@ -0,0 +1,14 @@
package io.github.jwdeveloper.tiktok.live;
import io.github.jwdeveloper.tiktok.events.objects.TikTokGift;
import io.github.jwdeveloper.tiktok.models.GiftId;
import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
import java.util.Map;
public interface GiftManager
{
Map<Integer, TikTokGiftInfo> getGiftsInfo();
Map<GiftId, TikTokGift> getActiveGifts();
}

View File

@@ -1,10 +1,19 @@
package io.github.jwdeveloper.tiktok.live; package io.github.jwdeveloper.tiktok.live;
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
public interface LiveClient { public interface LiveClient {
// Connects to the live stream.
void connect(); void connect();
// Disconnects the connection.
void disconnect(); void disconnect();
// Gets the meta information about all gifts.
GiftManager getGiftManager();
// Gets the current room info from TikTok API including streamer info, room status and statistics.
LiveRoomInfo getRoomInfo(); LiveRoomInfo getRoomInfo();
ListenersManager getListenersManager();
} }

View File

@@ -3,7 +3,6 @@ package io.github.jwdeveloper.tiktok.live;
public interface LiveRoomInfo public interface LiveRoomInfo
{ {
int getViewersCount(); int getViewersCount();
String getRoomId(); String getRoomId();
String getUserName(); String getUserName();
} }

View File

@@ -7,7 +7,7 @@ import lombok.Data;
@AllArgsConstructor @AllArgsConstructor
public class GiftId public class GiftId
{ {
public long Gift; private long giftId;
public String UserName; private String userName;
} }

View File

@@ -0,0 +1,6 @@
package io.github.jwdeveloper.tiktok.models;
public enum GiftStrike
{
BEGIN, UPDATE, ENDED
}

View File

@@ -3,14 +3,13 @@ package io.github.jwdeveloper.tiktok.models.gifts;
import lombok.Data; import lombok.Data;
@Data @Data
public class DefaultFormat public class DefaultFormat {
{ private boolean bold;
private boolean bold ; private String color;
private String color ; private int font_size;
private int font_size ; private boolean italic;
private boolean italic ; private int italic_angle;
private int italic_angle ; private boolean use_highlight_color;
private boolean use_highlight_color ; private boolean use_remote_color;
private boolean use_remote_color ; private int weight;
private int weight ;
} }

View File

@@ -5,10 +5,9 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class DisplayText public class DisplayText {
{ private DefaultFormat default_format;
private DefaultFormat default_format ; private String default_pattern;
private String default_pattern ; private String key;
private String key ; private List<Object> pieces;
private List<Object> pieces ;
} }

View File

@@ -5,14 +5,13 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class GiftLabelIcon public class GiftLabelIcon {
{ private String avg_color;
private String avg_color ; private int height;
private int height ; private int image_type;
private int image_type ; private boolean is_animated;
private boolean is_animated ; private String open_web_url;
private String open_web_url ; private String uri;
private String uri ; private List<String> url_list;
private List<String> url_list ; private int width;
private int width ;
} }

View File

@@ -6,10 +6,9 @@ import java.util.List;
@Data @Data
public class GiftPanelBanner public class GiftPanelBanner {
{ private List<Object> bg_color_values;
private List<Object> bg_color_values ; private DisplayText display_text;
private DisplayText display_text ; private LeftIcon left_icon;
private LeftIcon left_icon ; private String schema_url;
private String schema_url ;
} }

View File

@@ -5,14 +5,13 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class Image public class Image {
{ private String avg_color;
private String avg_color ; private int height;
private int height ; private int image_type;
private int image_type ; private boolean is_animated;
private boolean is_animated ; private String open_web_url;
private String open_web_url ; private String uri;
private String uri ; private List<String> url_list;
private List<String> url_list ; private int width;
private int width ;
} }

View File

@@ -5,16 +5,15 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class LeftIcon public class LeftIcon {
{ private String avg_color;
private String avg_color ; private int height;
private int height ; private int image_type;
private int image_type ; private boolean is_animated;
private boolean is_animated ; private String open_web_url;
private String open_web_url ; private String uri;
private String uri ; private List<String> url_list;
private List<String> url_list ; private int width;
private int width ;
} }

View File

@@ -1,6 +1,9 @@
package io.github.jwdeveloper.tiktok.models.gifts; package io.github.jwdeveloper.tiktok.models.gifts;
import lombok.Data;
@Data
public class LockInfo public class LockInfo
{ {
public int lock_type; private int lock_type;
} }

View File

@@ -5,7 +5,7 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class TikTokGift public class TikTokGiftInfo
{ {
private int action_type; private int action_type;
private int app_id; private int app_id;

View File

@@ -0,0 +1,38 @@
package io.github.jwdeveloper.tiktok.utils;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
public class CancelationToken
{
private boolean isCanceled =false;
public void cancel()
{
isCanceled =true;
}
public boolean isCancel()
{
return isCanceled;
}
public void throwIfCancel()
{
if(!isCanceled)
{
return;
}
throw new TikTokLiveException("Token requested cancelation");
}
public boolean isNotCancel()
{
return !isCancel();
}
public static CancelationToken create()
{
return new CancelationToken();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>TikTokLiveJava</artifactId> <artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId> <groupId>io.github.jwdeveloper.tiktok</groupId>
<version>1.0.0</version> <version>0.0.20-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -29,6 +29,23 @@
<artifactId>protobuf-java</artifactId> <artifactId>protobuf-java</artifactId>
<version>3.24.1</version> <version>3.24.1</version>
</dependency> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.7</version>
<scope>runtime</scope>
</dependency>
</dependencies> </dependencies>

View File

@@ -1,45 +1,48 @@
package io.github.jwdeveloper.tiktok; package io.github.jwdeveloper.tiktok;
import io.github.jwdeveloper.tiktok.events.objects.TikTokGift; import io.github.jwdeveloper.tiktok.events.objects.TikTokGift;
import io.github.jwdeveloper.tiktok.http.TikTokApiService; import io.github.jwdeveloper.tiktok.live.GiftManager;
import io.github.jwdeveloper.tiktok.messages.WebcastGiftMessage;
import io.github.jwdeveloper.tiktok.models.GiftId; import io.github.jwdeveloper.tiktok.models.GiftId;
import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
import lombok.Getter; import lombok.Getter;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Logger;
public class TikTokGiftManager { public class TikTokGiftManager implements GiftManager {
private Logger logger;
private ClientSettings clientSettings;
private TikTokApiService apiService;
private Map<Integer, TikTokGift> gifts;
@Getter @Getter
private Map<GiftId, TikTokGift> activeGifts; private final Map<Integer, TikTokGiftInfo> giftsInfo;
@Getter
private final Map<GiftId, TikTokGift> activeGifts;
public TikTokGiftManager(Logger logger, TikTokApiService apiService, ClientSettings clientSettings) { public TikTokGiftManager() {
this.logger = logger; giftsInfo = new HashMap<>();
this.clientSettings = clientSettings;
this.apiService = apiService;
this.gifts = new HashMap<>();
activeGifts = new HashMap<>(); activeGifts = new HashMap<>();
} }
public void loadGifts() { public TikTokGift updateActiveGift(WebcastGiftMessage giftMessage) {
if (!clientSettings.isDownloadGiftInfo()) { var giftId = new GiftId(giftMessage.getGiftId(), giftMessage.getUser().getIdStr());
return; if (activeGifts.containsKey(giftId)) {
var gift = activeGifts.get(giftId);
gift.setAmount(giftMessage.getComboCount());
} else {
var newGift = new TikTokGift(giftMessage);
activeGifts.put(giftId, newGift);
} }
logger.info("Fetching gifts");
//TODO gifts =apiService.fetchAvailableGifts(); var gift = activeGifts.get(giftId);
if (giftMessage.getRepeatEnd() > 0)
{
gift.setStreakFinished(true);
activeGifts.remove(giftId);
}
return gift;
} }
public List<TikTokGift> getGifts() public void loadGifsInfo(Map<Integer, TikTokGiftInfo> gifts) {
{ this.giftsInfo.putAll(gifts);
return gifts.values().stream().toList();
} }
} }

View File

@@ -8,6 +8,4 @@ public class TikTokLive
{ {
return new TikTokLiveClientBuilder(userName); return new TikTokLiveClientBuilder(userName);
} }
} }

View File

@@ -1,94 +1,127 @@
package io.github.jwdeveloper.tiktok; package io.github.jwdeveloper.tiktok;
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.handlers.TikTokEventHandler; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException;
import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver;
import io.github.jwdeveloper.tiktok.http.TikTokApiService; import io.github.jwdeveloper.tiktok.http.TikTokApiService;
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
import io.github.jwdeveloper.tiktok.listener.TikTokListenersManager;
import io.github.jwdeveloper.tiktok.live.ConnectionState; import io.github.jwdeveloper.tiktok.live.ConnectionState;
import io.github.jwdeveloper.tiktok.live.GiftManager;
import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveClient;
import io.github.jwdeveloper.tiktok.live.LiveRoomInfo; import io.github.jwdeveloper.tiktok.live.LiveRoomInfo;
import io.github.jwdeveloper.tiktok.live.TikTokRoomInfo; import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketClient;
import io.github.jwdeveloper.tiktok.websocket.TikTokWebsocketClient;
import java.util.logging.Logger; import java.util.logging.Logger;
public class TikTokLiveClient implements LiveClient { public class TikTokLiveClient implements LiveClient {
private final TikTokRoomInfo meta; private final TikTokRoomInfo liveRoomInfo;
private final TikTokGiftManager giftManager; private final TikTokGiftManager tikTokGiftManager;
private final TikTokApiService apiClient; private final TikTokApiService apiService;
private final TikTokWebsocketClient webSocketClient; private final TikTokWebSocketClient webSocketClient;
private final TikTokEventHandler tikTokEventHandler; private final TikTokEventObserver tikTokEventHandler;
private final ClientSettings clientSettings;
private final TikTokListenersManager listenersManager;
private final Logger logger; private final Logger logger;
public TikTokLiveClient(TikTokRoomInfo tikTokLiveMeta, public TikTokLiveClient(TikTokRoomInfo tikTokLiveMeta,
TikTokApiService tikTokApiService, TikTokApiService tikTokApiService,
TikTokWebsocketClient webSocketClient, TikTokWebSocketClient webSocketClient,
TikTokGiftManager tikTokGiftManager, TikTokGiftManager tikTokGiftManager,
TikTokEventHandler tikTokEventHandler, TikTokEventObserver tikTokEventHandler,
ClientSettings clientSettings,
TikTokListenersManager listenersManager,
Logger logger) { Logger logger) {
this.meta = tikTokLiveMeta; this.liveRoomInfo = tikTokLiveMeta;
this.giftManager = tikTokGiftManager; this.tikTokGiftManager = tikTokGiftManager;
this.apiClient = tikTokApiService; this.apiService = tikTokApiService;
this.webSocketClient = webSocketClient; this.webSocketClient = webSocketClient;
this.logger = logger;
this.tikTokEventHandler = tikTokEventHandler; this.tikTokEventHandler = tikTokEventHandler;
this.clientSettings = clientSettings;
this.listenersManager = listenersManager;
this.logger = logger;
} }
public void connect() { public void connect() {
try { try {
tryConnect(); tryConnect();
} catch (Exception e) { }
e.printStackTrace(); catch (TikTokLiveException e)
{
setState(ConnectionState.DISCONNECTED); setState(ConnectionState.DISCONNECTED);
tikTokEventHandler.publish(this, new TikTokErrorEvent(e));
tikTokEventHandler.publish(this, new TikTokDisconnectedEvent());
if(e instanceof TikTokLiveOfflineHostException && clientSettings.isRetryOnConnectionFailure())
{
try {
Thread.sleep(clientSettings.getRetryConnectionTimeout().toMillis());
}
catch (Exception ignored){}
logger.info("Reconnecting");
this.connect();
}
throw e;
} }
} }
public void disconnect() { public void disconnect() {
if (!meta.hasConnectionState(ConnectionState.CONNECTED)) { if (!liveRoomInfo.hasConnectionState(ConnectionState.CONNECTED)) {
return; return;
} }
webSocketClient.stop(); webSocketClient.stop();
setState(ConnectionState.DISCONNECTED); setState(ConnectionState.DISCONNECTED);
} }
public void tryConnect() { public void tryConnect() {
if (meta.hasConnectionState(ConnectionState.CONNECTED)) if (liveRoomInfo.hasConnectionState(ConnectionState.CONNECTED))
throw new RuntimeException("Already connected"); throw new TikTokLiveException("Already connected");
if (meta.hasConnectionState(ConnectionState.CONNECTING)) if (liveRoomInfo.hasConnectionState(ConnectionState.CONNECTING))
throw new RuntimeException("Already connecting"); throw new TikTokLiveException("Already connecting");
logger.info("Connecting"); logger.info("Connecting");
setState(ConnectionState.CONNECTING); setState(ConnectionState.CONNECTING);
var roomId = apiClient.fetchRoomId(meta.getUserName()); var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
meta.setRoomId(roomId); liveRoomInfo.setRoomId(roomId);
var roomData =apiClient.fetchRoomInfo(); var roomData = apiService.fetchRoomInfo();
if (roomData.getStatus() == 0 || roomData.getStatus() == 4) if (roomData.getStatus() == 0 || roomData.getStatus() == 4) {
{ throw new TikTokLiveOfflineHostException("LiveStream for HostID could not be found. Is the Host online?");
throw new TikTokLiveException("LiveStream for HostID could not be found. Is the Host online?");
} }
// giftManager.loadGifts(); if (clientSettings.isDownloadGiftInfo())
var clientData = apiClient.fetchClientData(); {
webSocketClient.start(clientData); logger.info("Fetch Gift info");
var gifts = apiService.fetchAvailableGifts();
tikTokGiftManager.loadGifsInfo(gifts);
}
var clientData = apiService.fetchClientData();
webSocketClient.start(clientData, this);
setState(ConnectionState.CONNECTED); setState(ConnectionState.CONNECTED);
} }
public LiveRoomInfo getRoomInfo() { public LiveRoomInfo getRoomInfo() {
return meta; return liveRoomInfo;
}
@Override
public ListenersManager getListenersManager()
{
return listenersManager;
}
@Override
public GiftManager getGiftManager() {
return tikTokGiftManager;
} }
private void setState(ConnectionState connectionState) { private void setState(ConnectionState connectionState) {
logger.info("TikTokLive client state: " + connectionState.name()); logger.info("TikTokLive client state: " + connectionState.name());
meta.setConnectionState(connectionState); liveRoomInfo.setConnectionState(connectionState);
} }

Some files were not shown because too many files have changed in this diff Show More