Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,15 @@ public class ClientSettings {
* Whether to print Logs to Console
*/

private boolean printToConsole;
private boolean printToConsole = true;
/**
* LoggingLevel for Logs
*/
private Level logLevel;


/**
* Optional: Use it if you need to change TikTok live hostname in builder
* Optional: Use it if you need to change TikTok live hostname in builder
*/
private String hostName;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface TikTokEventHandler
public @interface TikTokEventObserver
{

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ public class TikTokCommentEvent extends TikTokHeaderEvent {

public TikTokCommentEvent(WebcastChatMessage msg) {
super(msg.getCommon());
user = User.map(msg.getUser());
user = User.map(msg.getUser(),msg.getUserIdentity());
text = msg.getContent();
visibleToSender = msg.getVisibleToSender();
getUserLanguage = msg.getContentLanguage();
mentionedUser = User.map(msg.getAtUser(),msg.getUserIdentity());
mentionedUser = User.map(msg.getAtUser());
pictures = msg.getEmotesListList().stream().map(e -> Picture.map(e.getEmote().getImage())).toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.github.jwdeveloper.tiktok.data.events.http;

import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
import io.github.jwdeveloper.tiktok.data.models.http.HttpData;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
@EventMeta(eventType = EventType.Debug)
public class TikTokHttpResponseEvent extends TikTokEvent
{
String url;

HttpData response;

HttpData request;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.github.jwdeveloper.tiktok.data.models.http;

import lombok.Data;

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.*;

@Data
public class HttpData {
String url;
String method;
Map<String, List<String>> headers = new TreeMap<>();
Map<String, String> parameters = new TreeMap<>();
int status;
String body = "";


public static HttpData map(HttpRequest request) {
var data = new HttpData();
data.setUrl(request.uri().getPath());
data.setMethod(request.method());
data.setParameters(extractQueryParams(request.uri()));
data.setStatus(200);
if (request.bodyPublisher().isPresent()) {
data.setBody(request.bodyPublisher().get().toString());
}
data.setHeaders(Collections.unmodifiableMap(request.headers().map()));
return data;
}

public static HttpData map(HttpResponse<String> response) {
var data = new HttpData();
data.setUrl(response.uri().getPath());
data.setMethod(response.request().method());
data.setParameters(extractQueryParams(response.uri()));
data.setStatus(200);
data.setBody(response.body());
data.setHeaders(Collections.unmodifiableMap(response.headers().map()));
return data;
}


private static Map<String, String> extractQueryParams(URI uri) {
Map<String, String> params = new HashMap<>();
String query = uri.getQuery();
if (query != null && !query.isEmpty()) {
for (String param : query.split("&")) {
String[] keyValue = param.split("=");
if (keyValue.length > 1) {
params.put(keyValue[0], keyValue[1]);
} else {
params.put(keyValue[0], ""); // Empty value for parameter without explicit value
}
}
}
return params;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
*/
package io.github.jwdeveloper.tiktok.live;

import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
import io.github.jwdeveloper.tiktok.listener.TikTokEventListener;

Expand Down Expand Up @@ -55,6 +56,11 @@ public interface LiveClient {
void disconnect();


/**
* You to manually trigger event
*/
void publishEvent(TikTokEvent event);

/**
* Get information about gifts
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.github.jwdeveloper.tiktok.data.events.*;
import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftComboEvent;
import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent;
import io.github.jwdeveloper.tiktok.data.events.http.TikTokHttpResponseEvent;
import io.github.jwdeveloper.tiktok.data.events.room.TikTokRoomInfoEvent;
import io.github.jwdeveloper.tiktok.data.events.social.TikTokFollowEvent;
import io.github.jwdeveloper.tiktok.data.events.social.TikTokJoinEvent;
Expand All @@ -39,61 +40,140 @@
public interface EventsBuilder<T> {

/**
* Method used to register own custom events
* @param eventClazz event class
* @param event action
* Invoked whenever specified event is triggered
*
* @param eventClass event class
* @param action action
*/
<E extends TikTokEvent> T onCustomEvent(Class<E> eventClazz, EventConsumer<E> event);
<E extends TikTokEvent> T onEvent(Class<E> eventClass, EventConsumer<E> action);

T onRoomInfo(EventConsumer<TikTokRoomInfoEvent> event);

T onComment(EventConsumer<TikTokCommentEvent> event);
/**
* Invoked whenever any event is triggered
*
* @param action
* @return
*/
T onEvent(EventConsumer<TikTokEvent> action);

/**
* Invoked when information about room (live) got updated such as viewer count, etc..
*
* @param action
* @return
*/
T onRoomInfo(EventConsumer<TikTokRoomInfoEvent> action);

/**
* Invoked when someone send message to chat
*
* @param action
* @return
*/
T onComment(EventConsumer<TikTokCommentEvent> action);

T onWebsocketMessage(EventConsumer<TikTokWebsocketMessageEvent> event);

T onWebsocketResponse(EventConsumer<TikTokWebsocketResponseEvent> event);
/**
* Invoked when TikTokLiveJava makes http request and getting response
*
* @param action
* @return
*/
T onHttpResponse(EventConsumer<TikTokHttpResponseEvent> action);

/**
* Invoked when TikTok protocolBuffer data "message" was successfully mapped to event
* events contains protocol-buffer "Message" and TikTokLiveJava "Event"
*
* @param action
* @return
*/
T onWebsocketMessage(EventConsumer<TikTokWebsocketMessageEvent> action);

T onWebsocketUnhandledMessage(EventConsumer<TikTokWebsocketUnhandledMessageEvent> event);
/**
* Invoked when there was not found event mapper for TikTok protocolBuffer data "message"
*
* @param action
* @return
*/
T onWebsocketUnhandledMessage(EventConsumer<TikTokWebsocketUnhandledMessageEvent> action);

/**
* Invoked every time TikTok sends protocolBuffer data to websocket
* Response contains list of messages that are later mapped to events
* @param action
* @return
*/
T onWebsocketResponse(EventConsumer<TikTokWebsocketResponseEvent> action);

T onGiftCombo(EventConsumer<TikTokGiftComboEvent> event);

T onGift(EventConsumer<TikTokGiftEvent> event);
/**
* Invoked for gifts that has no combo, or when combo finishes
* @param action
* @return
*/
T onGift(EventConsumer<TikTokGiftEvent> action);

T onQuestion(EventConsumer<TikTokQuestionEvent> event);
/**
* Invoked for gifts that has combo options such as roses
* @param action
* @return
*/
T onGiftCombo(EventConsumer<TikTokGiftComboEvent> action);

T onSubscribe(EventConsumer<TikTokSubscribeEvent> event);

T onFollow(EventConsumer<TikTokFollowEvent> event);
T onQuestion(EventConsumer<TikTokQuestionEvent> action);

T onLike(EventConsumer<TikTokLikeEvent> event);
T onSubscribe(EventConsumer<TikTokSubscribeEvent> action);

T onEmote(EventConsumer<TikTokEmoteEvent> event);
T onFollow(EventConsumer<TikTokFollowEvent> action);

T onJoin(EventConsumer<TikTokJoinEvent> event);
T onLike(EventConsumer<TikTokLikeEvent> action);

T onShare(EventConsumer<TikTokShareEvent> event);
T onEmote(EventConsumer<TikTokEmoteEvent> action);

// T onChest(EventConsumer<TikTokChestEvent> event);
T onJoin(EventConsumer<TikTokJoinEvent> action);

T onLivePaused(EventConsumer<TikTokLivePausedEvent> event);
T onShare(EventConsumer<TikTokShareEvent> action);

T onLiveUnpaused(EventConsumer<TikTokLiveUnpausedEvent> event);
T onLivePaused(EventConsumer<TikTokLivePausedEvent> action);

T onLiveEnded(EventConsumer<TikTokLiveEndedEvent> event);
T onLiveUnpaused(EventConsumer<TikTokLiveUnpausedEvent> action);

T onConnected(EventConsumer<TikTokConnectedEvent> event);
T onLiveEnded(EventConsumer<TikTokLiveEndedEvent> action);

T onReconnecting(EventConsumer<TikTokReconnectingEvent> event);
/**
* Invoked when client has been successfully connected to live
* @param action
* @return
*/
T onConnected(EventConsumer<TikTokConnectedEvent> action);

T onDisconnected(EventConsumer<TikTokDisconnectedEvent> event);
/**
* Invoked when client tries to reconnect
* @param action
* @return
*/
T onReconnecting(EventConsumer<TikTokReconnectingEvent> action);

T onError(EventConsumer<TikTokErrorEvent> event);
/**
* Invoked when client disconnected
* @param action
* @return
*/
T onDisconnected(EventConsumer<TikTokDisconnectedEvent> action);

T onEvent(EventConsumer<TikTokEvent> event);
/**
* Invoked when exception was throed inside client or event handler
* @param action
* @return
*/
T onError(EventConsumer<TikTokErrorEvent> action);


// TODO Figure out how those events works
// T onChest(EventConsumer<TikTokChestEvent> event);

//T onLinkMicFanTicket(TikTokEventConsumer<TikTokLinkMicFanTicketEvent> event);

//T onEnvelope(TikTokEventConsumer<TikTokEnvelopeEvent> event);
Expand Down
Loading