Breaking changes:

'Gift': changed from class to enum, so now you can handle
incoming gifts in switch

`Events`
- new:
     onGiftComboFinished
- Removed:
      onGiftBrodcast
- Rename:
     onGiftMessage -> onGift
     onRoomPinMessage -> onRoomPin
     onRoomMessage -> onRoom
     onLinkMessage -> onLink
     onBarrageMessage -> onBarrage
     onPollMessage -> onPoll
     onShopMessage -> onShop
     onDetectMessage -> onDetect

`GiftManager`
   added:
      registerGift
      findById
      findByName
      getGifts
   removed:
      getActiveGifts
This commit is contained in:
JW
2023-10-12 03:41:36 +02:00
parent b18ca25865
commit 2d6111ef4d
48 changed files with 657 additions and 180 deletions

View File

@@ -45,6 +45,7 @@ public class Main {
app.get("/tiktok/connect", handler::connect);
app.get("/tiktok/disconnect", handler::disconnect);
app.get("/tiktok/events", handler::events);
app.get("/tiktok/events/pages", handler::eventPages);
app.get("/tiktok/events/message", handler::eventMessage);
}
}

View File

@@ -23,7 +23,6 @@
package io.github.jwdeveloper.tiktok.webviewer;
import com.google.protobuf.InvalidProtocolBufferException;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
import io.github.jwdeveloper.tiktok.tools.collector.client.MessageCollector;
import io.github.jwdeveloper.tiktok.tools.collector.client.TikTokMessageCollectorClient;
import io.github.jwdeveloper.tiktok.tools.collector.client.TikTokMessagessCollectorBuilder;
@@ -34,6 +33,7 @@ import java.sql.SQLException;
import java.util.Base64;
import java.util.List;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
public class TikTokManager {
TikTokMessagessCollectorBuilder client;
@@ -45,7 +45,17 @@ public class TikTokManager {
public void connect(String name) throws SQLException {
disconnect();
client = TikTokMessageCollectorClient.create(msgCollector, "web").addUser(name);
client = TikTokMessageCollectorClient.create(msgCollector, "web")
.addOnBuilder(liveClientBuilder ->
{
liveClientBuilder.onGift((liveClient, event) ->
{
});
})
.addUser(name);
client.buildAndRun();
}
@@ -58,19 +68,49 @@ public class TikTokManager {
}
public MessageDto getMessage(String event) throws InvalidProtocolBufferException {
public MessageDto getMessage(String event, String index) throws InvalidProtocolBufferException {
var eventData = msgCollector.getMessages().get(event);
var messages = eventData.stream().toList();
var random = new Random();
var index = random.nextInt(messages.size()-1);
var msg = messages.get(index);
var msgIndex = 0;
if (index != null && !index.isEmpty()) {
msgIndex = Integer.parseInt(index);
msgIndex = Math.min(msgIndex, messages.size() - 1);
msgIndex = Math.max(msgIndex, 0);
}
var msg = messages.get(msgIndex);
var bytes = Base64.getDecoder().decode(msg.getEventData());
var content = MessageUtil.getContent(event,bytes);
var content = MessageUtil.getContent(event, bytes);
return new MessageDto(content, msg.getEventData(), event);
}
public PagesDto getPages(String event) throws InvalidProtocolBufferException {
var eventData = msgCollector.getMessages().get(event);
var messages = eventData.stream().toList();
var counter = new AtomicInteger(-1);
var pages = messages.stream().map(e ->
{
return "http://localhost:8001/tiktok/events/message?eventName=" + event + "&page=" + counter.incrementAndGet();
}).toList();
return new PagesDto(event, messages.size(), pages);
}
@Value
public class PagesDto {
String eventName;
int pages;
List<String> links;
}
@Value
public class MessageDto {
String content;

View File

@@ -23,6 +23,7 @@
package io.github.jwdeveloper.tiktok.webviewer.handlers;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.protobuf.InvalidProtocolBufferException;
import io.github.jwdeveloper.tiktok.webviewer.TikTokManager;
import io.javalin.http.Context;
@@ -55,7 +56,7 @@ public class TikTokHandler {
public void events(Context context) throws SQLException {
var events = tikTokManager.getEventsNames();
var gson = new Gson();
var gson = getGson();
var result = gson.toJson(events);
context.result(result);
context.status(200);
@@ -63,8 +64,22 @@ public class TikTokHandler {
public void eventMessage(Context context) throws InvalidProtocolBufferException {
String name = context.queryParam("eventName");
var result = tikTokManager.getMessage(name);
var gson = new Gson();
String page = context.queryParam("page");
var result = tikTokManager.getMessage(name, page);
var gson = getGson();
context.result(gson.toJson(result));
}
public void eventPages(Context context) throws InvalidProtocolBufferException {
String name = context.queryParam("eventName");
var result = tikTokManager.getPages(name);
var gson = getGson();
context.result(gson.toJson(result));
}
public Gson getGson() {
return new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
}
}

View File

@@ -103,6 +103,10 @@
language: 'json',
theme: 'vs-dark'
});
editor.onDidChangeModelContent(function () {
console.log("hello")
});
});
</script>
@@ -130,11 +134,8 @@
</div>
<div class="col-md-10 editor-container ">
<nav aria-label="Page navigation example">
<ul class="pagination">
<ul id="pages" class="pagination">
<li class="page-item btn-primary"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
@@ -156,10 +157,9 @@
<script>
async function connect() {
let name = document.getElementById('name').value;
name = "bangbetmenygy"
// name = "bangbetmenygy"
let response = await fetch(`http://localhost:8001/tiktok/connect?name=${name}`);
let greeting = await response.text();
console.log("connect",greeting);
@@ -176,13 +176,39 @@
{
let response = await fetch(`http://localhost:8001/tiktok/events/message?eventName=${event}`);
let json = await response.text();
// json = json.replace(/\/n/g, "\n");
let root= JSON.parse(json);
console.log(root)
editor.setValue(root.content);
}
async function loadMessageLink(link)
{
let response = await fetch(link);
let json = await response.text();
let root= JSON.parse(json);
editor.setValue(root.content);
}
async function loadPagination(event)
{
let response = await fetch(`http://localhost:8001/tiktok/events/pages?eventName=${event}`);
let json = await response.text();
let object = JSON.parse(json);
let pages = object.links;
console.log("PAGES: ",pages)
$("#pages").empty();
$.each(pages, function(index, element) {
let content = $('<button>',{
class: 'btn btn-primary',
text: index
}).click(async function()
{
await loadMessageLink(element);
console.log(editor)
});
$("#pages").append(content);
});
}
async function showEvents() {
let response = await fetch(`http://localhost:8001/tiktok/events`);
let json = await response.text();
@@ -197,6 +223,7 @@
}).click(async function()
{
await loadMessage(event);
await loadPagination(event);
});
$("#eventList").append(listItem);
});
@@ -213,6 +240,9 @@
}
var connected = false;
var paginationIndex = 0;
var maxPages = 10;
var pages = [];
setInterval(loop, 1000)
showEvents()