Compare commits

..

14 Commits

Author SHA1 Message Date
JW
5b91e7f4c9 Fixed bugs:
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: java.nio.ReadOnlyBufferException
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at java.base/java.nio.ByteBuffer.array(ByteBuffer.java:1473)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.drafts.Draft_6455.createBinaryFrame(Draft_6455.java:473)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.WebSocketImpl.send(WebSocketImpl.java:682)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.WebSocketImpl.send(WebSocketImpl.java:664)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.client.WebSocketClient.send(WebSocketClient.java:928)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketListener.sendAckId(TikTokWebSocketListener.java:127)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketListener.handleBinary(TikTokWebSocketListener.java:86)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketListener.onMessage(TikTokWebSocketListener.java:56)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:641)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.drafts.Draft_6455.processFrameBinary(Draft_6455.java:959)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.drafts.Draft_6455.processFrame(Draft_6455.java:912)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:402)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:234)
[20:28:38] [WebSocketConnectReadThread-34/INFO] (Minecraft) [STDERR]: 	at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:516)
2023-09-22 02:15:49 +02:00
Jacek W
0cf8edfefe Update README.md 2023-09-19 02:56:21 +02:00
GitHub Action
6c401f32b9 Update version in pom.xml 2023-09-19 00:55:11 +00:00
JW
84bbfa97e9 Fixed bugs:
- addListeners() was throwing exception
  - 404 response code was return while connecting to tiktok for some users
  - configure.setRoomId() method for people that want to set roomId manually
  - client.roomInfo().isAgeRestricted() check if live has age restriction
2023-09-19 02:53:04 +02:00
Just wolololololololo
a2da5169db Update README.md 2023-09-19 02:39:53 +02:00
Just wolololololololo
bf8defbe3c Update README.md 2023-09-19 02:30:40 +02:00
Just wolololololololo
5ba935efaf Update README.md 2023-09-19 02:30:31 +02:00
Just wolololololololo
0a244a4a58 Update README.md 2023-09-19 02:29:58 +02:00
Just wolololololololo
ac911de6b3 Merge pull request #7 from abdurrahmanekr/bugfix-403
fix: 403 get response error
2023-09-18 22:51:46 +02:00
abdurrahmanekr
74208361fd fix: 403 get response error 2023-09-18 23:32:17 +03:00
JW
a6cb2be1a7 Update FUNDING.yml 2023-09-13 06:48:11 +02:00
GitHub Action
9267217ebd Update version in pom.xml 2023-09-13 04:40:49 +00:00
JW
7641d4d33d Fix for maven versions 2023-09-13 06:38:46 +02:00
JW
05ce745dc8 Changes:
LiveRoomInfo
    + new method getConnectionState() getting current state of connection
   + ListenersManager
     getBindingModels() renamed to getListeners()

  + Introducing documentation, each public interface got small documentation

  + New property in config .setSessionId()

  + New event: onReconnecting()

Bugs:
   CommentEvent was throwing mapping exception
2023-09-13 06:32:51 +02:00
28 changed files with 195 additions and 114 deletions

View File

@@ -72,7 +72,7 @@ jobs:
run: | run: |
git config --local user.email "action@github.com" git config --local user.email "action@github.com"
git config --local user.name "GitHub Action" git config --local user.name "GitHub Action"
git add README.MD git add README.md
git add pom.xml && git add '**/pom.xml' git add pom.xml && git add '**/pom.xml'
git commit -m "Update version in pom.xml" git commit -m "Update version in pom.xml"
- name: Push changes - name: Push changes

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>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>API</artifactId> <artifactId>API</artifactId>

View File

@@ -56,7 +56,7 @@ public class ClientSettings {
private boolean printMessageData; private boolean printMessageData;
/** /**
* Tiktok user name * Optional: Use it if you need to change tiktok live hostname in builder
*/ */
private String hostName; private String hostName;
@@ -68,10 +68,16 @@ public class ClientSettings {
/* /*
* Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
* documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
*/ */
private String sessionId; private String sessionId;
/*
* Optional: By default roomID is fetched before connect to live, but you can set it manually
*
*/
private String roomId;
} }

View File

@@ -90,6 +90,8 @@ public interface TikTokEventBuilder<T> {
T onWebsocketMessage(TikTokEventConsumer<TikTokWebsocketMessageEvent> event); T onWebsocketMessage(TikTokEventConsumer<TikTokWebsocketMessageEvent> event);
T onReconnecting(TikTokEventConsumer<TikTokReconnectingEvent> event);
} }

View File

@@ -0,0 +1,13 @@
package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokLiveClientEvent;
import lombok.Getter;
@Getter
@EventMeta(eventType = EventType.Control)
public class TikTokReconnectingEvent extends TikTokLiveClientEvent
{
}

View File

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

View File

@@ -6,4 +6,6 @@ import lombok.Data;
public class LiveRoomMeta public class LiveRoomMeta
{ {
private int status; private int status;
private boolean ageRestricted;
} }

View File

@@ -0,0 +1,6 @@
package io.github.jwdeveloper.tiktok.mappers;
public interface Mapper<SOURCE,TARGET>
{
TARGET mapFrom(SOURCE source);
}

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>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -2,6 +2,7 @@ package io.github.jwdeveloper.tiktok;
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokReconnectingEvent;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException;
import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver; import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver;
@@ -62,6 +63,7 @@ public class TikTokLiveClient implements LiveClient {
} }
catch (Exception ignored){} catch (Exception ignored){}
logger.info("Reconnecting"); logger.info("Reconnecting");
tikTokEventHandler.publish(this, new TikTokReconnectingEvent());
this.connect(); this.connect();
} }
throw e; throw e;
@@ -85,8 +87,22 @@ public class TikTokLiveClient implements LiveClient {
logger.info("Connecting"); logger.info("Connecting");
setState(ConnectionState.CONNECTING); setState(ConnectionState.CONNECTING);
var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
liveRoomInfo.setRoomId(roomId); apiService.updateSessionId();
if(clientSettings.getRoomId() != null)
{
liveRoomInfo.setRoomId(clientSettings.getRoomId());
logger.info("Using roomID from settings: "+clientSettings.getRoomId());
}
else
{
var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
liveRoomInfo.setRoomId(roomId);
}
var roomData = apiService.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 TikTokLiveOfflineHostException("LiveStream for HostID could not be found. Is the Host online?");

View File

@@ -344,6 +344,13 @@ public class TikTokLiveClientBuilder implements TikTokEventBuilder<TikTokLiveCli
tikTokEventHandler.subscribe(TikTokWebsocketMessageEvent.class, event); tikTokEventHandler.subscribe(TikTokWebsocketMessageEvent.class, event);
return this; return this;
} }
@Override
public TikTokLiveClientBuilder onReconnecting(TikTokEventConsumer<TikTokReconnectingEvent> event)
{
tikTokEventHandler.subscribe(TikTokReconnectingEvent.class, event);
return this;
}
} }

View File

@@ -11,7 +11,10 @@ public class TikTokRoomInfo implements LiveRoomInfo
private String roomId; private String roomId;
private boolean ageRestricted;
private String userName; private String userName;
private ConnectionState connectionState = ConnectionState.DISCONNECTED; private ConnectionState connectionState = ConnectionState.DISCONNECTED;
public boolean hasConnectionState(ConnectionState state) public boolean hasConnectionState(ConnectionState state)

View File

@@ -6,6 +6,7 @@ import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveOfflineHostException;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveRequestException; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveRequestException;
import io.github.jwdeveloper.tiktok.live.LiveRoomMeta; import io.github.jwdeveloper.tiktok.live.LiveRoomMeta;
import io.github.jwdeveloper.tiktok.mappers.LiveRoomMetaMapper;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse; import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo; import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
@@ -26,45 +27,19 @@ public class TikTokApiService {
this.clientSettings = clientSettings; this.clientSettings = clientSettings;
} }
/*
if (sessionId) { public void updateSessionId()
// Update sessionId {
this.#options.sessionId = sessionId; if(clientSettings.getSessionId() == null)
{
return;
} }
if(clientSettings.getSessionId().isEmpty())
if (!this.#options.sessionId) { {
throw new Error('Missing SessionId. Please provide your current SessionId to use this feature.'); return;
} }
tiktokHttpClient.setSessionId(clientSettings.getSessionId());
try { }
// Retrieve current room_id if not connected
if (!this.#isConnected) {
await this.#retrieveRoomId();
}
// Add the session cookie to the CookieJar
this.#httpClient.setSessionId(this.#options.sessionId);
// Submit the chat request
let requestParams = { ...this.#clientParams, content: text };
let response = await this.#httpClient.postFormDataToWebcastApi('room/chat/', requestParams, null);
// Success?
if (response?.status_code === 0) {
return response.data;
}
// Handle errors
switch (response?.status_code) {
case 20003:
throw new Error('Your SessionId has expired. Please provide a new one.');
default:
throw new Error(`TikTok responded with status code ${response?.status_code}: ${response?.data?.message}`);
}
} catch (err) {
throw new Error(`Failed to send chat message. ${err.message}`);
}
*/
public boolean sendMessage(String message, String sessionId) { public boolean sendMessage(String message, String sessionId) {
if (sessionId.isEmpty()) { if (sessionId.isEmpty()) {
@@ -126,22 +101,10 @@ public class TikTokApiService {
logger.info("Fetch RoomInfo"); logger.info("Fetch RoomInfo");
try { try {
var response = tiktokHttpClient.getJObjectFromWebcastAPI("room/info/", clientSettings.getClientParameters()); var response = tiktokHttpClient.getJObjectFromWebcastAPI("room/info/", clientSettings.getClientParameters());
if (!response.has("data")) { var mapper = new LiveRoomMetaMapper();
return new LiveRoomMeta(); var liveRoomMeta = mapper.mapFrom(response);
} logger.info("RoomInfo status -> " + liveRoomMeta.getStatus());
return liveRoomMeta;
var data = response.getAsJsonObject("data");
if (!data.has("status")) {
return new LiveRoomMeta();
}
var status = data.get("status");
var info = new LiveRoomMeta();
info.setStatus(status.getAsInt());
logger.info("RoomInfo status -> " + info.getStatus());
return info;
} catch (Exception e) { } catch (Exception e) {
throw new TikTokLiveRequestException("Failed to fetch room info from WebCast, see stacktrace for more info.", e); throw new TikTokLiveRequestException("Failed to fetch room info from WebCast, see stacktrace for more info.", e);
} }

View File

@@ -38,6 +38,14 @@ public class TikTokHttpRequestFactory implements TikTokHttpRequest {
public String get(String url) { public String get(String url) {
var uri = URI.create(url); var uri = URI.create(url);
var request = HttpRequest.newBuilder().GET(); var request = HttpRequest.newBuilder().GET();
for (var header : defaultHeaders.entrySet())
{
if(header.getKey().equals("Connection") || header.getKey().equals("Accept-Encoding"))
{
continue;
}
request.setHeader(header.getKey(), header.getValue());
}
if (query != null) { if (query != null) {
var baseUri = uri.toString(); var baseUri = uri.toString();
var requestUri = URI.create(baseUri + "?" + query); var requestUri = URI.create(baseUri + "?" + query);

View File

@@ -19,10 +19,9 @@ public class TikTokListenersManager implements ListenersManager {
public TikTokListenersManager(List<TikTokEventListener> listeners, TikTokEventObserver tikTokEventHandler) { public TikTokListenersManager(List<TikTokEventListener> listeners, TikTokEventObserver tikTokEventHandler) {
this.eventObserver = tikTokEventHandler; this.eventObserver = tikTokEventHandler;
this.bindingModels = listeners.stream().map(this::bindToEvents).toList(); this.bindingModels = new ArrayList<>(listeners.stream().map(this::bindToEvents).toList());
} }
@Override @Override
public List<TikTokEventListener> getListeners() { public List<TikTokEventListener> getListeners() {
return bindingModels.stream().map(ListenerBindingModel::getListener).toList(); return bindingModels.stream().map(ListenerBindingModel::getListener).toList();

View File

@@ -0,0 +1,30 @@
package io.github.jwdeveloper.tiktok.mappers;
import com.google.gson.JsonObject;
import io.github.jwdeveloper.tiktok.live.LiveRoomMeta;
public class LiveRoomMetaMapper implements Mapper<JsonObject, LiveRoomMeta>
{
@Override
public LiveRoomMeta mapFrom(JsonObject input) {
var liveRoomMeta = new LiveRoomMeta();
if (!input.has("data")) {
return liveRoomMeta;
}
var data = input.getAsJsonObject("data");
if (data.has("status")) {
var status = data.get("status");
liveRoomMeta.setStatus(status.getAsInt());
}
if(data.has("age_restricted"))
{
var element = data.getAsJsonObject("age_restricted");
var restricted= element.get("restricted").getAsBoolean();
liveRoomMeta.setAgeRestricted(restricted);
}
return liveRoomMeta;
}
}

View File

@@ -124,7 +124,7 @@ public class TikTokWebSocketListener extends WebSocketClient {
.build(); .build();
if(isNotClosing()) if(isNotClosing())
{ {
send(serverInfo.toByteString().asReadOnlyByteBuffer()); send(serverInfo.toByteString().toByteArray());
} }
} }

View File

@@ -1,3 +1,2 @@
github: [jwdeveloper]
patreon: jwdeveloper patreon: jwdeveloper
custom: ["https://www.buymeacoffee.com/jwdev"] custom: ["https://www.buymeacoffee.com/jwdev"]

View File

@@ -27,25 +27,25 @@ Do you prefer other programming languages?
```xml ```xml
<repositories> <repositories>
<repository> <repository>
<id>jitpack.io</id> <id>jitpack.io</id>
<url>https://jitpack.io</url> <url>https://jitpack.io</url>
</repository> </repository>
</repositories> </repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.github.jwdeveloper.TikTok-Live-Java</groupId> <groupId>com.github.jwdeveloper.TikTok-Live-Java</groupId>
<artifactId>Client</artifactId> <artifactId>Client</artifactId>
<version>0.0.20-Release</version> <version>0.0.25-Release</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.10.1</version> <version>2.10.1</version>
</dependency> </dependency>
</dependencies> </dependencies>
``` ```
2. Create your first chat connection 2. Create your first chat connection
@@ -118,6 +118,13 @@ public class ConfigurationExample {
clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection
clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection
//Optional: Sometimes not every message from chat are send to TikTokLiveJava to fix this issue you can set sessionId
// documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000");
//Optional:
clientSettings.setRoomId("XXXXXXXXXXXXXXXXX");
}) })
.buildAndRun(); .buildAndRun();
System.in.read(); System.in.read();
@@ -135,6 +142,7 @@ import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokCommentEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokCommentEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokGiftMessageEvent; import io.github.jwdeveloper.tiktok.events.messages.TikTokGiftMessageEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokLikeEvent;
import io.github.jwdeveloper.tiktok.listener.TikTokEventListener; import io.github.jwdeveloper.tiktok.listener.TikTokEventListener;
import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveClient;
@@ -147,7 +155,7 @@ public class ListenerExample
CustomListener customListener = new CustomListener(); CustomListener customListener = new CustomListener();
// set tiktok username // set tiktok username
TikTokLive.newClient(Main.TEST_TIKTOK_USER) var client = TikTokLive.newClient(Main.TEST_TIKTOK_USER)
.addListener(customListener) .addListener(customListener)
.buildAndRun(); .buildAndRun();
@@ -164,6 +172,11 @@ public class ListenerExample
public static class CustomListener implements TikTokEventListener public static class CustomListener implements TikTokEventListener
{ {
@TikTokEventHandler
public void onLike(LiveClient liveClient, TikTokLikeEvent event)
{
System.out.println(event.toString());
}
@TikTokEventHandler @TikTokEventHandler
public void onError(LiveClient liveClient, TikTokErrorEvent event) public void onError(LiveClient liveClient, TikTokErrorEvent event)
@@ -197,7 +210,7 @@ public class ListenerExample
## Methods ## Methods
A `client (LiveClient)` object contains the following methods. A `client (LiveClient)` object contains the following methods.
{{methods}}
| Method Name | Description | | Method Name | Description |
|---------------------| ----------- | |---------------------| ----------- |
@@ -206,32 +219,11 @@ A `client (LiveClient)` object contains the following methods.
| getGiftManager | Gets the meta informations about all gifts. | | getGiftManager | Gets the meta informations about all gifts. |
| getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. | | getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. |
| getListenersManager | Gets and manage TikTokEventListeners | | getListenersManager | Gets and manage TikTokEventListeners |
## Events ## Events
A `TikTokLive` object has the following events A `TikTokLive` object has the following events
**Custom**:
- [TikTokHeaderEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokHeaderEvent.java)
- [TikTokUnhandledSocialEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledSocialEvent.java)
- [TikTokLivePausedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLivePausedEvent.java)
- [TikTokLikeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLikeEvent.java)
- [TikTokWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokWebsocketMessageEvent.java)
- [TikTokSubscribeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokSubscribeEvent.java)
- [TikTokFollowEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokFollowEvent.java)
- [TikTokLiveClientEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveClientEvent.java)
- [TikTokUnhandledEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledEvent.java)
- [TikTokLiveEndedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveEndedEvent.java)
- [TikTokJoinEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java)
- [TikTokShareEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokShareEvent.java)
- [TikTokUnhandledControlEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledControlEvent.java)
**Control**:
- [TikTokConnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokConnectedEvent.java)
- [TikTokErrorEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokErrorEvent.java)
- [TikTokDisconnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokDisconnectedEvent.java)
**Message**: **Message**:
- [TikTokLinkMicFanTicketEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLinkMicFanTicketEvent.java) - [TikTokLinkMicFanTicketEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLinkMicFanTicketEvent.java)
- [TikTokEnvelopeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokEnvelopeEvent.java) - [TikTokEnvelopeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokEnvelopeEvent.java)
@@ -263,6 +255,27 @@ A `TikTokLive` object has the following events
- [TikTokGiftBroadcastEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftBroadcastEvent.java) - [TikTokGiftBroadcastEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftBroadcastEvent.java)
- [TikTokUnhandledWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledWebsocketMessageEvent.java) - [TikTokUnhandledWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledWebsocketMessageEvent.java)
**Control**:
- [TikTokConnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokConnectedEvent.java)
- [TikTokReconnectingEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokReconnectingEvent.java)
- [TikTokErrorEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokErrorEvent.java)
- [TikTokDisconnectedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokDisconnectedEvent.java)
**Custom**:
- [TikTokHeaderEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokHeaderEvent.java)
- [TikTokUnhandledSocialEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledSocialEvent.java)
- [TikTokLivePausedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLivePausedEvent.java)
- [TikTokLikeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLikeEvent.java)
- [TikTokWebsocketMessageEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokWebsocketMessageEvent.java)
- [TikTokSubscribeEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokSubscribeEvent.java)
- [TikTokFollowEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokFollowEvent.java)
- [TikTokLiveClientEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveClientEvent.java)
- [TikTokUnhandledEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledEvent.java)
- [TikTokLiveEndedEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokLiveEndedEvent.java)
- [TikTokJoinEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokJoinEvent.java)
- [TikTokShareEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokShareEvent.java)
- [TikTokUnhandledControlEvent](https://github.com/jwdeveloper/TikTok-Live-Java/blob/master/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokUnhandledControlEvent.java)
<br><br> <br><br>

View File

@@ -41,7 +41,7 @@
<parent> <parent>
<artifactId>TikTokLiveJava</artifactId> <artifactId>TikTokLiveJava</artifactId>
<groupId>io.github.jwdeveloper.tiktok</groupId> <groupId>io.github.jwdeveloper.tiktok</groupId>
<version>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -20,6 +20,13 @@ public class ConfigurationExample {
clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection clientSettings.setHandleExistingMessagesOnConnect(true); // Invokes all TikTok events that had occurred before connection
clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline clientSettings.setRetryOnConnectionFailure(true); // Reconnecting if TikTok user is offline
clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1)); // Timeout before next reconnection
//Optional: Sometimes not every message from chat are send to TikTokLiveJava to fix this issue you can set sessionId
// documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
clientSettings.setSessionId("86c3c8bf4b17ebb2d74bb7fa66fd0000");
//Optional:
clientSettings.setRoomId("XXXXXXXXXXXXXXXXX");
}) })
.buildAndRun(); .buildAndRun();
System.in.read(); System.in.read();

View File

@@ -18,7 +18,7 @@ public class ListenerExample
CustomListener customListener = new CustomListener(); CustomListener customListener = new CustomListener();
// set tiktok username // set tiktok username
TikTokLive.newClient(Main.TEST_TIKTOK_USER) var client = TikTokLive.newClient(Main.TEST_TIKTOK_USER)
.addListener(customListener) .addListener(customListener)
.buildAndRun(); .buildAndRun();

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>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

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>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -35,5 +35,11 @@
<version>0.0.7-Release</version> <version>0.0.7-Release</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.12</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -6,5 +6,6 @@ public class Main {
{ {
var generator = new ReadmeGenerator(); var generator = new ReadmeGenerator();
generator.generate(); generator.generate();
} }
} }

View File

@@ -67,7 +67,7 @@ Do you prefer other programming languages?
## Methods ## Methods
A `client (LiveClient)` object contains the following methods. A `client (LiveClient)` object contains the following methods.
{{methods}}
| Method Name | Description | | Method Name | Description |
|---------------------| ----------- | |---------------------| ----------- |
@@ -76,7 +76,6 @@ A `client (LiveClient)` object contains the following methods.
| getGiftManager | Gets the meta informations about all gifts. | | getGiftManager | Gets the meta informations about all gifts. |
| getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. | | getRoomInfo | Gets the current room info from TikTok API including streamer info, room status and statistics. |
| getListenersManager | Gets and manage TikTokEventListeners | | getListenersManager | Gets and manage TikTokEventListeners |
## Events ## Events
A `TikTokLive` object has the following events A `TikTokLive` object has the following events

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>0.0.21-Release</version> <version>0.0.24-Release</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -7,7 +7,7 @@
<groupId>io.github.jwdeveloper.tiktok</groupId> <groupId>io.github.jwdeveloper.tiktok</groupId>
<artifactId>TikTokLiveJava</artifactId> <artifactId>TikTokLiveJava</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>0.0.21-Release</version> <version>0.0.24-Release</version>
<modules> <modules>
<module>API</module> <module>API</module>
<module>Client</module> <module>Client</module>