LiveRoomInfo
    + new method getConnectionState() getting current state of connection
   + ListenersManager
     getBindingModels() renamed to getListeners()

  + Introducing documentation, each public interface got small documentation

  + New property in config .setSessionId()

  + New event: onReconnecting()

Bugs:
   CommentEvent was throwing mapping exception
This commit is contained in:
JW
2023-09-13 06:32:36 +02:00
parent bc045d49dc
commit 6e092dd362
27 changed files with 413 additions and 172 deletions

View File

@@ -1,7 +1,6 @@
package io.github.jwdeveloper.tiktok.tools.collector;
import io.github.jwdeveloper.tiktok.TikTokLive;
import io.github.jwdeveloper.tiktok.events.objects.Badge;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException;
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
import io.github.jwdeveloper.tiktok.tools.collector.tables.ExceptionInfoModel;
@@ -13,9 +12,10 @@ import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
public class Main {
public class RunCollector {
//https://protobuf-decoder.netlify.app/
//https://streamdps.com/tiktok-widgets/gifts/
/*
mia_tattoo
moniczkka
@@ -25,8 +25,6 @@ public class Main {
public static List<String> ignoredEvents;
public static void main(String[] args) throws SQLException {
ignoredEvents = new ArrayList<>();
//ignoredEvents = List.of("TikTokJoinEvent","TikTokLikeEvent");
@@ -34,27 +32,26 @@ public class Main {
var db = new TikTokDatabase("test");
db.init();
var errors = db.selectErrors();
var users = new ArrayList<String>();
// users.add("mia_tattoo");
// users.add("moniczkka");
// users.add("besin1276");
users.add("jackwoln");
for(var user : users)
{
// users.add("mia_tattoo");
// users.add("moniczkka");
// users.add("besin1276");
users.add("evequinte96");
for (var user : users) {
runTikTokLiveInstance(user, db);
}
}
private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase)
{
private static void runTikTokLiveInstance(String tiktokUser, TikTokDatabase tikTokDatabase) {
TikTokLive.newClient(tiktokUser)
.onWebsocketMessage((liveClient, event) ->
{
var eventName = event.getEvent().getClass().getSimpleName();
if(ignoredEvents.contains(eventName))
{
if (ignoredEvents.contains(eventName)) {
return;
}
@@ -67,32 +64,32 @@ public class Main {
.build();
tikTokDatabase.insertMessage(model);
System.out.println("EVENT: ["+tiktokUser+"] " + eventName);
System.out.println("EVENT: [" + tiktokUser + "] " + eventName);
})
.onError((liveClient, event) ->
{
var exception = event.getException();
var exceptionContent = ExceptionInfoModel.getStackTraceAsString(exception);
var builder = TikTokErrorModel.builder();
var errorModel = new TikTokErrorModel();
if (exception instanceof TikTokLiveMessageException ex) {
builder.hostName(tiktokUser)
.errorName(ex.messageName())
.errorType("error-message")
.exceptionContent(exceptionContent)
.message(ex.messageToBase64())
.response(ex.webcastResponseToBase64());
errorModel.setHostName(tiktokUser);
errorModel.setErrorName(ex.messageName());
errorModel.setErrorType("error-message");
errorModel.setExceptionContent(exceptionContent);
errorModel.setMessage(ex.messageToBase64());
errorModel.setResponse(ex.webcastResponseToBase64());
} else {
builder.hostName(tiktokUser)
.errorName(exception.getClass().getSimpleName())
.errorType("error-system")
.exceptionContent(exceptionContent)
.message("")
.response("");
errorModel.setHostName(tiktokUser);
errorModel.setErrorName(exception.getClass().getSimpleName());
errorModel.setErrorType("error-system");
errorModel.setExceptionContent(exceptionContent);
errorModel.setMessage("");
errorModel.setResponse("");
}
var error = builder.build();
tikTokDatabase.insertError(error);
System.out.println("ERROR: "+error.getErrorName());
tikTokDatabase.insertError(errorModel);
System.out.println("ERROR: " + errorModel.getErrorName());
exception.printStackTrace();
})

View File

@@ -5,11 +5,11 @@ import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokMessageModel;
import org.jdbi.v3.core.Jdbi;
import org.jdbi.v3.sqlobject.SqlObjectPlugin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class TikTokDatabase
{
@@ -24,12 +24,13 @@ public class TikTokDatabase
public void init() throws SQLException {
var jdbcUrl ="jdbc:sqlite:"+database+".db";
var connection = DriverManager.getConnection(jdbcUrl);
Jdbi jdbi = Jdbi.create(jdbcUrl)
var jdbi = Jdbi.create(jdbcUrl)
.installPlugin(new SqlObjectPlugin());
jdbi.useHandle(handle -> {
handle.execute(SqlConsts.CREATE_MESSAGES_TABLE);
handle.execute(SqlConsts.CREATE_ERROR_TABLE);
});
// jdbi.registerRowMapper(new TikTokErrorModelMapper());
messagesTable = jdbi.onDemand(TikTokMessageModelDAO.class);
errorTable = jdbi.onDemand(TikTokErrorModelDAO.class);
}
@@ -47,4 +48,9 @@ public class TikTokDatabase
message.setCreatedAt(dateFormat.format(new Date()));
errorTable.insertTikTokMessage(message);
}
public List<TikTokErrorModel> selectErrors()
{
return errorTable.selectErrors();
}
}

View File

@@ -2,12 +2,21 @@ package io.github.jwdeveloper.tiktok.tools.collector.db;
import io.github.jwdeveloper.tiktok.tools.collector.tables.TikTokErrorModel;
import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
import org.jdbi.v3.sqlobject.customizer.BindBean;
import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.sqlobject.statement.SqlUpdate;
import java.util.List;
@RegisterBeanMapper(TikTokErrorModel.class)
public interface TikTokErrorModelDAO
{
@SqlUpdate("INSERT INTO TikTokErrorModel (hostName, errorName, errorType, exceptionContent, message, response, createdAt) " +
"VALUES (:hostName, :errorName, :errorType, :exceptionContent, :message, :response, :createdAt)")
void insertTikTokMessage(@BindBean TikTokErrorModel message);
@SqlQuery("SELECT * FROM TikTokErrorModel")
List<TikTokErrorModel> selectErrors();
}

View File

@@ -1,10 +1,8 @@
package io.github.jwdeveloper.tiktok.tools.collector.tables;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class TikTokErrorModel
{
private Integer id;

View File

@@ -3,8 +3,6 @@ package io.github.jwdeveloper.tiktok.tools.collector.tables;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
@Data
@Builder

View File

@@ -0,0 +1,51 @@
package io.github.jwdeveloper.tiktok.tools.tester;
import com.google.protobuf.InvalidProtocolBufferException;
import io.github.jwdeveloper.tiktok.ClientSettings;
import io.github.jwdeveloper.tiktok.TikTokGiftManager;
import io.github.jwdeveloper.tiktok.TikTokRoomInfo;
import io.github.jwdeveloper.tiktok.events.messages.TikTokErrorEvent;
import io.github.jwdeveloper.tiktok.handlers.TikTokEventObserver;
import io.github.jwdeveloper.tiktok.handlers.TikTokMessageHandlerRegistration;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import io.github.jwdeveloper.tiktok.tools.collector.db.TikTokDatabase;
import java.sql.SQLException;
import java.util.Base64;
import java.util.logging.Logger;
public class RunTester {
public static void main(String[] args) throws SQLException, InvalidProtocolBufferException {
var db = new TikTokDatabase("test");
db.init();
var errors = db.selectErrors();
var handler = getMessageHandler();
for (var error : errors) {
var bytes = Base64.getDecoder().decode(error.getResponse());
var response = WebcastResponse.parseFrom(bytes);
handler.handle(null,response);
}
}
public static TikTokMessageHandlerRegistration getMessageHandler()
{
var observer = new TikTokEventObserver();
observer.<TikTokErrorEvent>subscribe(TikTokErrorEvent.class,(liveClient, event) ->
{
event.getException().printStackTrace();
});
var settings = new ClientSettings();
//settings.setPrintMessageData(true);
var logger = Logger.getGlobal();
var roomInfo = new TikTokRoomInfo();
var manager = new TikTokGiftManager();
return new TikTokMessageHandlerRegistration(observer,settings,logger,manager,roomInfo);
}
}