mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-28 09:19:40 -05:00
Compare commits
14 Commits
0.0.22-Rel
...
0.0.25-Rel
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b91e7f4c9 | ||
|
|
0cf8edfefe | ||
|
|
6c401f32b9 | ||
|
|
84bbfa97e9 | ||
|
|
a2da5169db | ||
|
|
bf8defbe3c | ||
|
|
5ba935efaf | ||
|
|
0a244a4a58 | ||
|
|
ac911de6b3 | ||
|
|
74208361fd | ||
|
|
a6cb2be1a7 | ||
|
|
9267217ebd | ||
|
|
7641d4d33d | ||
|
|
05ce745dc8 |
2
.github/workflows/maven-publish.yml
vendored
2
.github/workflows/maven-publish.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
@@ -73,5 +73,11 @@ public class ClientSettings {
|
|||||||
*/
|
*/
|
||||||
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ public interface TikTokEventBuilder<T> {
|
|||||||
|
|
||||||
T onWebsocketMessage(TikTokEventConsumer<TikTokWebsocketMessageEvent> event);
|
T onWebsocketMessage(TikTokEventConsumer<TikTokWebsocketMessageEvent> event);
|
||||||
|
|
||||||
|
T onReconnecting(TikTokEventConsumer<TikTokReconnectingEvent> event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
|||||||
@@ -6,4 +6,6 @@ import lombok.Data;
|
|||||||
public class LiveRoomMeta
|
public class LiveRoomMeta
|
||||||
{
|
{
|
||||||
private int status;
|
private int status;
|
||||||
|
|
||||||
|
private boolean ageRestricted;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package io.github.jwdeveloper.tiktok.mappers;
|
||||||
|
|
||||||
|
public interface Mapper<SOURCE,TARGET>
|
||||||
|
{
|
||||||
|
TARGET mapFrom(SOURCE source);
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
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());
|
var roomId = apiService.fetchRoomId(liveRoomInfo.getUserName());
|
||||||
liveRoomInfo.setRoomId(roomId);
|
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?");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,46 +27,20 @@ public class TikTokApiService {
|
|||||||
this.clientSettings = clientSettings;
|
this.clientSettings = clientSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if (sessionId) {
|
|
||||||
// Update sessionId
|
|
||||||
this.#options.sessionId = sessionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.#options.sessionId) {
|
public void updateSessionId()
|
||||||
throw new Error('Missing SessionId. Please provide your current SessionId to use this feature.');
|
{
|
||||||
|
if(clientSettings.getSessionId() == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if(clientSettings.getSessionId().isEmpty())
|
||||||
try {
|
{
|
||||||
// Retrieve current room_id if not connected
|
return;
|
||||||
if (!this.#isConnected) {
|
|
||||||
await this.#retrieveRoomId();
|
|
||||||
}
|
}
|
||||||
|
tiktokHttpClient.setSessionId(clientSettings.getSessionId());
|
||||||
// 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()) {
|
||||||
throw new TikTokLiveException("Session ID must not be Empty");
|
throw new TikTokLiveException("Session ID must not be Empty");
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -124,7 +124,7 @@ public class TikTokWebSocketListener extends WebSocketClient {
|
|||||||
.build();
|
.build();
|
||||||
if(isNotClosing())
|
if(isNotClosing())
|
||||||
{
|
{
|
||||||
send(serverInfo.toByteString().asReadOnlyByteBuffer());
|
send(serverInfo.toByteString().toByteArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
github: [jwdeveloper]
|
|
||||||
patreon: jwdeveloper
|
patreon: jwdeveloper
|
||||||
custom: ["https://www.buymeacoffee.com/jwdev"]
|
custom: ["https://www.buymeacoffee.com/jwdev"]
|
||||||
61
README.md
61
README.md
@@ -37,7 +37,7 @@ Do you prefer other programming languages?
|
|||||||
<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>
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -6,5 +6,6 @@ public class Main {
|
|||||||
{
|
{
|
||||||
var generator = new ReadmeGenerator();
|
var generator = new ReadmeGenerator();
|
||||||
generator.generate();
|
generator.generate();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user