mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-27 08:49:40 -05:00
More updated to TikTokLinkMicBattleEvent, updated Gift since its no longer enum we do not need to use Unsafe, and added default mappings for WebcastLinkMicBattle and WebcastLinkMicArmies
This commit is contained in:
@@ -27,7 +27,7 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent;
|
|||||||
import io.github.jwdeveloper.tiktok.data.models.battles.*;
|
import io.github.jwdeveloper.tiktok.data.models.battles.*;
|
||||||
import io.github.jwdeveloper.tiktok.messages.enums.LinkMicBattleStatus;
|
import io.github.jwdeveloper.tiktok.messages.enums.LinkMicBattleStatus;
|
||||||
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMicBattle;
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMicBattle;
|
||||||
import lombok.Getter;
|
import lombok.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -43,6 +43,8 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent
|
|||||||
true if battle is finished otherwise false
|
true if battle is finished otherwise false
|
||||||
*/
|
*/
|
||||||
private final boolean finished;
|
private final boolean finished;
|
||||||
|
@Getter(AccessLevel.NONE)
|
||||||
|
private final boolean oneVsOne;
|
||||||
private final List<Team> teams;
|
private final List<Team> teams;
|
||||||
|
|
||||||
public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
|
public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
|
||||||
@@ -53,6 +55,7 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent
|
|||||||
if (msg.getHostTeamCount() == 2) { // 1v1 battle
|
if (msg.getHostTeamCount() == 2) { // 1v1 battle
|
||||||
teams.add(new Team1v1(msg.getHostTeam(0), msg));
|
teams.add(new Team1v1(msg.getHostTeam(0), msg));
|
||||||
teams.add(new Team1v1(msg.getHostTeam(1), msg));
|
teams.add(new Team1v1(msg.getHostTeam(1), msg));
|
||||||
|
oneVsOne = true;
|
||||||
} else { // 2v2 battle
|
} else { // 2v2 battle
|
||||||
if (isFinished()) {
|
if (isFinished()) {
|
||||||
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElse(null), msg));
|
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElse(null), msg));
|
||||||
@@ -61,6 +64,7 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent
|
|||||||
teams.add(new Team2v2(msg.getHostTeam(0), msg.getHostTeam(1), msg));
|
teams.add(new Team2v2(msg.getHostTeam(0), msg.getHostTeam(1), msg));
|
||||||
teams.add(new Team2v2(msg.getHostTeam(2), msg.getHostTeam(3), msg));
|
teams.add(new Team2v2(msg.getHostTeam(2), msg.getHostTeam(3), msg));
|
||||||
}
|
}
|
||||||
|
oneVsOne = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info:
|
// Info:
|
||||||
@@ -68,4 +72,12 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent
|
|||||||
// - msg.getDetailsCount() & msg.getViewerTeamCount() always is 2 only when battle is finished
|
// - msg.getDetailsCount() & msg.getViewerTeamCount() always is 2 only when battle is finished
|
||||||
// - msg.getHostTeamCount() always is 2 for 1v1 or 4 for 2v2
|
// - msg.getHostTeamCount() always is 2 for 1v1 or 4 for 2v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean is1v1() {
|
||||||
|
return oneVsOne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean is2v2() {
|
||||||
|
return !oneVsOne;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,9 +2,7 @@ package io.github.jwdeveloper.tiktok.data.models.gifts;
|
|||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import io.github.jwdeveloper.tiktok.data.models.Picture;
|
import io.github.jwdeveloper.tiktok.data.models.Picture;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class Gift {
|
public class Gift {
|
||||||
@@ -16,7 +14,7 @@ public class Gift {
|
|||||||
|
|
||||||
private final int diamondCost;
|
private final int diamondCost;
|
||||||
|
|
||||||
private final Picture picture;
|
private Picture picture;
|
||||||
|
|
||||||
private final JsonObject properties;
|
private final JsonObject properties;
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ public class TikTokLive {
|
|||||||
return new TikTokLiveHttpClient();
|
return new TikTokLiveHttpClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//I don't like it, but it is reasonable for now
|
//I don't like it, but it is reasonable for now
|
||||||
private static GiftsManager giftsManager;
|
private static GiftsManager giftsManager;
|
||||||
|
|
||||||
@@ -108,6 +107,4 @@ public class TikTokLive {
|
|||||||
}
|
}
|
||||||
return giftsManager;
|
return giftsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -207,9 +207,15 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder {
|
|||||||
|
|
||||||
|
|
||||||
//LinkMic events
|
//LinkMic events
|
||||||
// mapper.webcastObjectToConstructor(WebcastLinkMicBattle.class, TikTokLinkMicBattleEvent.class);
|
mapper.forMessage(WebcastLinkMicBattle.class, (inputBytes, messageName, mapperHelper) -> {
|
||||||
// mapper.webcastObjectToConstructor(WebcastLinkMicArmies.class, TikTokLinkMicArmiesEvent.class);
|
var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicBattle.class);
|
||||||
// mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class);
|
return MappingResult.of(message, new TikTokLinkMicBattleEvent(message));
|
||||||
|
});
|
||||||
|
mapper.forMessage(WebcastLinkMicArmies.class, (inputBytes, messageName, mapperHelper) -> {
|
||||||
|
var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class);
|
||||||
|
return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message));
|
||||||
|
});
|
||||||
|
// mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class);
|
||||||
// mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class);
|
// mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class);
|
||||||
|
|
||||||
//Rank events
|
//Rank events
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
package io.github.jwdeveloper.tiktok.gifts;
|
package io.github.jwdeveloper.tiktok.gifts;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
|
import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
|
||||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
|
||||||
import io.github.jwdeveloper.tiktok.live.GiftsManager;
|
import io.github.jwdeveloper.tiktok.live.GiftsManager;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -32,11 +28,7 @@ public class TikTokGiftsManager implements GiftsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Gift getById(int giftId) {
|
public Gift getById(int giftId) {
|
||||||
if (!giftsByIdIndex.containsKey(giftId)) {
|
return giftsByIdIndex.getOrDefault(giftId, Gift.UNDEFINED);
|
||||||
return Gift.UNDEFINED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return giftsByIdIndex.get(giftId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Gift getByFilter(Predicate<Gift> filter) {
|
public Gift getByFilter(Predicate<Gift> filter) {
|
||||||
@@ -44,7 +36,7 @@ public class TikTokGiftsManager implements GiftsManager {
|
|||||||
.stream()
|
.stream()
|
||||||
.filter(filter)
|
.filter(filter)
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseGet(() -> Gift.UNDEFINED);
|
.orElse(Gift.UNDEFINED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -27,13 +27,11 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
|
|||||||
import io.github.jwdeveloper.tiktok.data.events.gift.*;
|
import io.github.jwdeveloper.tiktok.data.events.gift.*;
|
||||||
import io.github.jwdeveloper.tiktok.data.models.Picture;
|
import io.github.jwdeveloper.tiktok.data.models.Picture;
|
||||||
import io.github.jwdeveloper.tiktok.data.models.gifts.*;
|
import io.github.jwdeveloper.tiktok.data.models.gifts.*;
|
||||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
|
||||||
import io.github.jwdeveloper.tiktok.live.GiftsManager;
|
import io.github.jwdeveloper.tiktok.live.GiftsManager;
|
||||||
import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper;
|
import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper;
|
||||||
import io.github.jwdeveloper.tiktok.mappers.data.MappingResult;
|
import io.github.jwdeveloper.tiktok.mappers.data.MappingResult;
|
||||||
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import sun.misc.Unsafe;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -124,36 +122,8 @@ public class TikTokGiftEventHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gift.getPicture().getLink().endsWith(".webp"))
|
if (gift.getPicture().getLink().endsWith(".webp"))
|
||||||
{
|
gift.setPicture(Picture.map(giftMessage.getGift().getImage()));
|
||||||
updatePicture(gift, giftMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
return gift;
|
return gift;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO-kohlerpop1: I do not think this method is needed for any reason?
|
|
||||||
// TODO response:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Some generated gifts in JSON file contains .webp image format,
|
|
||||||
* that's bad since java by the defult is not supporing .webp and when URL is
|
|
||||||
* converted to Java.io.Image then image is null
|
|
||||||
*
|
|
||||||
* However, TikTok in GiftWebcast event always has image in .jpg format,
|
|
||||||
* so I take advantage of it and swap .webp url with .jpg url
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
private void updatePicture(Gift gift, WebcastGiftMessage webcastGiftMessage) {
|
|
||||||
try {
|
|
||||||
var picture = Picture.map(webcastGiftMessage.getGift().getImage());
|
|
||||||
var constructor = Unsafe.class.getDeclaredConstructors()[0];
|
|
||||||
constructor.setAccessible(true);
|
|
||||||
var field = Gift.class.getDeclaredField("picture");
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(gift, picture);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new TikTokLiveException("Unable to update picture in gift: " + gift.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user