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-05 16:52:05 +02:00
parent f0d7cb0cbc
commit 9f4c1c8c92
26 changed files with 200 additions and 89 deletions

View File

@@ -25,6 +25,8 @@ package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.events.messages.*;
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftComboFinishedEvent;
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomEvent;
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomUserInfoEvent;
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
@@ -54,6 +56,7 @@ public interface TikTokEventBuilder<T> {
T onGift(TikTokEventConsumer<TikTokGiftEvent> event);
T onQuestion(TikTokEventConsumer<TikTokQuestionEvent> event);
T onSubscribe(TikTokEventConsumer<TikTokSubscribeEvent> event);
@@ -80,7 +83,6 @@ public interface TikTokEventBuilder<T> {
T onDisconnected(TikTokEventConsumer<TikTokDisconnectedEvent> event);
T onError(TikTokEventConsumer<TikTokErrorEvent> event);
T onEvent(TikTokEventConsumer<TikTokEvent> event);
@@ -99,7 +101,7 @@ public interface TikTokEventBuilder<T> {
//T onCaption(TikTokEventConsumer<TikTokCaptionEvent> event);
//T onQuestion(TikTokEventConsumer<TikTokQuestionEvent> event);
//T onRoomPin(TikTokEventConsumer<TikTokRoomPinEvent> event);

View File

@@ -41,6 +41,7 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent {
private final Picture rightIcon;
private final String eventName;
private final int duration;
private BarrageParam barrageParam;
public TikTokBarrageEvent(WebcastBarrageMessage msg) {
@@ -50,15 +51,7 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent {
backGround = Picture.map(msg.getBackground());
rightIcon = Picture.map(msg.getRightIcon());
duration = msg.getDuration();
switch (msg.getMsgType()) {
case GRADEUSERENTRANCENOTIFICATION:
barrageParam = new UserGradeParam(msg.getUserGradeParam());
case FANSLEVELUPGRADE:
barrageParam = new FansLevelParam(msg.getFansLevelParam());
case SUBSCRIBEGIFT:
barrageParam = new SubscribeGiftParam(msg.getSubscribeGiftParam());
default:
barrageParam = new BarrageParam();
}
barrageParam = BarrageParam.map(msg);
}
}

View File

@@ -38,7 +38,7 @@ public class TikTokCaptionEvent extends TikTokHeaderEvent {
String text;
public TikTokCaptionEvent(WebcastCaptionMessage msg) {
super(msg.getCommon());
super(msg.getCommon());
captionTimeStamp = msg.getTimeStamp();
iSOLanguage = msg.getCaptionData().getLanguage();
text = msg.getCaptionData().getText();

View File

@@ -28,11 +28,15 @@ import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastImDeleteMessage;
import lombok.Getter;
import java.util.List;
@Getter
@EventMeta(eventType = EventType.Message)
public class TikTokIMDeleteEvent extends TikTokHeaderEvent {
List<Long> userIds;
public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) {
super(msg.getHeader());
super(msg.getCommon());
this.userIds = msg.getDeleteUserIdsListList();
}
}

View File

@@ -32,7 +32,6 @@ import lombok.Getter;
@EventMeta(eventType = EventType.Message)
public class TikTokLinkMicFanTicketEvent extends TikTokHeaderEvent {
public TikTokLinkMicFanTicketEvent(WebcastLinkMicFanTicketMethod msg) {
super(msg.getCommon());
}

View File

@@ -36,22 +36,15 @@ Triggered every time someone asks a new question via the question feature.
@EventMeta(eventType = EventType.Message)
public class TikTokQuestionEvent extends TikTokHeaderEvent {
private final Long questionId;
private final String text;
private final Long time;
private User user;
private final User user;
public TikTokQuestionEvent(WebcastQuestionNewMessage msg) {
super(msg.getCommon());
var data = msg.getDetails();
questionId = data.getId();
text = data.getText();
time = data.getTimeStamp();
if (data.hasUser()) {
user = new User(data.getUser());
}
user = User.map(data.getUser());
}
}

View File

@@ -42,6 +42,7 @@ public class TikTokShopEvent extends TikTokHeaderEvent {
private final String shopName;
//Not working
public TikTokShopEvent(WebcastOecLiveShoppingMessage msg) {
super(msg.getCommon());
var data = msg.getShopData();

View File

@@ -40,8 +40,6 @@ import lombok.Getter;
public class TikTokGiftEvent extends TikTokHeaderEvent {
private final Gift gift;
private final User user;
private final String purchaseId;
private final String receipt;
private final int combo;
private final boolean comboFinished;
private final int comboIndex;
@@ -49,9 +47,7 @@ public class TikTokGiftEvent extends TikTokHeaderEvent {
public TikTokGiftEvent(Gift gift, WebcastGiftMessage msg) {
super(msg.getCommon());
this.gift = gift;
user = User.map(msg.getUser());
purchaseId = msg.getOrderId();
receipt = msg.getMonitorExtra();
user = User.map(msg.getUser(),msg.getUserIdentity());
combo = msg.getComboCount();
comboFinished = msg.getRepeatEnd() > 0;
comboIndex = msg.getRepeatCount();

View File

@@ -20,7 +20,7 @@
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.github.jwdeveloper.tiktok.events.messages;
package io.github.jwdeveloper.tiktok.events.messages.room;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;

View File

@@ -20,11 +20,12 @@
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.github.jwdeveloper.tiktok.events.messages;
package io.github.jwdeveloper.tiktok.events.messages.room;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.events.messages.TikTokCommentEvent;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastRoomPinMessage;
import lombok.Getter;

View File

@@ -20,7 +20,7 @@
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.github.jwdeveloper.tiktok.events.messages;
package io.github.jwdeveloper.tiktok.events.messages.room;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;

View File

@@ -30,10 +30,9 @@ import java.util.UUID;
public class Emote {
String emoteId;
Picture picture;
UUID uuid;
public static Emote map(io.github.jwdeveloper.tiktok.messages.data.Emote input) {
return new Emote(input.getEmoteId(), Picture.map(input.getImage()), UUID.fromString(input.getUuid()));
return new Emote(input.getEmoteId(), Picture.map(input.getImage()));
}
}

View File

@@ -25,7 +25,9 @@ package io.github.jwdeveloper.tiktok.events.objects;
import io.github.jwdeveloper.tiktok.events.objects.users.User;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.Value;
import java.util.List;
@@ -47,16 +49,14 @@ public class Text {
}
public static TextPiece mapTextPiece(io.github.jwdeveloper.tiktok.messages.data.Text.TextPiece input)
{
return switch (input.getType())
{
public static TextPiece mapTextPiece(io.github.jwdeveloper.tiktok.messages.data.Text.TextPiece input) {
return switch (input.getType()) {
case 11 -> {
var user = User.map(input.getUserValue().getUser());
yield new UserTextPiece(user);
}
//case 12 -> new GiftTextPiece(input.getStringValue());
default -> throw new TikTokLiveException("Unknown text piece");
default -> new StringTextPiece(input.getStringValue());
};
}
@@ -66,8 +66,18 @@ public class Text {
}
@Value
public static class StringTextPiece extends TextPiece {
String text;
public StringTextPiece(String text) {
this.text = text;
}
}
public static class UserTextPiece extends TextPiece {
User user;
public UserTextPiece(User user) {
this.user = user;
}

View File

@@ -22,7 +22,17 @@
*/
package io.github.jwdeveloper.tiktok.events.objects.barrage;
public class BarrageParam
{
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastBarrageMessage;
public class BarrageParam {
//Figure out barrage type:11
public static BarrageParam map(WebcastBarrageMessage msg) {
return switch (msg.getMsgType()) {
case GRADEUSERENTRANCENOTIFICATION -> new UserGradeParam(msg.getUserGradeParam());
case FANSLEVELUPGRADE -> new FansLevelParam(msg.getFansLevelParam());
case SUBSCRIBEGIFT -> new SubscribeGiftParam(msg.getSubscribeGiftParam());
default -> new BarrageParam();
};
}
}

View File

@@ -29,5 +29,5 @@ import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
public interface TikTokMessageHandler
{
TikTokEvent handle(WebcastResponse.Message message) throws Exception;
TikTokEvent handle(byte[] messagePayload) throws Exception;
}

View File

@@ -244,7 +244,6 @@ message WebcastEnvelopeMessage {
// @EnvelopeInfo
// proto.webcast.im.EnvelopeMessage
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message EnvelopeInfo {
string envelopeId = 1;
int64 businessType = 2; // @warning Enum not found, should be BusinessType
@@ -283,8 +282,9 @@ message WebcastGoalUpdateMessage {
// Message related to Chat-moderation?
//@WebcastImDeleteMessage
message WebcastImDeleteMessage {
Common header = 1;
bytes data = 3;
Common common = 1;
repeated int64 deleteMsgIdsList = 2;
repeated int64 deleteUserIdsList = 3;
}
//@WebcastInRoomBannerMessage
@@ -708,4 +708,12 @@ message WebcastLinkLayerMessage {
}
message RoomVerifyMessage {
Common common = 1;
int32 action = 2;
string content = 3;
int64 noticeType = 4;
bool closeRoom = 5;
}