diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokBarrageEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokBarrageEvent.java index b084be1..8db26a5 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokBarrageEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokBarrageEvent.java @@ -38,8 +38,7 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent { private final Picture rightIcon; private final String eventName; private final int duration; - - private BarrageParam barrageParam; + private final BarrageParam barrageParam; public TikTokBarrageEvent(WebcastBarrageMessage msg) { super(msg.getCommon()); @@ -49,6 +48,5 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent { rightIcon = Picture.map(msg.getRightIcon()); duration = msg.getDuration(); barrageParam = BarrageParam.map(msg); - } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCaptionEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCaptionEvent.java index 5903f57..e947f8e 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCaptionEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCaptionEvent.java @@ -38,9 +38,9 @@ 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(); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java index 5388d15..16b51eb 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java @@ -40,7 +40,7 @@ import java.util.List; public class TikTokCommentEvent extends TikTokHeaderEvent { private final User user; private final String text; - private final String getUserLanguage; + private final String userLanguage; private final User mentionedUser; private final List pictures; private final boolean visibleToSender; @@ -50,7 +50,7 @@ public class TikTokCommentEvent extends TikTokHeaderEvent { user = User.map(msg.getUser(), msg.getUserIdentity()); text = msg.getContent(); visibleToSender = msg.getVisibleToSender(); - getUserLanguage = msg.getContentLanguage(); + userLanguage = msg.getContentLanguage(); mentionedUser = User.map(msg.getAtUser()); pictures = msg.getEmotesListList().stream().map(e -> Picture.map(e.getEmote().getImage())).toList(); } @@ -66,4 +66,4 @@ public class TikTokCommentEvent extends TikTokHeaderEvent { builder.setContent(message); return new TikTokCommentEvent(builder.build()); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDetectEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDetectEvent.java index 299cbfd..4b59a20 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDetectEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDetectEvent.java @@ -30,14 +30,10 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokDetectEvent extends TikTokHeaderEvent { - String language; + private final String language; - - public TikTokDetectEvent(WebcastMsgDetectMessage msg) { - super(msg.getCommon()); - language = msg.getFromRegion(); - } - - - -} + public TikTokDetectEvent(WebcastMsgDetectMessage msg) { + super(msg.getCommon()); + language = msg.getFromRegion(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java index 1d597e3..6e5d11a 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokDisconnectedEvent.java @@ -30,9 +30,11 @@ import lombok.Getter; * Triggered when the connection gets disconnected. In that case you can call connect() again to have a reconnect logic. * Note that you should wait a little bit before attempting a reconnect to to avoid being rate-limited. */ +@Getter @EventMeta(eventType = EventType.Control) public class TikTokDisconnectedEvent extends TikTokLiveClientEvent { - @Getter private final String reason; + private final String reason; + public TikTokDisconnectedEvent(String reason) { this.reason = reason.isBlank() ? "None" : reason; } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokEnvelopeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokEnvelopeEvent.java index 57118ee..c5c5c90 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokEnvelopeEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokEnvelopeEvent.java @@ -36,9 +36,9 @@ import lombok.Value; @Value @EventMeta(eventType = EventType.Message) public class TikTokEnvelopeEvent extends TikTokHeaderEvent { - User user; - public TikTokEnvelopeEvent(WebcastEnvelopeMessage msg) { - super(msg.getCommon()); - user = User.map(msg.getEnvelopeInfo()); - } -} + User user; + public TikTokEnvelopeEvent(WebcastEnvelopeMessage msg) { + super(msg.getCommon()); + user = User.map(msg.getEnvelopeInfo()); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokIMDeleteEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokIMDeleteEvent.java index 8d8bd50..5b6795d 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokIMDeleteEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokIMDeleteEvent.java @@ -34,9 +34,10 @@ import java.util.List; @EventMeta(eventType = EventType.Message) public class TikTokIMDeleteEvent extends TikTokHeaderEvent { - List userIds; + private final List msgIds, userIds; public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) { super(msg.getCommon()); + this.msgIds = msg.getDeleteMsgIdsListList(); this.userIds = msg.getDeleteUserIdsListList(); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokInRoomBannerEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokInRoomBannerEvent.java index 02a90c3..9917ade 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokInRoomBannerEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokInRoomBannerEvent.java @@ -31,10 +31,10 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokInRoomBannerEvent extends TikTokHeaderEvent { - private final String json; + private final String json; - public TikTokInRoomBannerEvent(WebcastInRoomBannerMessage msg) { - super(msg.getHeader()); - json = msg.getJson(); - } -} + public TikTokInRoomBannerEvent(WebcastInRoomBannerMessage msg) { + super(msg.getHeader()); + json = msg.getJson(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkLayerEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkLayerEvent.java index ea350ba..9551b64 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkLayerEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkLayerEvent.java @@ -33,11 +33,7 @@ import lombok.Getter; @EventMeta(eventType = EventType.Message) public class TikTokLinkLayerEvent extends TikTokHeaderEvent { - public TikTokLinkLayerEvent(WebcastLinkLayerMessage msg) { super(msg.getCommon()); - } - - -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicMethodEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicMethodEvent.java index 46561b2..8788f9a 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicMethodEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicMethodEvent.java @@ -32,10 +32,8 @@ import lombok.Getter; @EventMeta(eventType = EventType.Message) public class TikTokLinkMicMethodEvent extends TikTokHeaderEvent { - public TikTokLinkMicMethodEvent(WebcastLinkMicMethod msg) { - super(msg.getCommon()); + public TikTokLinkMicMethodEvent(WebcastLinkMicMethod msg) { + super(msg.getCommon()); - } - - -} + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankTextEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankTextEvent.java index 6532fa0..475729c 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankTextEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankTextEvent.java @@ -32,15 +32,14 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokRankTextEvent extends TikTokHeaderEvent { - private final String eventType; + private final String eventType; - private final String label; + private final String label; - public TikTokRankTextEvent(WebcastRankTextMessage msg) { - super(msg.getCommon()); - var text = Text.map(msg.getSelfGetBadgeMsg()); - label = text.getPattern(); - eventType = text.getKey(); - } - -} + public TikTokRankTextEvent(WebcastRankTextMessage msg) { + super(msg.getCommon()); + var text = Text.map(msg.getSelfGetBadgeMsg()); + label = text.getPattern(); + eventType = text.getKey(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankUpdateEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankUpdateEvent.java index 41e972b..ae7bf38 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankUpdateEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokRankUpdateEvent.java @@ -33,13 +33,11 @@ import lombok.Getter; @EventMeta(eventType = EventType.Message) public class TikTokRankUpdateEvent extends TikTokHeaderEvent { - public TikTokRankUpdateEvent(WebcastHourlyRankMessage msg) { - super(msg.getCommon()); + public TikTokRankUpdateEvent(WebcastHourlyRankMessage msg) { + super(msg.getCommon()); + } - } - - public TikTokRankUpdateEvent(WebcastRankUpdateMessage msg) { - super(msg.getCommon()); - } - -} + public TikTokRankUpdateEvent(WebcastRankUpdateMessage msg) { + super(msg.getCommon()); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokShopEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokShopEvent.java index 584b8d0..69b8ff1 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokShopEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokShopEvent.java @@ -32,25 +32,24 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokShopEvent extends TikTokHeaderEvent { - private final String title; + private final String title; - private final String price; + private final String price; - private final Picture picture; + private final Picture picture; - private final String shopUrl; + private final String shopUrl; - private final String shopName; + private final String shopName; - //Not working - public TikTokShopEvent(WebcastOecLiveShoppingMessage msg) { - super(msg.getCommon()); - var data = msg.getShopData(); - title = data.getTitle(); - price = data.getPriceString(); - picture = new Picture(data.getImageUrl()); - shopUrl = data.getShopUrl(); - shopName = data.getShopName(); - } - -} + //Not working + public TikTokShopEvent(WebcastOecLiveShoppingMessage msg) { + super(msg.getCommon()); + var data = msg.getShopData(); + title = data.getTitle(); + price = data.getPriceString(); + picture = new Picture(data.getImageUrl()); + shopUrl = data.getShopUrl(); + shopName = data.getShopName(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokPreConnectionEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokPreConnectionEvent.java index 5fd6b00..64cf958 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokPreConnectionEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/control/TikTokPreConnectionEvent.java @@ -30,12 +30,13 @@ import lombok.*; /** * Triggered before the connection is established. */ +@Getter @EventMeta(eventType = EventType.Control) public class TikTokPreConnectionEvent extends TikTokLiveClientEvent { - @Getter private final LiveUserData.Response userData; - @Getter private final LiveData.Response roomData; - @Getter @Setter boolean cancelConnection = false; + private final LiveUserData.Response userData; + private final LiveData.Response roomData; + @Setter boolean cancelConnection = false; public TikTokPreConnectionEvent(LiveUserData.Response userData, LiveData.Response liveData) { this.userData = userData; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkAcceptNoticeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkAcceptNoticeEvent.java new file mode 100644 index 0000000..01aa937 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkAcceptNoticeEvent.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkAcceptNoticeEvent extends TikTokLinkEvent { + + private final long fromUserId, fromRoomId, toUserId; + + public TikTokLinkAcceptNoticeEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasAcceptNoticeContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Accept Notice Content!"); + + var content = msg.getAcceptNoticeContent(); + this.fromUserId = content.getFromUserId(); + this.fromRoomId = content.getFromRoomId(); + this.toUserId = content.getToUserId(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/EnumValue.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkApplyEvent.java similarity index 74% rename from API/src/main/java/io/github/jwdeveloper/tiktok/data/models/EnumValue.java rename to API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkApplyEvent.java index cf679c1..ef5dbee 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/EnumValue.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkApplyEvent.java @@ -20,18 +20,17 @@ * 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.data.models; +package io.github.jwdeveloper.tiktok.data.events.link; -import lombok.Value; +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; -@Value -public class EnumValue -{ - public int value; - public String name; +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkApplyEvent extends TikTokLinkEvent { - public static EnumValue Map(Enum _enum) - { - return new EnumValue(_enum.ordinal() ,_enum.name()); + public TikTokLinkApplyEvent(WebcastLinkMessage msg) { + super(msg); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCancelEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCancelEvent.java new file mode 100644 index 0000000..4d52b4a --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCancelEvent.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkCancelEvent extends TikTokLinkEvent { + + private final long fromUserId, toUserId, cancelType, actionId; + + public TikTokLinkCancelEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasCancelContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Cancel Content!"); + + var content = msg.getCancelContent(); + this.fromUserId = content.getFromUserId(); + this.toUserId = content.getToUserId(); + this.cancelType = content.getCancelType(); + this.actionId = content.getActionId(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCloseEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCloseEvent.java new file mode 100644 index 0000000..0ba496e --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCloseEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkCloseEvent extends TikTokLinkEvent { + + public TikTokLinkCloseEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasCloseContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Close Content!"); + // Proto Empty + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCohostListChangeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCohostListChangeEvent.java new file mode 100644 index 0000000..88a85e7 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCohostListChangeEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkCohostListChangeEvent extends TikTokLinkEvent { + + public TikTokLinkCohostListChangeEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasCohostListChangeContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Cohost List Change Content!"); + // Proto Empty + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCreateEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCreateEvent.java new file mode 100644 index 0000000..fbbb844 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkCreateEvent.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkCreateEvent extends TikTokLinkEvent { + + private final long hostId, roomId, linkType; + public TikTokLinkCreateEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasCreateContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Create Content!"); + + var content = msg.getCreateContent(); + this.hostId = content.getOwnerId(); + this.roomId = content.getOwnerRoomId(); + this.linkType = content.getLinkType(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEnterEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEnterEvent.java new file mode 100644 index 0000000..503040c --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEnterEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.users.ListUser; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +import java.util.List; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkEnterEvent extends TikTokLinkEvent { + + private final List listUsers; + private final int anchorMultiLiveEnum; + + public TikTokLinkEnterEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasEnterContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Enter Content!"); + + var content = msg.getEnterContent(); + this.listUsers = content.getLinkedUsersListList().stream().map(ListUser::map).toList(); + this.anchorMultiLiveEnum = content.getAnchorMultiLiveEnum(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEvent.java similarity index 81% rename from API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkEvent.java rename to API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEvent.java index 167e2a3..e3cae9e 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkEvent.java @@ -20,24 +20,24 @@ * 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.data.events; +package io.github.jwdeveloper.tiktok.data.events.link; -import io.github.jwdeveloper.tiktok.annotations.EventMeta; -import io.github.jwdeveloper.tiktok.annotations.EventType; +import io.github.jwdeveloper.tiktok.annotations.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; -import io.github.jwdeveloper.tiktok.data.models.users.User; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; import lombok.Getter; -import java.util.List; - @Getter @EventMeta(eventType = EventType.Message) public class TikTokLinkEvent extends TikTokHeaderEvent { + private final String extra, transferExtra; + private final long expireTimestamp; public TikTokLinkEvent(WebcastLinkMessage msg) { super(msg.getCommon()); - + this.extra = msg.getExtra(); + this.expireTimestamp = msg.getExpireTimestamp(); + this.transferExtra = msg.getTransferExtra(); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkInviteEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkInviteEvent.java new file mode 100644 index 0000000..08ad4b7 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkInviteEvent.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkInviteEvent extends TikTokLinkEvent { + + private final long roomId; + private final User inviter; + + public TikTokLinkInviteEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasInviteContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Invite Content!"); + + var content = msg.getInviteContent(); + this.roomId = content.getFromRoomId(); + this.inviter = User.map(content.getFromUser()); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkKickOutEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkKickOutEvent.java new file mode 100644 index 0000000..80bcb78 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkKickOutEvent.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkKickOutEvent extends TikTokLinkEvent { + + private final long fromUserId; + private final KickOutReason kickOutReason; + + public TikTokLinkKickOutEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasKickOutContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Kick Out Content!"); + + var content = msg.getKickOutContent(); + this.fromUserId = content.getFromUserId(); + this.kickOutReason = KickOutReason.values()[content.getKickoutReasonValue()]; + } + + public enum KickOutReason { + KICKOUT_REASON_UNKNOWN, + KICKOUT_REASON_FIRST_FRAME_TIMEOUT, + KICKOUT_REASON_BY_HOST, + KICKOUT_REASON_RTC_LOST_CONNECTION, + KICKOUT_REASON_BY_PUNISH, + KICKOUT_REASON_BY_ADMIN, + KICKOUT_REASON_HOST_REMOVE_ALL_GUESTS + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLeaveEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLeaveEvent.java new file mode 100644 index 0000000..07aaa00 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLeaveEvent.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkLeaveEvent extends TikTokLinkEvent { + + private final long userId, sendLeaveUid, leaveReason; + private final String linkmicIdStr; + + public TikTokLinkLeaveEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasLeaveContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Leave Content!"); + + var content = msg.getLeaveContent(); + this.userId = content.getUserId(); + this.linkmicIdStr = content.getLinkmicIdStr(); + this.sendLeaveUid = content.getSendLeaveUid(); + this.leaveReason = content.getLeaveReason(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLinkedListChangeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLinkedListChangeEvent.java new file mode 100644 index 0000000..a677cb2 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkLinkedListChangeEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkLinkedListChangeEvent extends TikTokLinkEvent { + + public TikTokLinkLinkedListChangeEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasLinkedListChangeContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Linked List Change Content!"); + // Proto Empty + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkListChangeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkListChangeEvent.java new file mode 100644 index 0000000..6feb91d --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkListChangeEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.users.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +import java.util.List; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkListChangeEvent extends TikTokLinkEvent { + + private final List linkedUsers, appliedUsers, connectingUsers; + + public TikTokLinkListChangeEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasListChangeContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with List Change Content!"); + + var content = msg.getListChangeContent(); + this.linkedUsers = content.getLinkedUsersList().stream().map(ListUser::map).toList(); + this.appliedUsers = content.getAppliedUsersList().stream().map(ListUser::map).toList(); + this.connectingUsers = content.getConnectingUsersList().stream().map(ListUser::map).toList(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMediaChangeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMediaChangeEvent.java new file mode 100644 index 0000000..591e193 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMediaChangeEvent.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkMediaChangeEvent extends TikTokLinkEvent { + + private final long op, toUserId, anchorId, roomId, changeScene; + + public TikTokLinkMediaChangeEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasMediaChangeContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Media Change Content!"); + + var content = msg.getMediaChangeContent(); + this.op = content.getOp(); + this.toUserId = content.getToUserId(); + this.anchorId = content.getAnchorId(); + this.roomId = content.getRoomId(); + this.changeScene = content.getChangeScene(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/CustomEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMicIdxUpdateEvent.java similarity index 68% rename from API/src/main/java/io/github/jwdeveloper/tiktok/data/events/CustomEvent.java rename to API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMicIdxUpdateEvent.java index 08dab22..f6d09ef 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/CustomEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMicIdxUpdateEvent.java @@ -20,24 +20,20 @@ * 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.data.events; +package io.github.jwdeveloper.tiktok.data.events.link; -import io.github.jwdeveloper.tiktok.annotations.EventMeta; -import io.github.jwdeveloper.tiktok.annotations.EventType; -import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; -import io.github.jwdeveloper.tiktok.data.models.users.User; -import lombok.Data; - - -@Data +@Getter @EventMeta(eventType = EventType.Message) -public class CustomEvent extends TikTokHeaderEvent { - private final User user; - private final String title; +public class TikTokLinkMicIdxUpdateEvent extends TikTokLinkEvent { - public CustomEvent(User user, String title) { - this.user = user; - this.title = title; + public TikTokLinkMicIdxUpdateEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasMicIdxUpdateContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Mic Idx Update Content!"); + // Proto Empty } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMuteEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMuteEvent.java new file mode 100644 index 0000000..d1864a5 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMuteEvent.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkMuteEvent extends TikTokLinkEvent { + + private final long userId, status; + + public TikTokLinkMuteEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasMuteContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Mute Content!"); + + var content = msg.getMuteContent(); + this.userId = content.getUserId(); + this.status = content.getStatus(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkRandomMatchEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkRandomMatchEvent.java new file mode 100644 index 0000000..359a1c3 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkRandomMatchEvent.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkRandomMatchEvent extends TikTokLinkEvent { + + private final User user; + private final long roomId, inviteType, innerChannelId; + private final String matchId; + + public TikTokLinkRandomMatchEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasRandomMatchContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Random Match Content!"); + + var content = msg.getRandomMatchContent(); + this.user = User.map(content.getUser()); + this.roomId = content.getRoomId(); + this.inviteType = content.getInviteType(); + this.matchId = content.getMatchId(); + this.innerChannelId = content.getInnerChannelId(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkReplyEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkReplyEvent.java new file mode 100644 index 0000000..2790580 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkReplyEvent.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.users.User; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkReplyEvent extends TikTokLinkEvent { + + private final long roomId; + private final User fromUser, toUser; + + public TikTokLinkReplyEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasReplyContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Reply Content!"); + + var content = msg.getReplyContent(); + this.roomId = content.getFromRoomId(); + this.fromUser = User.map(content.getFromUser()); + this.toUser = User.map(content.getToUser()); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkSysKickOutEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkSysKickOutEvent.java new file mode 100644 index 0000000..6e4f998 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkSysKickOutEvent.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkSysKickOutEvent extends TikTokLinkEvent { + + private final long userId; + private final String linkmicIdStr; + + public TikTokLinkSysKickOutEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasSysKickOutContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Sys Kick Out Content!"); + + var content = msg.getSysKickOutContent(); + this.userId = content.getUserId(); + this.linkmicIdStr = content.getLinkmicIdStr(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserEvent.java new file mode 100644 index 0000000..68d0197 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserEvent.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkUpdateUserEvent extends TikTokLinkEvent { + + private final long fromUserId, toUserId; + + public TikTokLinkUpdateUserEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasUpdateUserContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with Update User Content!"); + + var content = msg.getUpdateUserContent(); + this.fromUserId = content.getFromUserId(); + this.toUserId = content.getToUserId(); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserSettingEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserSettingEvent.java new file mode 100644 index 0000000..fd35f38 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUpdateUserSettingEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkUpdateUserSettingEvent extends TikTokLinkEvent { + + public TikTokLinkUpdateUserSettingEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasUpdateUserSettingContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Update User Setting Content!"); + // Proto Empty + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUserToastEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUserToastEvent.java new file mode 100644 index 0000000..ff1cda6 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkUserToastEvent.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.data.models.Text; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkUserToastEvent extends TikTokLinkEvent { + + private final long userId, roomId; + private final Text displayText; + + public TikTokLinkUserToastEvent(WebcastLinkMessage msg) { + super(msg); + if (!msg.hasUserToastContent()) + throw new IllegalArgumentException("Expected WebcastLinkMessage with User Toast Content!"); + + var content = msg.getUserToastContent(); + this.userId = content.getUserId(); + this.roomId = content.getRoomId(); + this.displayText = Text.map(content.getDisplayText()); + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkWaitListChangeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkWaitListChangeEvent.java new file mode 100644 index 0000000..8b441d5 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkWaitListChangeEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * 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.data.events.link; + +import io.github.jwdeveloper.tiktok.annotations.*; +import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMessage; +import lombok.Getter; + +@Getter +@EventMeta(eventType = EventType.Message) +public class TikTokLinkWaitListChangeEvent extends TikTokLinkEvent { + + public TikTokLinkWaitListChangeEvent(WebcastLinkMessage msg) { + super(msg); + // if (!msg.hasWaitingListChangeContent()) + // throw new IllegalArgumentException("Expected WebcastLinkMessage with Waiting List Change Content!"); + // Proto Empty + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomInfoEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomInfoEvent.java index b0138dc..186e577 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomInfoEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomInfoEvent.java @@ -30,7 +30,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; -/* +/** Triggered when LiveRoomInfo got updated such as likes, viewers, ranking .... */ @Getter @@ -39,4 +39,4 @@ Triggered when LiveRoomInfo got updated such as likes, viewers, ranking .... public class TikTokRoomInfoEvent extends TikTokEvent { LiveRoomInfo roomInfo; -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomPinEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomPinEvent.java index f599853..4a3fa05 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomPinEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/room/TikTokRoomPinEvent.java @@ -33,15 +33,13 @@ import lombok.Getter; @EventMeta(eventType = EventType.Message) public class TikTokRoomPinEvent extends TikTokHeaderEvent { + private final TikTokCommentEvent pinnedMessage; + private final long timestamp; - private TikTokCommentEvent pinnedMessage; - private long timestamp; - - public TikTokRoomPinEvent(WebcastRoomPinMessage msg, TikTokCommentEvent commentEvent) - { - super(msg.getCommon()); - this.timestamp = msg.getTimestamp(); - this.pinnedMessage = commentEvent; - } - -} + public TikTokRoomPinEvent(WebcastRoomPinMessage msg, TikTokCommentEvent commentEvent) + { + super(msg.getCommon()); + this.timestamp = msg.getTimestamp(); + this.pinnedMessage = commentEvent; + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java index 5cbe573..351b9a8 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java @@ -24,10 +24,8 @@ package io.github.jwdeveloper.tiktok.data.events.social; import io.github.jwdeveloper.tiktok.annotations.EventMeta; import io.github.jwdeveloper.tiktok.annotations.EventType; -import io.github.jwdeveloper.tiktok.data.events.TikTokSubscribeEvent; import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; import io.github.jwdeveloper.tiktok.data.models.users.User; -import io.github.jwdeveloper.tiktok.messages.webcast.WebcastMemberMessage; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastSocialMessage; import lombok.Value; @@ -38,21 +36,21 @@ import lombok.Value; @EventMeta(eventType = EventType.Message) public class TikTokFollowEvent extends TikTokHeaderEvent { - User user; - int totalFollowers; + User user; + int totalFollowers; - public TikTokFollowEvent(WebcastSocialMessage msg) { - super(msg.getCommon()); - user = User.map(msg.getUser()); - totalFollowers = msg.getFollowCount(); - } + public TikTokFollowEvent(WebcastSocialMessage msg) { + super(msg.getCommon()); + user = User.map(msg.getUser()); + totalFollowers = msg.getFollowCount(); + } public static TikTokFollowEvent of(String userName) { return new TikTokFollowEvent(WebcastSocialMessage.newBuilder() - .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() - .setNickname(userName) - .build()) - .build()); + .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder() + .setNickname(userName) + .build()) + .build()); } -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java index 0133b2c..7b80e11 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokShareEvent.java @@ -35,19 +35,18 @@ import lombok.Getter; @Getter @EventMeta(eventType = EventType.Message) public class TikTokShareEvent extends TikTokHeaderEvent { - private final User user; - private final int totalShares; + private final User user; + private final int totalShares; - public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) { - super(msg.getCommon()); - user = User.map(msg.getUser()); - this.totalShares = amount; - } + public TikTokShareEvent(WebcastSocialMessage msg, Integer amount) { + super(msg.getCommon()); + user = User.map(msg.getUser()); + this.totalShares = amount; + } - public TikTokShareEvent(WebcastSocialMessage msg) { - super(msg.getCommon()); - user = User.map(msg.getUser()); - totalShares = 1; - } - -} + public TikTokShareEvent(WebcastSocialMessage msg) { + super(msg.getCommon()); + user = User.map(msg.getUser()); + totalShares = 1; + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java index c084189..cbb1b28 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java @@ -22,7 +22,6 @@ */ package io.github.jwdeveloper.tiktok.data.models.gifts; -//TODO it should be called GiftComboStateType public enum GiftComboStateType { Finished, Begin, diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftOld.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftOld.java deleted file mode 100644 index 9f12ef4..0000000 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftOld.java +++ /dev/null @@ -1,1417 +0,0 @@ -/* - * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -// This enum is generated -package io.github.jwdeveloper.tiktok.data.models.gifts; - -import io.github.jwdeveloper.tiktok.data.models.Picture; -import lombok.Getter; - -@Getter -public enum GiftOld { - UNDEFINED(-1, "undefined", -1, ""), - - HEART(5480, "Heart", 10, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/98bea1b189fba75bf0ca766b4dc1976e.png~tplv-obj.jpg"), - - HEART_5738(5738, "Heart", 200, "https://storage.streamdps.com/iblock/046/046417f5f825f44235c2ae98c56703a2/925cc55f3650d03ad58de6fa0edec143.png"), - - HEART_6247(6247, "Heart", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/dd300fd35a757d751301fba862a258f1~tplv-obj.jpg"), - - INTERSTELLAR(6149, "Interstellar", 10000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/8520d47b59c202a4534c1560a355ae06~tplv-obj.jpg"), - - LOVE_CHAT(6205, "Love Chat", 400, "https://storage.streamdps.com/iblock/440/4402267722e227b72adc97db92504b75/ae0f562146e701f32ae96761ac67c5cc.png"), - - SPRING_TRAIN(8152, "Spring train", 3999, "https://storage.streamdps.com/iblock/035/035862dc0952468fc95f02995cec0f22/eeb69650806ea4c2e22558ef4b5e2b47.webp"), - - CHRISTMAS_MARKET_G(7377, "Christmas Market G", 2000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/f498f29ef628c8318006a9ff2f49bf08~tplv-obj.png"), - - CHICK(8165, "Chick", 10, "https://storage.streamdps.com/iblock/54e/54e5c232c74094c8e4b4d5678552f756/8132c0b012e7100540e1f1e2a5b3265d.webp"), - - DOUBLE_TROUBLE(8038, "Double trouble", 2988, "https://storage.streamdps.com/iblock/a23/a23f89b59cebf6d82ba64437e0ce52c9/d13464a899047febd2bd3db61835cb1b.webp"), - - FALCON(6271, "Falcon", 10999, "https://storage.streamdps.com/iblock/702/702e6d0287a1e868c69fbe2f6b3635a6/7a7a82b571ba63ccd3ca514c887b3130.png"), - - FALCON_6367(6367, "Falcon", 10999, "https://storage.streamdps.com/iblock/f88/f886e7678bef35f8c762a323386e6d23/7249e0af64c78d1d569a8d7a86ab58cd.png"), - - HAPPY_FRIDAY(8265, "Happy Friday", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/65e8fcb76825b9ec36a24faf9a3e9495~tplv-obj.png"), - - SNEAKERHEAD(7394, "Sneakerhead", 1, "https://storage.streamdps.com/iblock/f64/f648c76bae6ef273077c74cc9312b126/87f4891550b2cfd3e49973f7f87dbdb2.webp"), - - PANTHER_PAWS(7204, "Panther Paws", 199, "https://storage.streamdps.com/iblock/6e0/6e097d88e5e088d0228c702456e58450/72afb8bfa2231766da6817e911702d4b.webp"), - - PANTHER_PAWS_8358(8358, "Panther Paws", 199, "https://storage.streamdps.com/iblock/a25/a25d2409e1d851566987913c9fb9860f/6aeb9164cf39e2602933d28dbd106119.webp"), - - GOLDEN_PARTY(9499, "Golden Party", 3000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/a00450f3e3aa1f01b62774950e5729c3.png~tplv-obj.jpg"), - - SHOOTING_STARS(5753, "Shooting Stars", 1580, "https://storage.streamdps.com/iblock/b36/b36bb8c332ade25b2e591cd3ed164a99/a06c10f4dc562c24f4f5b6812b9fa01f.png"), - - LION(6369, "Lion", 29999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/4fb89af2082a290b37d704e20f4fe729~tplv-obj.jpg"), - - CAR_DRIFTING(8086, "Car Drifting", 3000, "https://storage.streamdps.com/iblock/4e5/4e537a5c27bc6be1887f40eb2995d38e/62635a8973c01d0a0330f778e5ba5872.webp"), - - FUNNY_FACE(7933, "Funny Face", 1, "https://storage.streamdps.com/iblock/65b/65be33e0d88d5cb55e5e968b67417fc1/2530e112c1891007fc956255f5c7f0ad.webp"), - - ENJOY_MUSIC(5685, "Enjoy Music", 1, "https://storage.streamdps.com/iblock/82b/82b1fc25e1aab4c5502c31bfd1c001d7/ce0e2cc4cecb12e0fc2938eb4871008c.webp"), - - COOPER_FLIES_HOME(6862, "Cooper Flies Home", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/3f1945b0d96e665a759f747e5e0cf7a9~tplv-obj.jpg"), - - MAKE_UP_BOX(6033, "Make-up Box", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a29aa87203ec09c699e3dafa1944b23e~tplv-obj.jpg"), - - PLAY_SAMBA(5793, "Play Samba", 99, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/fd3d6cc127464bacded6ed009074ae2f~tplv-obj.png"), - - WOOLY_HAT(7458, "Wooly Hat", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a234d0187047fa48805c8ea2e1f1f756~tplv-obj.png"), - - LITTLE_CROWN(6097, "Little Crown", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/cf3db11b94a975417043b53401d0afe1~tplv-obj.jpg"), - - RUBY_RED(8434, "Ruby red", 88, "https://storage.streamdps.com/iblock/405/405fcf52a1de3d14ab9834c1f30cc330/0deed9ee2c79ba6bf2005b0ce667bf60.webp"), - - PUPPY_LOVE(7927, "Puppy Love", 199, "https://storage.streamdps.com/iblock/669/66987a73df074dbe87e1038cbc3c6755/62b5cc4c7414d33dde55b7a201ba5281.webp"), - - COTTON_CANDY(7265, "Cotton Candy", 700, "https://storage.streamdps.com/iblock/51f/51f64a93c515f4a45169f24a52179f2f/730beb9631b1af4edfaf714d7686df04.webp"), - - HOT(6756, "Hot", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/ec679890070187b61620b9662afb814e~tplv-obj.png"), - - KNIGHT_HELMET(8672, "Knight Helmet", 199, "https://storage.streamdps.com/iblock/291/2915da07301fcb6a9a4d3e515931c2c8/31ebb4cad7a264fe9657a3ddfaca4eaa.webp"), - - SUB_STAR(7072, "Sub Star", 1, "https://storage.streamdps.com/iblock/98f/98fea40fc19cc9dbd9a083b0844c163b/af7dd985812299d89f6cfa49c84e7eaf.webp"), - - MY_FAVOURITE(8155, "My favourite", 99, "https://storage.streamdps.com/iblock/c4f/c4f75ee454e7958671db08dfb0ecc0df/83bc324a57610cf85584ef3659dfae2d.webp"), - - MY_FAVOURITE_8156(8156, "My favourite", 99, "https://storage.streamdps.com/iblock/8cf/8cfe4cfffd783a468357fd89e2f110e6/b1cc3eaf279274fbfdf8af48f2200f59.webp"), - - SAPLING(7003, "Sapling", 1, "https://storage.streamdps.com/iblock/020/020f204d8bf49c321c77c718d15972e5/f515f03da38b6a2663fc40879119bc5c.webp"), - - HEADPHONES(5740, "Headphones", 20, "https://storage.streamdps.com/iblock/c85/c855c7003790c37323c0454fb8d88da2/3ae51d5df6848ac6871061d536a23f6f.png"), - - ICE_HOCKEY(7780, "Ice hockey", 199, "https://storage.streamdps.com/iblock/2f2/2f28a4627c1149db4c9715fdf6702b9e/5139a343ec5772b6333b452743d45a8f.webp"), - - MIKE(7789, "Mike", 4000, "https://storage.streamdps.com/iblock/de0/de0da7b6ce6ba19125b1c4eb2fd2966a/6804a72c00714de05f9239be7bd5b515.webp"), - - STAY_WARM(9682, "Stay Warm", 450, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/abd104eb08ce0c351292036d8897fb8d.png~tplv-obj.png"), - - HEADPHONE(6609, "Headphone", 199, "https://storage.streamdps.com/iblock/ce9/ce95ea6922db1e776296819861d69ddb/b0b11c041a28d46e51ff1ed8f288fe91.webp"), - - HEADPHONE_8017(8017, "Headphone", 199, "https://storage.streamdps.com/iblock/055/05573a16af395b896b26847bc77fbb5e/55c0f27976902374940cfb54f22728d0.webp"), - - ICE_CREAM(5757, "Ice cream", 5, "https://storage.streamdps.com/iblock/24a/24af6068b37268c45133d1055eef924c/0fd9ac15921b932e81c18789af22263b.png"), - - ICE_CREAM_8963(8963, "Ice cream", 5, "https://storage.streamdps.com/iblock/f72/f726165be6e93bdc69724375e7931dde/2e749d8d397b3ce5e6bcc90402f27c7d.webp"), - - _2024_GLASSES(9640, "2024 Glasses", 224, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/512d2e9934cbae8d1019a391814edbd2.png~tplv-obj.jpg"), - - GIVE_IT_ALL(6649, "Give It All", 1, "https://storage.streamdps.com/iblock/de8/de8468d1003361452021c2d4796bb0f6/574aa0cdd7b418a2a3af2ca4739e9e7f.webp"), - - MARVELOUS_CONFETTI(7121, "Marvelous Confetti", 100, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/fccc851d351716bc8b34ec65786c727d~tplv-obj.jpg"), - - PINKY_PROMISE(8810, "Pinky promise", 5, "https://storage.streamdps.com/iblock/686/6864e9132aa300e189e93054ad735407/fe1a1a4405f77f009f4a76a184bafc52.webp"), - - KITE(7090, "Kite", 199, "https://storage.streamdps.com/iblock/5e6/5e680ff5ebdf550a30e5bf614ee5a68e/ceee4022ccbc11a5adb30f993ac47521.webp"), - - WIDE_EYE_WURSTIE(6774, "Wide Eye Wurstie", 5, "https://storage.streamdps.com/iblock/009/00985e0e1bf5ab19a3c4c757f0ce91b7/e25e88198cbeeee06e8e49fa64332e44.webp"), - - I_LOVE_KR(7048, "I LOVE KR", 1, "https://storage.streamdps.com/iblock/a33/a330586aeae257203d4ae0685a8c7599/cc67f4e57346c9acef62ecee527695dd.webp"), - - WEIGHTS(5760, "Weights", 1, "https://storage.streamdps.com/iblock/d6f/d6f46242fd4f0396f5c5070ff960e83c/87884fe9998fea43e8aa56ecce15a541.png"), - - RED_LIGHTNING(8419, "Red Lightning", 12000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/5f48599c8d2a7bbc6e6fcf11ba2c809f~tplv-obj.jpg"), - - GUACAMOLE(6519, "Guacamole", 6, "https://storage.streamdps.com/iblock/207/20793577805a0b4fe0efeb37cc0bd7d9/10e97510121def59e538f0290d2d751a.png"), - - FINGER_HEART(5487, "Finger Heart", 5, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a4c4dc437fd3a6632aba149769491f49.png~tplv-obj.jpg"), - - COOPER_SWIMS_HOME(6863, "Cooper Swims Home", 3999, "https://storage.streamdps.com/iblock/493/4930e92e37637187f38ca100fa52b242/413beebb2e2c1a6f4640d73d3b6000d8.webp"), - - RED_CARPET(6789, "Red Carpet", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/5b9bf90278f87b9ca0c286d3c8a12936~tplv-obj.jpg"), - - CUPID(5236, "Cupid", 2888, "https://storage.streamdps.com/iblock/94f/94f6f0d4bfb3294395007ba45db34a54/e141809d2278e1ca80a5107bce4a16f6.png"), - - MYSTERY_FIREWORK(7529, "Mystery Firework", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/c110230c5db903db5f060a432f5a86cd~tplv-obj.jpg"), - - BUNGEO_PPANG(5644, "Bungeo-ppang", 1, "https://storage.streamdps.com/iblock/7af/7afe4a4d67c1343a2df4703537b897eb/cd51c9bbb8291363ea4189bd2370eb8c.png"), - - SCENTED_CANDLE(7131, "Scented Candle", 20, "https://storage.streamdps.com/iblock/01f/01f4015c4cad98734c55ecd42824ace3/eb1d8dd998edd8f658c43c60d33b9904.webp"), - - MOTORCYCLE(5765, "Motorcycle", 2988, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/6517b8f2f76dc75ff0f4f73107f8780e~tplv-obj.jpg"), - - DREAM_TEAM(7532, "Dream Team", 299, "https://storage.streamdps.com/iblock/252/2523636860d9336ab7cd149bbfb94533/b171f50afc37dc216144b4bc9ca259a1.webp"), - - DREAM_TEAM_8892(8892, "Dream Team", 500, "https://storage.streamdps.com/iblock/e09/e09d671c035feae8ced7933e71f78c11/a0ea898b564b505716a2efdd50cf572a.webp"), - - WATERMELON(8826, "Watermelon", 10, "https://storage.streamdps.com/iblock/84e/84e29ce96978961b12f1e88dd985b938/08e2a0ac2c2e2794aa2558e67d387639.webp"), - - PEGASUS(9427, "Pegasus", 42999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f600a2495ab5d250e7da2066484a9383.png~tplv-obj.jpg"), - - SHOW_TIME(6907, "Show Time", 3999, "https://storage.streamdps.com/iblock/d72/d722e6d78821a169ff9a6d128127c696/f457c04596d723f9033842f3417b6a72.webp"), - - LOVE_FOCUS(6436, "Love Focus", 199, "https://storage.streamdps.com/iblock/cd1/cd1096cb1507fe07b633dad0b0aee967/d6b2e544219ed4d3c3263d319ab9bc5f.png"), - - CHICKEN_LEG(6209, "Chicken Leg", 10, "https://storage.streamdps.com/iblock/ef7/ef776169ede6c4a635cef2b3ab35d29a/7683229a73330c04463d2b97984ea114.png"), - - KING_CAKE_(6112, "King Cake ", 9, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/aa99da9f6b499ff879c3860e888a53ae~tplv-obj.png"), - - BEACH_DAY(6431, "Beach Day", 2999, "https://storage.streamdps.com/iblock/c2d/c2df4a57f2ab16e641630b7077b40900/ba3cf6fd32d224f0014bd395b011f7a0.webp"), - - CUBE(9184, "Cube", 10, "https://storage.streamdps.com/iblock/69d/69dab4e352882c0bd29c3864e24d80de/258857221189c76260b6af5eeb43e93b.webp"), - - I_LOVE_MUSIC(8392, "I love music", 398, "https://storage.streamdps.com/iblock/757/7578dd5937689a7fd7b03751e72e67b9/051e5abcb68d51ae38b094696c5eaa06.webp"), - - SPEEDBOAT(5763, "Speedboat", 1888, "https://storage.streamdps.com/iblock/55f/55f832ac0d4e25f2527b2cf87ae8af08/ec99908e1787ae32c1387a20db7ca5ac.png"), - - SNOWMAN(7551, "Snowman", 99, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/e094e0fafc14aaf127fa0d0a7926619a~tplv-obj.png"), - - YELLOW_BUS(8263, "Yellow Bus", 6000, "https://storage.streamdps.com/iblock/88d/88df4387d65bcc77b691098fd649bd59/ad401a92ddba9aae15bb777f9f38638d.webp"), - - ROSA_NEBULA(8912, "Rosa Nebula", 15000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f722088231103b66875dae33f13f8719.png~tplv-obj.jpg"), - - I_M_HERE(9354, "I'm here", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/7006392a82d57452d5ef08dd90e169c1.png~tplv-obj.png"), - - HOT_CHOCO_GDM_23(7523, "Hot Choco GDM 23", 30, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/f62f5912077d9af84256de288399125a~tplv-obj.png"), - - KISS(5284, "Kiss", 150, "https://storage.streamdps.com/iblock/d3d/d3df4a0ecebd25c21e7ce5a6f910f8f1/d9ce143ac4707f74d8b1fe4708a92ab3.png"), - - KISS_5481(5481, "Kiss", 150, "https://storage.streamdps.com/iblock/5cc/5cca201687ef878daf36dfe39fd26807/b2171e9cc191783679794f42246c4ceb.webp"), - - KISS_5577(5577, "Kiss", 150, "https://storage.streamdps.com/iblock/c0e/c0e0930ab93f9187cebe2e6a7c4af8d4/7f2d4edfac34eeb6e4d6fcbee47ba8d0.png"), - - ANTI_HERO(7316, "Anti Hero", 1, "https://storage.streamdps.com/iblock/d5f/d5f1cee5ab178c6180cf3596df2a8208/892d3208126cc6c46e605c52ffbb5a60.webp"), - - TUCKER_THE_TURKEY(7403, "Tucker the Turkey", 10, "https://storage.streamdps.com/iblock/8f7/8f7fcac557fb70fa0bbd69809c112c0e/978e0bcdcd8cbf4cbdfdb53d9fc39eaa.webp"), - - BIRTHDAY_HAT(5866, "Birthday Hat", 99, "https://storage.streamdps.com/iblock/626/626b5c670090e1b20b15659bdc852c72/e75b762129d26f346be85d454d826a00.png"), - - LUCKY_PIG(7375, "Lucky Pig", 1, "https://storage.streamdps.com/iblock/bf8/bf8e32bd0bf5a916195b5848db571f4f/a9241b01b970aa44c2d5cea5e8ba69d6.webp"), - - GARLAND_(5651, "Garland ", 1500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/69d7dadcd93942bad49d0b9874f69c1b~tplv-obj.jpg"), - - COWBOY_HAT(8842, "Cowboy Hat", 199, "https://storage.streamdps.com/iblock/5f3/5f3df5eccbc82f458fdacd0f82d13e40/40980853c80e3da0e902a1db49ea9798.webp"), - - TURKEY_FACE_GDDEC(9581, "Turkey Face GDDec", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/65349d1ef783fc207c1d2b54a8d521a7.png~tplv-obj.png"), - - FESTA_JUNINA_S_HAT(8638, "Festa Junina's Hat", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/61b32ccce11b289b3c1db7438dfb4450~tplv-obj.png"), - - SPORTS_CAR(6089, "Sports Car", 7000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/e7ce188da898772f18aaffe49a7bd7db~tplv-obj.jpg"), - - ICE_TEA(5464, "Ice Tea", 1, "https://storage.streamdps.com/iblock/531/5313a4ca89a7c7588a88898c8f1e9053/dab85392562772099474a050c251d340.png"), - - TEMPE_TOFU(5462, "Tempe Tofu", 1, "https://storage.streamdps.com/iblock/c93/c9341080d8efd5849e32f1e394a7a96a/c2992a332ca93e9114a6ab0e8b31effd.png"), - - CHOCO_PIE(6503, "Choco Pie", 10, "https://storage.streamdps.com/iblock/5a7/5a7610069bd417a2847f34c6c0b2821d/5faa955edd066d1140abb048f32be815.webp"), - - I_M_BLUE(7707, "I'm blue", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/c560ec76d5599198aaea9377c5ffab6e~tplv-obj.png"), - - WHALE_DIVING(6084, "Whale diving", 1750, "https://storage.streamdps.com/iblock/5b2/5b27c388fe0d4dbe0a5f0a44ba7a8410/602a5a7cf538240f48ccf47c13237aa2.png"), - - WHALE_DIVING_6820(6820, "Whale diving", 2150, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/46fa70966d8e931497f5289060f9a794~tplv-obj.jpg"), - - DIAMOND_RING_OF_LOVE(5283, "Diamond ring of love", 300, "https://storage.streamdps.com/iblock/433/4334f4d32ccb792976b1097ae605d1d0/890c718960ebebdd65f1843ec944f483.png"), - - DIAMOND_RING_OF_LOVE_5569(5569, "Diamond ring of love", 300, "https://storage.streamdps.com/iblock/b51/b51040db9cad0b42963a3e92cdb6a0f5/227066eeb54fadcb19440fbf2a0b5be0.png"), - - MONEY_GUN(5739, "Money Gun", 500, "https://storage.streamdps.com/iblock/9a4/9a43836ba2f5741d32533f55cabd70ce/b1c519d50bfd7dad777b1112b4f11618.png"), - - MONEY_GUN_6365(6365, "Money Gun", 500, "https://storage.streamdps.com/iblock/25f/25f030f47cfc60d296bb1041ddb91f6e/ca3357a76a2be178c581530009ce215a.png"), - - MONEY_GUN_7168(7168, "Money Gun", 500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/e0589e95a2b41970f0f30f6202f5fce6~tplv-obj.jpg"), - - HONORABLE_PERSON(6525, "Honorable Person", 99, "https://storage.streamdps.com/iblock/46d/46deaf56b0ee85c34e23e793dbcbab73/4e8f3162028de2f938cda110554d51cc.webp"), - - PEARL(5664, "Pearl", 800, "https://storage.streamdps.com/iblock/d42/d4241b9de546fb190964c12adeecabca/d03fe09dd3400422c55953555066487e.png"), - - PLAY_FOR_YOU(9535, "Play for you", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/182659e90a3432aa155e61c9c0d89df0.png~tplv-obj.png"), - - LET_US_DANCE(7196, "Let Us Dance", 1999, "https://storage.streamdps.com/iblock/cae/caeaf097812661e65ff761aa60d5300a/444a1217ff8fbdeaf8e4682405871c7a.webp"), - - _2024_COUNTDOWN(9641, "2024 Countdown", 2024, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/a358a3ce18241dcc6e7d0b02d091d563.png~tplv-obj.jpg"), - - MINI_SPEAKER(6042, "Mini Speaker", 1, "https://storage.streamdps.com/iblock/1b1/1b117cbff78bfb7f50ba4d90a16c6112/30f4b176fd30683e3cbfc9013fe96d82.png"), - - FLORAL_BLOOM(5788, "Floral Bloom", 1500, "https://storage.streamdps.com/iblock/858/85827a8e5266c8d4c697d9aa930fead6/149392b39b041febde90bc4ea80ce1a5.png"), - - APPLAUSE(5564, "Applause", 600, "https://storage.streamdps.com/iblock/a09/a0915afcb04a11f902197349b04ba4a0/61917c0c7d2f180a53b66bfd811cf867.png"), - - APPLAUSE_7266(7266, "Applause", 600, "https://storage.streamdps.com/iblock/054/054e62fc60b158f38edd5db0589f8d6a/1aa46ed1a7f28a63b2581515c67b51a1.webp"), - - VALLEY_FESTIVAL(6556, "Valley Festival", 5999, "https://storage.streamdps.com/iblock/44e/44ee2643bf3ffd9d9495318ed83104f5/951295ed57e54cdf27cfeecb1555bd9d.png"), - - MAN_V_SEAGULL(9086, "Man V Seagull", 15000, "https://storage.streamdps.com/iblock/e5d/e5d95d519ee0ed7922de14f224a9504d/e80d8e840dd44cdf20de4c572c25e0f4.webp"), - - GIFT_BOX(6834, "Gift Box", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/9cc22f7c8ac233e129dec7b981b91b76~tplv-obj.jpg"), - - GIFT_BOX_6835(6835, "Gift Box", 3999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/3646c259f8ce6f79c762ad00ce51dda0~tplv-obj.jpg"), - - FISHING_GEAR(5956, "Fishing Gear", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/1b2353958374f585e25b2f2344c6d0ad~tplv-obj.png"), - - ARCADE_GAME(5876, "Arcade Game", 1200, "https://storage.streamdps.com/iblock/d5a/d5aaa3c8ef3d271c2f93709c3ff51e67/721d870d5a5d9d82d726ff5a9ba3aa5e.png"), - - ARCADE_GAME_7041(7041, "Arcade Game", 1200, "https://storage.streamdps.com/iblock/fd0/fd0785612b024900444a0a69083400ff/3181d6af50b05dd65a7ba75902bb5b94.webp"), - - GORGEOUS_TROPHY(6741, "Gorgeous Trophy", 7000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/279c9495c2150e333bc4bc13761d177e~tplv-obj.png"), - - IT_S_CORN(6928, "It's corn", 1, "https://storage.streamdps.com/iblock/d48/d48869b41c99cf004857fb74aff97552/75f200300cdaf3424287814ec55e9656.webp"), - - SUSHI_SET(7226, "Sushi Set", 20, "https://storage.streamdps.com/iblock/097/09752a51af505fbde2e9aa853d1ada62/3b981d4797111c44c45fbd8de5201fbe.webp"), - - YEAH_NAH(9576, "Yeah Nah", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/4b20c5aab3841657a343be3769307805.png~tplv-obj.png"), - - BIRTHDAY_GLASSES(6776, "Birthday Glasses", 199, "https://storage.streamdps.com/iblock/98d/98deaf0a4a818ba6b0333ca9aee4db59/97520c1ceae957c77ef1dbcc0f092187.webp"), - - SOCKS_AND_SANDALS(6618, "Socks and Sandals", 150, "https://storage.streamdps.com/iblock/da2/da28ef4030197f812686f10b2c3f06c7/7cb8ebff6f6028e2a56b2c0c268c3620.webp"), - - FLOWERS(5737, "Flowers", 100, "https://storage.streamdps.com/iblock/d88/d88747be57256cd119fcd494a9f7f2df/3bfd01905c5b0b4de3ffeb0d3e698c00.png"), - - ROCKET(5930, "Rocket", 20000, "https://storage.streamdps.com/iblock/342/3424264a3bd5e38705631de1c508878a/76dca02d1be3598d806cea9dfc7f70c0.png"), - - GAMEPAD(6052, "Gamepad", 10, "https://storage.streamdps.com/iblock/711/711b578c104edcf1639ff4e2e7779660/6cbb6613fbbd40dac6dfd8857b05545a.png"), - - LIVE_FEST_CLAPPERS(9333, "LIVE Fest Clappers", 100, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/63e85e00169ec5be3bfa90bb004cda5e.png~tplv-obj.png"), - - RAINBOW(8616, "Rainbow", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/5fb7267489192fc77c4c8b647c124680~tplv-obj.png"), - - ORANGE_JUICE(5778, "Orange Juice", 1, "https://storage.streamdps.com/iblock/3d6/3d635024d8744f8648306d56a5c4f62f/be0f5f006bd2350e904b23b607e4f06b.png"), - - GERRY_THE_GIRAFFE(6842, "Gerry the Giraffe", 1000, "https://storage.streamdps.com/iblock/792/792ef3f53d86b5cb066d5c0bb5b00a87/91aa5cf7f51a533841bea8617419c54d.webp"), - - NOVEMBER(7177, "November", 88, "https://storage.streamdps.com/iblock/ee5/ee55ec79ae4695803d79a7fa0904333c/781835a90e8f6d8f216b54eb2a1b2b8c.webp"), - - GG(6064, "GG", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/3f02fa9594bd1495ff4e8aa5ae265eef~tplv-obj.jpg"), - - GG_8286(8286, "GG", 1, "https://storage.streamdps.com/iblock/993/993d6fe6ba90a007abd712557c96be80/26dd80bd9499dbed22cd6f1ac6ef6fd1.webp"), - - WE_ARE_A_TEAM(8201, "We are a team", 1, "https://storage.streamdps.com/iblock/5d2/5d2c4cc3cedfb9b6f230165990d2d2d3/0262b6d01e39dd56c2e877e13061c56d.webp"), - - TIKTOK_VOLCANO(6869, "TikTok Volcano", 4000, "https://storage.streamdps.com/iblock/e6d/e6d4c0d014c552ec6e8eccb804a7659f/9678f5e24b6e9b069b43c4f84a536d9f.webp"), - - KITTEN_PAW(9647, "Kitten Paw", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/332520d7b5085ce591396c8d2bb9d352.png~tplv-obj.png"), - - _2023(7604, "2023", 1, "https://storage.streamdps.com/iblock/8fb/8fba3d5f6bf547ba8c94d3f393992d46/e3cfc1cfea30d7c139f7c4943f5d3b26.webp"), - - ROMAN_EMPIRE(7166, "Roman Empire", 199, "https://storage.streamdps.com/iblock/c77/c778c4e5cd1c68a50dcc06e4bfc3aa08/48edf8b190d98b0a3cc4623e6cc9a22c.webp"), - - CHEER_FOR_YOU(6713, "Cheer For You", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/1059dfa76c78dc17d7cf0a1fc2ece185~tplv-obj.jpg"), - - TREASURE_CHEST(5513, "Treasure Chest", 100, "https://storage.streamdps.com/iblock/ef8/ef8e2b32aa2e81e7c7efa1e6913dcbc6/0282de629a9d41f4862150bec2e4f35b.png"), - - DIAMOND(5781, "Diamond", 1099, "https://storage.streamdps.com/iblock/a5d/a5d03d9eab0e85027a77224ef5d3613b/9fda88bace88c7c690b19eaaabc2c64b.png"), - - SWEET_DREAMS(6073, "Sweet dreams", 399, "https://storage.streamdps.com/iblock/d8a/d8a35b302921e346074a0c2c5904629c/ba6bb44e3400fe52915e643923cf88e5.png"), - - FOOTBALL(5894, "Football", 5, "https://storage.streamdps.com/iblock/c26/c266d3a510b4d06cb2f1cc574bc9247d/7125c3d9741749395f647ce72f3b0941.png"), - - FOOTBALL_6093(6093, "Football", 1, "https://storage.streamdps.com/iblock/2e1/2e13ae32a1a89c24cf891ffa79d63ecc/3e53b8b47bfa1760ce4f3f4d71966516.png"), - - RESTAURANTS(6204, "Restaurants", 4000, "https://storage.streamdps.com/iblock/433/433c446cf17e43ca62dab39f8e402493/e13d90cd77d8d089fc9efae8ed0f5dbe.png"), - - PIZZA(7055, "Pizza", 40, "https://storage.streamdps.com/iblock/c9d/c9d7f483cc0059a1e8165bfbd1341688/307a559eb2b371b92b8ea36ae96bfa30.webp"), - - CHRISTMAS_POTATO(9587, "Christmas Potato", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/5448f1f5157d3a4a88e0f57acf3dbfe0.png~tplv-obj.png"), - - AMUSEMENT_PARK(9466, "Amusement Park", 17000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/12ecc01c2984c5d85bb508e80103a3cb.png~tplv-obj.jpg"), - - CLUB(6417, "Club", 2000, "https://storage.streamdps.com/iblock/49b/49be18ae5914346ffcaf15a519ba9c1c/41326cb23d22010f0c4a8edf5bd27615.webp"), - - LOVE_BALLOON(5488, "LOVE Balloon", 699, "https://storage.streamdps.com/iblock/02e/02e14e15a34e20b9bc12631b89855609/40e6ba49ff1e8b344199e44b63adcb6f.png"), - - DANCING_CAPYBARAS(8806, "Dancing Capybaras", 2200, "https://storage.streamdps.com/iblock/ac2/ac2606f1dc2504c9a1b7974f40074c87/c243031480e8f2e4bbd8e7a43228ff1f.webp"), - - HUSKY(7920, "Husky", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a2f5d595e9d96aec19a7c0ed5fa9b017~tplv-obj.png"), - - DUCK(6265, "Duck", 299, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/e172f660a1d4f95813a3ace0fde42323~tplv-obj.jpg"), - - XMAS_MISHKA_BEAR(9617, "Xmas Mishka Bear", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/700c1c8817847317407cc2b8c6c9da42.png~tplv-obj.png"), - - FLOWER_OVERFLOW(6148, "Flower Overflow", 4000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/743c4bb44e7e0bf251a7f2f5ada231ee~tplv-obj.jpg"), - - PINK_SHOES(8890, "Pink Shoes", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/cba8a7c718988bd51c7b6055e9ab1ec4.png~tplv-obj.png"), - - PINK_SHOES_8843(8843, "Pink shoes", 5, "https://storage.streamdps.com/iblock/e32/e328784531bfcd4773983c6a8e205a44/a3b5a6f4fa914fdf10b754ee59dc34a4.webp"), - - FROG_PRINCE(7730, "Frog Prince", 12000, "https://storage.streamdps.com/iblock/b7f/b7fbe7755df4e9a9a403fb4f309011c4/e6d35853c31cfe26bfa586f4008d99b7.webp"), - - COUNTING_SHEEP(7984, "Counting Sheep", 1200, "https://storage.streamdps.com/iblock/f32/f32291f6832c1eb265820aede5db65b2/006d4bd8018d5da1addb803dabd2b64b.webp"), - - DOUGHNUT(5879, "Doughnut", 30, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/4e7ad6bdf0a1d860c538f38026d4e812~tplv-obj.jpg"), - - SPAGHETTI_KISS(7282, "Spaghetti Kiss", 500, "https://storage.streamdps.com/iblock/fba/fba8022bcf5a189adec072e5ffa1be77/708c406b13d9fd4811ae19a8be9c327b.webp"), - - BEAR_LOVE(7264, "Bear love", 100, "https://storage.streamdps.com/iblock/664/66499983178b4afcbb41d1381b0a3614/746053e277f2a390a5bd1aa256e445f3.webp"), - - SUNDAY_ROAST(6634, "Sunday Roast", 199, "https://storage.streamdps.com/iblock/218/218658dfe16bf8eeb11824cae5788028/95bbb526ea861ef2ba3dbe020431374f.webp"), - - _2024_JOYLENS(9643, "2024 JoyLens", 224, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/36d82bbcd87c1914df84262d9bdd9b95.png~tplv-obj.jpg"), - - LEDERHOSEN(6975, "Lederhosen", 10, "https://storage.streamdps.com/iblock/7c7/7c72a908dce6d9df4db0a6159be1751b/2ff181aa1fae6088a37f942d51401176.webp"), - - LOVE_U(7697, "LOVE U", 899, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/79d45877691333e2ba69a9098406e95c~tplv-obj.png"), - - _2024(9639, "2024", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/484a44bbe62ce47687d1da31a6602bbd.png~tplv-obj.jpg"), - - MATE_TEA(7089, "Mate tea", 10, "https://storage.streamdps.com/iblock/506/506e98699cdfefd679b35ea5170823b0/a95e9e3721c9b86e3342169b3211b30e.webp"), - - TEAM_BRACELET(9139, "Team Bracelet", 2, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/54cb1eeca369e5bea1b97707ca05d189.png~tplv-obj.png"), - - HAPPY_NEW_YEAR(6101, "Happy New Year", 199, "https://storage.streamdps.com/iblock/717/71785e60184d69e928972250d3029262/75e3567557eb65c1d9bab3ff99357cdf.webp"), - - SAKURA_TRAIN(6244, "Sakura Train", 3999, "https://storage.streamdps.com/iblock/a8e/a8e50d5c5d0eaa42bd71dbeca3b1b95a/204910c857958e7e9efd0178d30a2fbe.png"), - - AUTUMN_LEAVES(5890, "Autumn leaves", 500, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/30adcaf443df63e3bfd2751ad251f87d~tplv-obj.png"), - - FRANGIPANI(5992, "Frangipani", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/7464fad59650123fe0989e426618847d~tplv-obj.png"), - - SKI_GOGGLES(7781, "Ski Goggles", 199, "https://storage.streamdps.com/iblock/f42/f42cbce436db4e60adbf85641a768a12/fa9a4cea3c23829cf6f0725fea8d3c1a.webp"), - - PAPER_CRANE(5659, "Paper Crane", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/0f158a08f7886189cdabf496e8a07c21~tplv-obj.jpg"), - - BIGFOOT(9147, "Bigfoot", 3000, "https://storage.streamdps.com/iblock/f95/f95a4fcfa57150610fa50542db5b0990/ecb879cd751e580d3fe92770788c1735.webp"), - - BOO_THE_GHOST(9304, "Boo the Ghost", 88, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/cb909c78f2412e4927ea68d6af8e048f.png~tplv-obj.png"), - - SO_BEAUTIFUL(7024, "So Beautiful", 1, "https://storage.streamdps.com/iblock/ad6/ad67c8d6c93ff4c375568b0bfabbed6f/c68dfd6fda7e8bd84f0bc7fa9ce47af0.webp"), - - SUNGLASSES(5509, "Sunglasses", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/08af67ab13a8053269bf539fd27f3873.png~tplv-obj.jpg"), - - PANDA(37, "Panda", 5, "https://storage.streamdps.com/iblock/833/833aadcba552a8a2cc779dd8d4c537c7/f952c72ee1f40e4fcd07d713b3da6565.png"), - - MISS_YOU(8803, "Miss You", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/3c53396b922691a7520698f47105a753.png~tplv-obj.png"), - - TIKTOK_UNIVERSE(6038, "TikTok Universe", 34999, "https://storage.streamdps.com/iblock/a79/a79204e0fab55cdc35ca0bdfa019face/8f06121e1c15be8566b3fc02982a2027.png"), - - TIKTOK_UNIVERSE_6039(6039, "TikTok Universe", 34999, "https://storage.streamdps.com/iblock/49d/49d934dc15cf5efc3ebef902a5974d56/04799e79cb4bd04a20d77d2f3fa9922d.png"), - - TIKTOK_UNIVERSE_6041(6041, "TikTok Universe", 34999, "https://storage.streamdps.com/iblock/374/374cf4298ba2c9817bc87dc2aa48d385/f04c43000c1c33765615c7ef7cacc58d.png"), - - TIKTOK_UNIVERSE_9072(9072, "TikTok Universe", 44999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/8f471afbcebfda3841a6cc515e381f58~tplv-obj.jpg"), - - CUDDLE_WITH_ME(8074, "Cuddle with Me", 500, "https://storage.streamdps.com/iblock/b73/b73e476594a2e9728a5d0ba459fbfb6c/3c37f3a0b52c276a3374bfc0c1247d5c.webp"), - - BASEBALL(7897, "Baseball", 1, "https://storage.streamdps.com/iblock/923/92341a47e85be94fb6a6699a6c430a93/d60527955f9597a43d339357fed6a5fc.webp"), - - PINCH_CHEEK(6694, "Pinch Cheek", 199, "https://storage.streamdps.com/iblock/f6c/f6c95968ca266cbb2527af09989eaea0/27be132509198253b5c48e5495038e5b.png"), - - HOLIDAY_STOCKING(7504, "Holiday Stocking", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/e05de50999ebb446e15c4947b30d3140~tplv-obj.png"), - - MARVIN_THE_MONKEY(6843, "Marvin the Monkey", 10, "https://storage.streamdps.com/iblock/31a/31a03cf8430fa062064dd9e544910de2/e7939198db3920aeaf3d95167712af0e.webp"), - - ELEPHANT_TRUNK(8260, "Elephant trunk", 299, "https://storage.streamdps.com/iblock/1ea/1eafea22e99969312cda7c142d8eb3c5/59f72e0dce1bc4fcf83a34f56872b492.webp"), - - TRAIN(5978, "Train", 899, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/4227ed71f2c494b554f9cbe2147d4899~tplv-obj.jpg"), - - MAY(6470, "May", 1, "https://storage.streamdps.com/iblock/ec6/ec6d320bb93df97057208f5163d81a92/67cb233e8cf0454213300c945b2f9256.webp"), - - WISHING_BOTTLE(7160, "Wishing Bottle", 1, "https://storage.streamdps.com/iblock/381/381ef41d500da1120bdfcf83f97e76fc/1a1c9b6be78144f22b8e858effc39333.webp"), - - RABBIT(6348, "Rabbit", 1999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/61b42d630091b661e82fc8ed400b1de2~tplv-obj.jpg"), - - ASMR(6240, "ASMR", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/748e74c8309e08dbc5b03e03f28a0ea0~tplv-obj.png"), - - ROSE(5655, "Rose", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/eba3a9bb85c33e017f3648eaf88d7189~tplv-obj.jpg"), - - THE_VAN_CAT(9650, "The Van Cat", 799, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/6973dd1b6d3dee3ca3f0ebac3c1d2977.png~tplv-obj.png"), - - TRENDING_FIGURE(9138, "Trending Figure", 999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/df7b556ccf369bf9a42fe83ec8a77acf.png~tplv-obj.jpg"), - - ROSA(7997, "Rosa", 10, "https://storage.streamdps.com/iblock/486/486a2490c987c2bb97b6068fd5aac5ab/49d9045fcfe94bbfbd08c3363bb4512a.webp"), - - ROSA_8913(8913, "Rosa", 10, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/eb77ead5c3abb6da6034d3cf6cfeb438~tplv-obj.jpg"), - - COOPER_S_HOME(6864, "Cooper's Home", 5999, "https://storage.streamdps.com/iblock/2b4/2b405c6cee3848dbf54629bd25725246/b289cd0ec91e4658bd31e48b4e69674e.webp"), - - CHEER_YOU_UP(8243, "Cheer You Up", 9, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/97e0529ab9e5cbb60d95fc9ff1133ea6~tplv-obj.jpg"), - - BOXING_ROBE(7989, "Boxing Robe", 99, "https://storage.streamdps.com/iblock/653/653d737cee4ef1f2cbd1d69d3aebdcee/478170842ea659c42df24028ea92f883.webp"), - - COOL_CAT(5832, "Cool Cat", 499, "https://storage.streamdps.com/iblock/8d4/8d46ea77e77b6381f77b5867422c5f25/4d31f74591b77f27603315eb1f44488f.png"), - - COTTON_S_SHELL(8352, "Cotton's Shell", 5, "https://storage.streamdps.com/iblock/766/7665d59f0ef96aecd2dac6fc5b0c19a4/3b169a12b4f8686c68d596f6d47d2f77.webp"), - - KIWI_BIRD(9667, "Kiwi Bird", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/b73cb4aaa76a33efd881192589d65351.png~tplv-obj.png"), - - FLAME_HEART(9087, "Flame heart", 1, "https://storage.streamdps.com/iblock/10d/10df10624cdeebe8ff5e0e89e8c8e960/28b8da2878a420f8465cbbc1ec1e6b58.webp"), - - FAIRY_BREAD(5823, "Fairy Bread", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a42f9ac9cd6b26da03818ff65ac919f1~tplv-obj.png"), - - TIKTOK_SHUTTLE(6751, "TikTok Shuttle", 20000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/8ef48feba8dd293a75ae9d4376fb17c9~tplv-obj.jpg"), - - INDEPENDENCE_DAY(6633, "Independence Day", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b967993872a6e40f3477d30545f8d2eb~tplv-obj.png"), - - MAGGIE(7911, "Maggie", 15000, "https://storage.streamdps.com/iblock/a12/a12a1b23f1f6a19d728de84e1f43e21d/ff288346e9855a9bb6deb4450491028f.webp"), - - PANDA_SKYDIVING(8812, "Panda skydiving", 2000, "https://storage.streamdps.com/iblock/a29/a29903a975ce45f7b9939b510412fcee/051afc0510a7349a9ebfcde9e0fdec24.webp"), - - FIREWORKS(6090, "Fireworks", 1088, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/9494c8a0bc5c03521ef65368e59cc2b8~tplv-obj.jpg"), - - DANCING_BEAVER_IN_SUNGLASSES(5798, "Dancing beaver in sunglasses", 500, "https://storage.streamdps.com/iblock/f0d/f0d0ca698fdf0d0610afd1033d79f4c2/8989843eb6c8f1de3bb6d72260a5d208.png"), - - GAMER_CYBER_MASK(7895, "Gamer Cyber Mask", 399, "https://storage.streamdps.com/iblock/383/383652cc1fd3cae9402eeae3a8f5ee1e/df8a16397bb0ed28c0e522b4cfb26500.webp"), - - XMAS_IN_LONDON(9680, "Xmas in London", 20000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/876204a6ad0b1b0e4675d9be42439183.png~tplv-obj.png"), - - HAPPY_FATHER_S_DAY(8712, "Happy Father's Day", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/193eba78ded4d388a0b5a7ae95943796~tplv-obj.png"), - - KO(7542, "KO", 20, "https://storage.streamdps.com/iblock/e5e/e5efb63a21695a08d9647508aca3c95e/cffda8af4cc1a9f4a66eb01b11f4db85.webp"), - - KO_7655(7655, "KO", 20, "https://storage.streamdps.com/iblock/aa6/aa613e765fe5c42519bd83d2d4705118/7db90e1f83b8c87c74dfdc8ee88440cb.webp"), - - MAGIC_FOREST(9135, "Magic Forest", 6000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/63a758dbef9788f690e97cd65dbbb8d2~tplv-obj.png"), - - LEON_AND_LILI(8916, "Leon and Lili", 9699, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/6958244f3eeb69ce754f735b5833a4aa.png~tplv-obj.jpg"), - - MAGIC_STAGE(6263, "Magic Stage", 2599, "https://storage.streamdps.com/iblock/399/399df717aefef9de9259e8256221076f/dfa2835c35b2177701ee65139bdfc59a.png"), - - MAGIC_STAGE_7881(7881, "Magic Stage", 2599, "https://storage.streamdps.com/iblock/6ef/6ef3c6660522545bf8da9858bcc553c6/c68b28842956bf9e8ad3fa2bfe32b1b9.webp"), - - DON_T_DO_IT(7688, "Don’t Do It", 500, "https://storage.streamdps.com/iblock/dca/dcac97e4190d46d113f4bdf2918ee173/4fae166b3f3273b9dbbc2a86bea0ec18.webp"), - - BIRDS(5514, "Birds", 600, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/0911b5726d912dabbf6ee4b0383352ea.png~tplv-obj.png"), - - GOLDEN_TRUMPET(8767, "Golden Trumpet", 15, "https://storage.streamdps.com/iblock/a44/a4441a11d3cb073e855088a4eff72fdb/020b0d041c38b00b730b28806dbe6cc5.webp"), - - HANDS_UP(8244, "Hands Up", 499, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/f4d906542408e6c87cf0a42f7426f0c6~tplv-obj.jpg"), - - HAT_AND_MUSTACHE(6427, "Hat and Mustache", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/2f1e4f3f5c728ffbfa35705b480fdc92~tplv-obj.jpg"), - - CONCERT(7880, "Concert", 2888, "https://storage.streamdps.com/iblock/0a5/0a59a6ed630ba5aa03392675e6a25654/9ea2257ab244985b43ee801d0889a626.webp"), - - PAIMON_SURPRISE(8299, "Paimon Surprise", 1299, "https://storage.streamdps.com/iblock/ffc/ffc784ca54363f5d1d0c195419a3c19b/27096967caade6f066ce748bf5327244.webp"), - - GOOD_EVENING(8267, "Good Evening", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/0015a756ff783f37a2cf3b5d634b3cd6~tplv-obj.png"), - - HI_MAY(6471, "Hi May", 88, "https://storage.streamdps.com/iblock/970/970b0a868ce24c4b7b7059a904fa7b00/622d597d3cec282d6d2c8129fedd5075.png"), - - WEDDING(6286, "Wedding", 1400, "https://storage.streamdps.com/iblock/7be/7beeb7f1098cf5f784739a0be38a06f8/0678483823c912e4dea96fa19a2f0d86.png"), - - JUNGLE_HAT(7262, "Jungle Hat", 199, "https://storage.streamdps.com/iblock/872/872acdd2b7b2599f6866e1230f18dfcc/f10df6cbafc160a9d8216a61a7995cd1.webp"), - - CENTER_STAGE(7879, "Center Stage", 1799, "https://storage.streamdps.com/iblock/f98/f98f3a270c59ee6b1c7ce1ca4d4cdb6d/46cdf56fbdb0e25155535de03da71404.webp"), - - ROCK__N__ROLL(5882, "Rock 'n' Roll", 299, "https://storage.streamdps.com/iblock/954/9549b94076c5bd9d0f7c1b053575d6b5/0449df20dda027cdecb5c4fb1eb433c4.png"), - - GALAXY(5886, "Galaxy", 1000, "https://storage.streamdps.com/iblock/33e/33ec65ba07bdcde7975c9f271eed8161/80ea5438ec2ca8fe00ef38dd4d7b3b4b.png"), - - CHICKEN_AND_COLA(6487, "Chicken and Cola", 100, "https://storage.streamdps.com/iblock/8e5/8e53ea3eefa37bfe9582392f3d141787/658afdede03040e1fce51a2d9441b684.webp"), - - DJ_SET(6248, "DJ Set", 20, "https://storage.streamdps.com/iblock/d75/d7572b61a93c092616c038eff95cee10/305f02f65f6fab1bb4c6f3d90ce6c043.png"), - - ELLIE_THE_ELEPHANT(6845, "Ellie the Elephant", 5000, "https://storage.streamdps.com/iblock/1eb/1eb7a0716b0ec3ff586858afa730f79d/29db993db1482973b7f53801dab25365.webp"), - - ELLIE_THE_ELEPHANT_6922(6922, "Ellie the Elephant", 5000, "https://storage.streamdps.com/iblock/a50/a5066168880bb6ef8031214e748e7d2d/57bc2767a0041a594dcbb6321c0c8679.webp"), - - MUSIC_NOTE(5915, "Music Note", 169, "https://storage.streamdps.com/iblock/cc1/cc17f136f458a86943d7fd503c0a34b4/c56797b8b830d159f31fe5ca5527f586.png"), - - FLOWER_SHOW(5831, "Flower Show", 500, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b6266323ef3ea0d313cbab6911ff8c46~tplv-obj.png"), - - MAXWELL(8189, "Maxwell", 10, "https://storage.streamdps.com/iblock/82b/82b7041dcdd8fcc1842c0dd7b5a63099/73736d5ec979ad00f4b771397d9b998b.webp"), - - LOVE_DROP(8277, "Love Drop", 1800, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/1ea684b3104abb725491a509022f7c02~tplv-obj.jpg"), - - WHITE_ROSE(8239, "White Rose", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a2d81f3847457be9083a9c76a59b08cb~tplv-obj.png"), - - YACHT(6103, "Yacht", 9888, "https://storage.streamdps.com/iblock/b6c/b6c9d3c6df6733cc85149897764d2c6b/023d358a3d7a7a330ed006eb07117582.png"), - - YACHT_9501(9501, "Yacht", 20000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/e69e2626f6ff43d1c1f2b8ae5ea42514.png~tplv-obj.jpg"), - - WINDOW_BASKET(8648, "Window basket", 500, "https://storage.streamdps.com/iblock/a8d/a8d0c44c86385d4cd02ad2d840dcb148/8bbdca8666946a2e7172b3eaeed02303.webp"), - - SWAN(5897, "Swan", 699, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/97a26919dbf6afe262c97e22a83f4bf1~tplv-obj.jpg"), - - GREAT_TEAM(8203, "Great Team", 1, "https://storage.streamdps.com/iblock/95f/95f3f1519e2b1d025b9a0a1e2faa2fa5/ff1b5216cf3b50aa851d6bd865957dba.webp"), - - HELLO_TRAVELER(7501, "Hello Traveler", 5, "https://storage.streamdps.com/iblock/a46/a4668dd315e2d9d84fd267fd0bc9ca59/0eb68fd9e58d9c9072d8ec7185103371.webp"), - - HEARTS(5586, "Hearts", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/934b5a10dee8376df5870a61d2ea5cb6.png~tplv-obj.jpg"), - - FOOTBALL_HELMET(7851, "Football Helmet", 50, "https://storage.streamdps.com/iblock/9cc/9cce61670c1a81b7954fcf3520dc15a2/b78182e9fd2ff1c6ae1256abd8e2e2bf.webp"), - - NEMO(9704, "Nemo", 15, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/68fcf30cb3fb07e9546f5e7fbc2b0ac0.png~tplv-obj.png"), - - SCORPIO_STAR_SIGN(7159, "Scorpio Star Sign", 9999, "https://storage.streamdps.com/iblock/c91/c91f3a3685b5c54d9e96d5f9443c4fda/50c48574ff60f328b7a50b80cd9aa4b8.webp"), - - SOCCER_BALL(5852, "Soccer Ball", 39, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/e1932db6aea81bbddc4e7dc0229ac155~tplv-obj.png"), - - GAME_CONTROLLER(6467, "Game Controller", 100, "https://storage.streamdps.com/iblock/603/6032c1b0d5c2c07abe04956b3cdd45cd/d75d75a7e81f96f39d2ffd574063924f.png"), - - GAME_CONTROLLER_6960(6960, "Game Controller", 100, "https://storage.streamdps.com/iblock/030/030f63329d68d21c5faacab88006a17f/fbb8dd78b47184321d93e3ae5a1f2cca.webp"), - - TIKTOK_UNIVERSE_(7312, "TikTok Universe+", 34999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/b13105782e8bf8fbefaa83b7af413cee~tplv-obj.jpg"), - - HANGING_LIGHTS(5937, "Hanging Lights", 199, "https://storage.streamdps.com/iblock/e03/e03da22fa8c302dbf1d9439c65380549/6d9f912b5a9253f91c01ed58e3ccbe47.png"), - - VACATION(8804, "Vacation", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/8f46e8eef9cbd5304fb802104c2b4ef4.png~tplv-obj.png"), - - FOOTY(5893, "Footy", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/94f8ac5c7b6f90aba713b44ddac40bf1~tplv-obj.png"), - - GRUMPY_GLASSES(7846, "Grumpy Glasses", 99, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/6f38f8ed7442f69a105788b5c0c74a38~tplv-obj.png"), - - BATIK_CLOTHES(5461, "Batik Clothes", 1000, "https://storage.streamdps.com/iblock/46d/46d0f497391a934d27d9b993f444d8b2/121af719b172eed61d8a75c1b1341c9d.png"), - - DANCING_QUEENS(9240, "Dancing queens", 20000, "https://storage.streamdps.com/iblock/c79/c793af446369ecef5238e73312c84ccd/464a76f3e6eaee9afc771f45a4bba9df.webp"), - - TIKTOK(5269, "TikTok", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/802a21ae29f9fae5abe3693de9f874bd~tplv-obj.jpg"), - - AIR_DANCER(5661, "Air Dancer", 300, "https://storage.streamdps.com/iblock/8ab/8abe051a8ba9b99026dc3c0a12b59b9e/914def28d5bd9a77be433f35a51d3bc2.png"), - - APRIL(8237, "April", 1, "https://storage.streamdps.com/iblock/286/2868dcf1aa87ea32265bbd75e75d9f60/ca42b293ad5e3062659989fa985dbbc0.webp"), - - DIAMOND_RING(7367, "Diamond Ring", 1500, "https://storage.streamdps.com/iblock/31d/31db4a4c7058c4678c113459f6666f59/572f9e9d8fa61bee659551cfa1fa873d.webp"), - - THE_PASSION_ROSE(7824, "The Passion Rose", 199, "https://storage.streamdps.com/iblock/1f7/1f7ff4f8a00e2aaaaa91337e3c035bef/813a759c5b88d3af96aa7b810b88fcf4.webp"), - - THE_PASSION_ROSE_7835(7835, "The Passion Rose", 199, "https://storage.streamdps.com/iblock/c3d/c3d0ba3211f8dbd471180427afc05dbb/702c139809f990c7b7d9b552bd02825e.webp"), - - CHEF_S_KISS(7016, "Chef's Kiss", 199, "https://storage.streamdps.com/iblock/be2/be2d88eb75a875345716e8e72f4cb6c1/ad63012a0e0c16526f28bb75fe119e0d.webp"), - - FALL_CANDLE(5903, "Fall Candle", 1999, "https://storage.streamdps.com/iblock/dd8/dd8c34b0f17b0f2e859ad9ac4ed02c4e/409338ce2892d9ac2bab3b20990f7b13.png"), - - SENDING_POSITIVITY(8600, "Sending positivity", 199, "https://storage.streamdps.com/iblock/29b/29b0e9cb18e3479d17188235f8fdf480/58c6e916f44dcdda9d2f68dbdae77ddb.webp"), - - GAMING_CHAIR(6031, "Gaming Chair", 1200, "https://storage.streamdps.com/iblock/bd1/bd14b9754a264a2b1fca22c7171d79ac/448d467dd4d3e6a8945981c52017b11a.png"), - - CHAMPION(5955, "Champion", 1500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/58ce827091411e667dd6ba8a93215f86~tplv-obj.jpg"), - - STAR_ADVENTURES(6320, "Star Adventures", 1999, "https://storage.streamdps.com/iblock/411/4116197948fd486fa5543b87eae4e89e/e6895f7490ccd06c913917ab3e0f1884.png"), - - GIANT(9149, "Giant", 3999, "https://storage.streamdps.com/iblock/990/99093308d3ad2c3833d230f9aae7f702/36f073ad050bd79d7d1ba6d781e7ef11.webp"), - - HARVEST_FESTIVAL(7073, "Harvest Festival", 1, "https://storage.streamdps.com/iblock/1f7/1f7cc70b38ac725b01586e1d1daa7cc1/8b053a13e770f0e285d38f66c2e98bbb.webp"), - - ISLAND_OF_LOVE(6506, "Island of Love", 4000, "https://storage.streamdps.com/iblock/b4d/b4d960acabcbf7b72400d8711174e6f6/e31b32b8e14e7790fcde6f3e8dea975d.png"), - - LEON_AND_LION(7823, "Leon and Lion", 34000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a291aedacf27d22c3fd2d83575d2bee9~tplv-obj.jpg"), - - CLOUD_BREAD(5826, "Cloud Bread", 1, "https://storage.streamdps.com/iblock/116/1166fd0ea70e5a7b7a51d718f2cbd06c/6ebf49c51e627d917d96291316c3f812.png"), - - MATCH_WAND(7029, "Match Wand", 100, "https://storage.streamdps.com/iblock/cb8/cb8be2865ae41bb724da5f5ae0192d4e/29e9af643ce5fcc267605f68a6656e2d.webp"), - - MATCH_WAND_7810(7810, "Match Wand", 100, "https://storage.streamdps.com/iblock/841/841037f168f5e2757ead3d4989d40850/cac3e62b0c75d0914fe2e588832e14ee.webp"), - - BUTTERFLY(5729, "Butterfly", 169, "https://storage.streamdps.com/iblock/452/452ae452eb33dfc55a52248b13c1672c/82022fd917229b464490c1a59c87feb4.png"), - - FOUNTAIN(8887, "Fountain", 1200, "https://storage.streamdps.com/iblock/07d/07d678346c7eb588bc3cbddf343ab791/8f8f50f5350e4b1c0b151aff333e43a4.webp"), - - KOALA(5822, "Koala", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/22c8fa54da366c111f7bb915d4429e2d~tplv-obj.png"), - - GARLAND_HEADPIECE(6437, "Garland Headpiece", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/bdbdd8aeb2b69c173a3ef666e63310f3~tplv-obj.jpg"), - - AEROBIC_HEADBAND(9255, "Aerobic headband", 99, "https://storage.streamdps.com/iblock/3d9/3d98c2fbc96922da37a9d22881bb06b9/0a99af132ab8e3fe9806d2412abc6bf0.webp"), - - MOUNTAINS(9516, "Mountains", 12000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/51a7d74bcb4a6417be59f0ffc0b77e96.png~tplv-obj.png"), - - FULL_MOON(7222, "Full moon", 299, "https://storage.streamdps.com/iblock/e64/e64dd135280596ce7f1aebbdc3e33a80/494b818b6a4217f1807255ca148c7b2d.webp"), - - CHEEMS_DOG(6486, "Cheems Dog", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/d2c9e50efa3b9ff1ed31c96440a9d3a1~tplv-obj.png"), - - CAT_PAWS(6046, "Cat Paws", 1, "https://storage.streamdps.com/iblock/c04/c04061e18b637df6759417bfe5418c9c/89bc2c5278f4a3c28acebdd10f6bc089.webp"), - - WAVING_HAND(5959, "Waving Hand", 7, "https://storage.streamdps.com/iblock/6da/6da44060164719c3bcb171fb06d6d0d4/a80d1fa6879b0970246f41c444dca47c.webp"), - - FRUITS_HAT_(6744, "Fruits Hat ", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/2316b31fc5259cc29f281d88fbca0568~tplv-obj.png"), - - BUBBLES(5850, "Bubbles", 500, "https://storage.streamdps.com/iblock/4b1/4b1a012395fd18f6ed835539089dd3c3/98688050698f0180bdd46018a4e98ec1.png"), - - SILVER_SPORTS_CAR(8433, "Silver sports car", 5000, "https://storage.streamdps.com/iblock/132/132eb0981780e3e268f844106037b277/a1afff85fc6c53482fccbea21709d36b.webp"), - - LIGHTNING_STORM(9515, "Lightning Storm", 6000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/6f673fbb0ae6860e2b1e254538c958ba.png~tplv-obj.png"), - - RACCOON(8448, "Raccoon", 15, "https://storage.streamdps.com/iblock/539/5396582d174489f32525f871cb3087f8/041896a3554f3d4b8c86f486bc81b125.webp"), - - HEART_ME(7934, "Heart Me", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/d56945782445b0b8c8658ed44f894c7b~tplv-obj.jpg"), - - LEOPARD(7978, "Leopard", 15000, "https://storage.streamdps.com/iblock/eb4/eb4d116b15c03c2974b86fa400fa6a07/9a34b020e29f2d25f434387ae01b6386.webp"), - - TIKTOK_TROPHY(7357, "TikTok Trophy", 699, "https://storage.streamdps.com/iblock/7f6/7f6d5df92bf4b5b559567b9a870d485f/1811197db0860ff395435d51d35598ef.webp"), - - LOVE_BOMB(6050, "Love Bomb", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/2a1c1b14f5e9f7be5d76fa4928f574f1~tplv-obj.png"), - - TENNIS(6169, "Tennis", 1, "https://storage.streamdps.com/iblock/f20/f20121609887f7ff35952c1bc52529e2/9ff66229b1f81d21b15444ba2b53db98.png"), - - NECKLACE(5662, "Necklace", 400, "https://storage.streamdps.com/iblock/a40/a40013bbd1e38e11c0772f8b605c6c25/567d58bd02385de4af1523980cb03a85.png"), - - CHOCO_STRAWBERRIES(7837, "Choco Strawberries", 30, "https://storage.streamdps.com/iblock/791/7913d94ea7979d96332bb0f1ec0915aa/bbdff72cdcf98f8f9103b5ea3a3055e1.webp"), - - BIRTHDAY_CAKE(5776, "Birthday Cake", 300, "https://storage.streamdps.com/iblock/15b/15b90a8410ae99caf0c2bb06b3efac4b/95b0e8efca45f197166d926310d532a4.png"), - - BIRTHDAY_CAKE_6071(6071, "Birthday Cake", 300, "https://storage.streamdps.com/iblock/9e8/9e8a10cccba69c6c0ff2ed83fc6bd159/1ec601915a4f7bc2de7550893ab4faf8.png"), - - BIRTHDAY_CAKE_9097(9097, "Birthday Cake", 1, "https://storage.streamdps.com/iblock/5b9/5b9eca4a99e965cb25183681a07a5276/c28f7e9c4a8e42460225ff2d12300ae7.webp"), - - WITCHY_KITTY(7084, "Witchy Kitty", 30, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/dfce46f99a1206cca84f9092603e4783~tplv-obj.png"), - - BANANA_LEAF_VESSEL(5991, "Banana leaf vessel", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/8e635863e20cfa3651bd8a5b762ae72d~tplv-obj.png"), - - ICE_LOLLY(6545, "Ice Lolly", 10, "https://storage.streamdps.com/iblock/93d/93dda2498d64aa0a29d444103a7804dd/92fd7397fffbaa8755cb233815964bbf.png"), - - CONFETTI(5585, "Confetti", 100, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/cb4e11b3834e149f08e1cdcc93870b26~tplv-obj.jpg"), - - PANETTONE_GDM_23(7477, "Panettone GDM 23", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/64ce2413a362442819b4551703b7b26c~tplv-obj.png"), - - MATCH__MATCH_(7068, "Match! Match!", 200, "https://storage.streamdps.com/iblock/cb4/cb43e14c94694d3d3ae355bdfc517afd/494cd902b8018b35b6dc0f0016c89694.webp"), - - SHINY_AIR_BALLOON(7123, "Shiny air balloon", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/9e7ebdca64b8f90fcc284bb04ab92d24~tplv-obj.jpg"), - - RACE_CAR(6892, "Race Car", 12000, "https://storage.streamdps.com/iblock/c1d/c1dd91d0cb97495c4d69a389b3a5a1ae/ee71e32f9e7bfa24a1d0e0a6dc28add1.webp"), - - MARIACHI_HAT(6242, "Mariachi Hat", 199, "https://storage.streamdps.com/iblock/51c/51c4798a037aeb652d43631af3e7634e/846f79297d6cf7d029fa3074765139c7.png"), - - MARIACHI_HAT_7094(7094, "Mariachi Hat", 199, "https://storage.streamdps.com/iblock/ada/ada653db47b3c097d794fc908a604357/aad16e67de36036f1ddfaf22627d6824.webp"), - - SUNSET_SPEEDWAY(6203, "Sunset Speedway", 10000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/df63eee488dc0994f6f5cb2e65f2ae49~tplv-obj.jpg"), - - NEW_YEAR_JOURNEY(9645, "New Year Journey", 12024, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/0ef9654d92354172fb9b3b364827940c.png~tplv-obj.jpg"), - - DANCING_ADAM(7468, "Dancing Adam", 5000, "https://storage.streamdps.com/iblock/f5c/f5cda80a1f9853c49226a450faf26e8f/6318d17d7a2526f521123402d19a4c3e.webp"), - - SCEPTRE(5300, "Sceptre", 150, "https://storage.streamdps.com/iblock/080/080d7e9dc934f98dd8cf5dce3b5075b2/a62a3963f6d2822177763b51d4328d37.png"), - - SCEPTRE_7364(7364, "Sceptre", 150, "https://storage.streamdps.com/iblock/d2d/d2d1b0359f480a7db08e490364d056b2/bcb44a039dfa4d148af6cde9f233ea13.webp"), - - GOBBLE_GOBBLE(9604, "Gobble Gobble", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/ada9babc0b55cf005e8c8d13dfc30b42.png~tplv-obj.png"), - - REINDEER(9670, "Reindeer", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/4565fa0cd1dbf76463144b0d4cc50bf1.png~tplv-obj.png"), - - SEAL_AND_WHALE(8381, "Seal and Whale", 34500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/3781e9159ff09272826d3f2216ba36ef.png~tplv-obj.jpg"), - - HAPPY_PARTY(8247, "Happy Party", 6999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/41774a8ba83c59055e5f2946d51215b4~tplv-obj.jpg"), - - WE_LOVE(7503, "We Love", 299, "https://storage.streamdps.com/iblock/679/679e9e38e38f8a4ce707328aa92b8997/9fedb22710af980bbf7b3092b08ecb94.webp"), - - HI_NOVEMBER(7176, "Hi November", 1, "https://storage.streamdps.com/iblock/2e1/2e1bd0d30bac3377a114d2080f9687b0/4213592ba44947c98100df3dd8969f32.webp"), - - CELEBRATION_TIME(6790, "Celebration Time", 6999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/e73e786041d8218d8e9dbbc150855f1b~tplv-obj.jpg"), - - MONTY(7742, "Monty", 1, "https://storage.streamdps.com/iblock/c70/c70e3a9404b18068056d04d5394d739a/4e0e55d9d10a7747b7caf462cd87b4b3.webp"), - - PYRAMIDS(8416, "Pyramids", 15000, "https://storage.streamdps.com/iblock/988/988ffe82e8f3b235bd91dac1e31e708d/ad0365d14ba0480e5d6d60f6eb798608.webp"), - - PYRAMIDS_8435(8435, "Pyramids", 15000, "https://storage.streamdps.com/iblock/bfc/bfcf491b940e478b6410047bc047af1b/abbbdd13015a9f31be1b905268873d73.webp"), - - CASTLE_FANTASY(5340, "Castle Fantasy", 20000, "https://storage.streamdps.com/iblock/627/6274dd0d88e316ff29400fba7f909b65/804bfbbd710eb8eea87fc7ebd5c07edc.png"), - - CASTLE_FANTASY_5478(5478, "Castle Fantasy", 20000, "https://storage.streamdps.com/iblock/270/270a87b201ff12b668ee876e167f0711/d49702e94f92d4583a928aac7f3741b0.png"), - - CASTLE_FANTASY_6833(6833, "Castle Fantasy", 20000, "https://storage.streamdps.com/iblock/a08/a088a2975c7d4a68b8146a4c6b5c97c1/2729c82ccd54828bd950675e7491d71c.webp"), - - HI_JULY(6603, "Hi July", 1, "https://storage.streamdps.com/iblock/e03/e0301a9670584be92d945ff3cb889b99/0fbb7b11f916953201588b5bfbcb3f5a.png"), - - SUMMER_IRIS_(6655, "Summer Iris ", 30, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/cb591f5b5729fa6e64cac57c78724981~tplv-obj.png"), - - LIGHTNING_BOLT_(6652, "Lightning Bolt ", 1, "https://storage.streamdps.com/iblock/265/2655cafe6afc1fa0fca76a732bad4730/bfb4abdf65da281c7ccf0b682f3406a3.webp"), - - AURORA(8754, "Aurora", 12000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/1f59f5593ce135325c1a034825cec18c.png~tplv-obj.png"), - - CAMPING_NIGHT(6520, "Camping Night", 13999, "https://storage.streamdps.com/iblock/be3/be3c39c622d80d029c5e752134ac6978/c95701f2e894403ca47de971f2ced0d8.png"), - - MAKE_IT_RAIN(5336, "Make it rain", 500, "https://storage.streamdps.com/iblock/770/770e03c64144e6d7830e884cd7140a8a/47af803e978121e760d649d47e67de50.png"), - - GOGGLES(5734, "Goggles", 199, "https://storage.streamdps.com/iblock/d72/d72b0ed3743ac09f6593ff529caba3f7/a51257da433617b620e76dcfa2b1da0c.png"), - - GOGGLES_8066(8066, "Goggles", 199, "https://storage.streamdps.com/iblock/7b2/7b2f9df1b79a2832a1c849843a88863d/5207ae96e4b06bc496c826859fc828b8.webp"), - - RANKING_LIT(6793, "Ranking Lit", 99, "https://storage.streamdps.com/iblock/c6d/c6d4c3f55a9faff0a9e8a126197bf528/ddc2c77b1f92cdba3e2f74d9bef5d516.webp"), - - RANKING_LIT_6794(6794, "Ranking Lit", 199, "https://storage.streamdps.com/iblock/483/48361b1d6c97776878786862fe1701eb/8b107fcf42005bcd7f6099472032dbae.webp"), - - RANKING_LIT_6795(6795, "Ranking Lit", 199, "https://storage.streamdps.com/iblock/1a7/1a714959f22cae47ddd2bd66498c40e9/ccfd6f578fd7ca4f33ac4d23eb7f51ad.webp"), - - RANKING_LIT_6796(6796, "Ranking Lit", 199, "https://storage.streamdps.com/iblock/649/649a830a2f64be4dc424293692f713c5/5619a1419a930b88670bb2cabe6218cd.webp"), - - STARFISH_BAY(8604, "Starfish Bay", 6000, "https://storage.streamdps.com/iblock/f5b/f5b206d2040b1a7bd6dd0438577e5183/e89a53efdae52e710d437defd69b56ef.webp"), - - I_M_SHY(7391, "I'm shy", 55, "https://storage.streamdps.com/iblock/d8b/d8bf38c1dad2734992e8ee44a379aa26/4b072fda0a53005a35b7271e4548bb96.webp"), - - SWING(5899, "Swing", 399, "https://storage.streamdps.com/iblock/8a1/8a16a7c5d463793c8c3ab5aa407a87d8/dee86ec9c8e98ebcc58e2e3c09b93d10.png"), - - STORMS_AT_SEA(9514, "Storms at sea", 2200, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/4918fbbdf220873dd8cae4c94d1ae037.png~tplv-obj.png"), - - CHRISTMAS_WREATH_G(7527, "Christmas Wreath G", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/7842b50135e089334fc40d9705bb53c7~tplv-obj.png"), - - SUPERHERO_FIGHT(8814, "Superhero fight", 30000, "https://storage.streamdps.com/iblock/d6b/d6b1c955153c8f8c5048d6c8f0d1b418/97d04b889e64328e9ab07224f6072b5f.webp"), - - COOKIE(6883, "Cookie", 5, "https://storage.streamdps.com/iblock/fd2/fd20c8c619b1d43efb9f2fe1923c48a7/45c056f74c9f214dc55d464eab43b224.webp"), - - ELF_GDM_23(9363, "Elf GDM 23", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/60e5289b379660cc562742cf987a2d35.png~tplv-obj.png"), - - DOG_BONE(8108, "Dog Bone", 10, "https://storage.streamdps.com/iblock/8ba/8badf8e0a5bcbf8d98ed6c4fc0e16c69/b0a8a8020986eb564713c042d23f83b2.webp"), - - RUSSIAN_CREPES(5547, "Russian Crepes", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/8525a07c6bf16a74eee66e9ad119b3b8.png~tplv-obj.png"), - - FLYING_JETS(7482, "Flying Jets", 5000, "https://storage.streamdps.com/iblock/5a4/5a4f3c7adc31f60326e3adf1a3a20bf9/bc96de02ceba4b91c1f9c996293974b4.webp"), - - FLYING_JETS_7720(7720, "Flying Jets", 5000, "https://storage.streamdps.com/iblock/738/73887ee5dc4a63709a10a2e3eff67b7c/1588215b603e2495582288471573cd57.webp"), - - FLYING_JETS_9500(9500, "Flying Jets", 5000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/1d067d13988e8754ed6adbebd89b9ee8.png~tplv-obj.jpg"), - - INDOOR_FAN(6565, "Indoor Fan", 199, "https://storage.streamdps.com/iblock/499/499dc6bf36be95e90398a56d18bfeebe/231f634c0c86d034f193477f208f66ca.webp"), - - MIC(5650, "Mic", 5, "https://storage.streamdps.com/iblock/1db/1dbec91a90cdeca9f7fb1ea7280ad5cd/cae0a287f4d2e8d0e1558dcbb4aa3b2f.png"), - - FOREVER_ROSA(8914, "Forever Rosa", 399, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/863e7947bc793f694acbe970d70440a1.png~tplv-obj.jpg"), - - ICE_CREAM_CONE(5827, "Ice Cream Cone", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/968820bc85e274713c795a6aef3f7c67~tplv-obj.jpg"), - - GOOD_MORNING(8269, "Good Morning", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/5c1a28f3aa7eefc27491f3020748ce54~tplv-obj.png"), - - FLY_LOVE(8248, "Fly Love", 19999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a598ba4c7024f4d46c1268be4d82f901~tplv-obj.jpg"), - - BEACH_DATE(6132, "Beach Date", 899, "https://storage.streamdps.com/iblock/504/504a5dfef033a7e90e4f07987b0c0f28/70ec484fc4c798d3e09a7fbcae83ee95.png"), - - TRAVEL_WITH_YOU(6233, "Travel with You", 999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/753098e5a8f45afa965b73616c04cf89~tplv-obj.jpg"), - - GINGEBREAD_MAN(9671, "Gingebread Man", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/2399f65414f77419ec7d5e9274dc8e0e.png~tplv-obj.png"), - - CHOCOLATE_STICK(6002, "Chocolate Stick", 1, "https://storage.streamdps.com/iblock/5c9/5c9487af2038c340fdbeb0b9ea4ff83e/b377ae8024881b93822f7b0a6bfe04e8.png"), - - DJ_ALIEN(8988, "DJ Alien", 5000, "https://storage.streamdps.com/iblock/67c/67cd7b9372f25b4f3558eacdfb83dc8b/059b6bf7b8c268d525fd9295fac0eb61.webp"), - - GAMER_CAT(7549, "Gamer Cat", 199, "https://storage.streamdps.com/iblock/e36/e36cb42edac42a0636f8785b80c274dc/bbd87fef7b269564a4ca32009879c0ab.webp"), - - CASTLE_SKYLINE(6662, "Castle Skyline", 15000, "https://storage.streamdps.com/iblock/fd6/fd6ef04918c4050d61339be0633de5c6/6fb5067ff9f62e09cadfaef00b73aa75.webp"), - - BUCKET_HAT(6627, "Bucket Hat", 99, "https://storage.streamdps.com/iblock/b17/b171f313a2ba4af15e8645f02d24d4e7/a58831515ce8102cb72841e8ed45ed08.webp"), - - ROMANTIC_CARRIAGE(5627, "Romantic Carriage", 6000, "https://storage.streamdps.com/iblock/681/68132980826d9ddb208928c54a798f7f/e4f143cb38a0687729539972b2132ac1.png"), - - AMAZING(5983, "Amazing", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/18256fd3f4402601dd07c83adae3e9a2~tplv-obj.png"), - - BRIDAL_VEIL(5902, "Bridal Veil", 299, "https://storage.streamdps.com/iblock/ac0/ac0cbd1870dd92251f6ef620acb652e5/fe8eca664be736231b8e8e2cc2237a15.png"), - - TULIP_BOX(5325, "Tulip Box", 200, "https://storage.streamdps.com/iblock/d44/d4471e5deb9cb5831f846ca4c9df9c5d/7d1236ecd67b3e655c3dfd72673a423d.png"), - - COOL_(9583, "Cool!", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/424c61f16c16919f169fd0352bd24661.png~tplv-obj.png"), - - SQUIRREL(7213, "Squirrel", 1, "https://storage.streamdps.com/iblock/5c3/5c37dce1eab0d67386329f3a2920a874/38104bd52d316ea76464433b3b07dea7.webp"), - - CHOC_CHIP_COOKIE(6416, "Choc Chip Cookie", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/7dd2731de2e644301a329d3eb437b427~tplv-obj.png"), - - METEOR_SHOWER(6563, "Meteor Shower", 3000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/71883933511237f7eaa1bf8cd12ed575~tplv-obj.jpg"), - - GINGERMAN_PARTY(9668, "Gingerman Party", 1200, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/008a9554e736642f1b2dca9f198bb710.png~tplv-obj.png"), - - CAKE(5720, "Cake", 20, "https://storage.streamdps.com/iblock/edb/edbe349c5a4be01ec1fbf2225d0f48dc/4169ef7f0263177384205df6663451c8.png"), - - MARCH(7976, "March", 1, "https://storage.streamdps.com/iblock/ba4/ba44cb084cab8c9c63b4513a145813f4/56531d239586a3d4552859cb2b23314d.webp"), - - MARCH_8077(8077, "March", 88, "https://storage.streamdps.com/iblock/563/563e36a03f028ccf8d6ed380e3f04f8f/3097c2f24b4eb893a9752099920a2e3d.webp"), - - SNOWBOARD(7747, "Snowboard", 199, "https://storage.streamdps.com/iblock/9f1/9f1a3c5fe2fe7ef505a144e01fc37d29/cbac5622c575d34dfd943bc2a8f3d80c.webp"), - - FIRE_PHOENIX(9092, "Fire Phoenix", 41999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/bfb8425a7e8fa03f9fec05a973a4a506.png~tplv-obj.jpg"), - - STAR(6432, "Star", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/485175fda92f4d2f862e915cbcf8f5c4~tplv-obj.jpg"), - - DALLAH(8097, "Dallah", 10, "https://storage.streamdps.com/iblock/402/402ec89b471788374f63bd0d906e49c2/bbb7055a407d84bd3be843f5ca9fdc4b.webp"), - - GB_NORTH_POLE(9657, "GB North Pole", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/79715a53c41619e7b205eb26e57926d4.png~tplv-obj.png"), - - CHRISTMAS_CAROUSEG(7525, "Christmas CarouseG", 2000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b5ba3941f7389da7495b659e888ea61a~tplv-obj.png"), - - THUNDER_HAMMER(6635, "Thunder Hammer", 1, "https://storage.streamdps.com/iblock/401/401ff4c96ee1f2301db5a6fed5d53103/830012ba80bac708f9281417ede8696c.png"), - - FESTIVE_TINY_DINY(9615, "Festive Tiny Diny", 15, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f2a8c2967c7153e9077bb469f2e42317.png~tplv-obj.png"), - - WOLF(8778, "Wolf", 5000, "https://storage.streamdps.com/iblock/70f/70fa80dd2d07f44f28db148328735a6b/68c7215817c6143ac33036933fcf777d.webp"), - - DAISIES(6447, "Daisies", 1, "https://storage.streamdps.com/iblock/e11/e110e47562d77ab5fa26cc31e840f801/a4a1823ef2c1bc65c4dc2a4e82ec446b.png"), - - DANCE_TOGETHER(6554, "Dance Together", 699, "https://storage.streamdps.com/iblock/803/803c640fa9a7cefeaa37ce5a827bb8f3/d052d0ac9a1a408d3265a11ca8a52725.png"), - - CAMPING(6322, "Camping", 250, "https://storage.streamdps.com/iblock/9a9/9a9370a392311149be37e7c40c3e960d/ecb9dcdacf3a2ae0abef79baf0c4f41c.webp"), - - LUCKY_AIRDROP_BOX(9717, "Lucky Airdrop Box", 999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/6ae56f08ae3ee57ea2dda0025bfd39d3.png~tplv-obj.jpg"), - - GOLDEN(7921, "Golden", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b97f58dcb0250489ae98529bcb0542ca~tplv-obj.png"), - - BALLET_DANCER(5549, "Ballet Dancer", 500, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/c09cc8ce49476d2c46e9c8af6189d5f4.png~tplv-obj.png"), - - FAIRY_WINGS(9463, "Fairy Wings", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/e504dc2f313b8c6df9e99a848e1b3a99.png~tplv-obj.png"), - - TICKET(6856, "Ticket", 10, "https://storage.streamdps.com/iblock/434/434746bffe494ac6ad2eb5e7e4384955/92e426ea0b4d4a9f89d7e2786115cd20.webp"), - - FLOWER_FLIGHT(8327, "Flower Flight", 399, "https://storage.streamdps.com/iblock/886/88657108678e20acb23ff7fea5b479f7/144ff90bc7bc304c7c28064812d85ba2.webp"), - - SOCCER(7283, "Soccer", 1, "https://storage.streamdps.com/iblock/b66/b66678fc470a853df0b9c8d547d53809/81e216e2cb71bebe600bb5ff0ed61e62.webp"), - - CONVERTIBLE_CAR(8599, "Convertible Car", 12000, "https://storage.streamdps.com/iblock/2cf/2cfc5af50894de318b81438a7e137710/060001e901992f5462c841b987876eeb.webp"), - - MUSHROOM(8283, "Mushroom", 10, "https://storage.streamdps.com/iblock/883/883cbcd93cbfc9c443eeeb7278d03d87/b421f5e48d0fdbfda7c4475bbab69ff4.webp"), - - CHOCOLATE(5860, "Chocolate", 1, "https://storage.streamdps.com/iblock/522/52287f41673e2fd836c83ec78e95f08a/77307666e41e09e54052fd321c2906c4.png"), - - RIO_DE_JANEIRO(7218, "Rio de Janeiro", 9999, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/34c0eb43c3d50e8ab64408171ebbe733~tplv-obj.png"), - - REALLY_CURIOUS(9703, "Really Curious", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/793ba68723567b695b12f2ef08dc1484.png~tplv-obj.png"), - - BLOOMING_RIBBONS(9498, "Blooming Ribbons", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f76750ab58ee30fc022c9e4e11d25c9d.png~tplv-obj.jpg"), - - CORNFLOWER(8186, "Cornflower", 5, "https://storage.streamdps.com/iblock/025/025c50c390f6a12148a69728284c7298/36b50fe529db9d7db028b0774842e103.webp"), - - SPIN_WITH_ME_GDM(9152, "Spin with me GDM", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/149ac2e87d05490d7d251149cefe27a2.png~tplv-obj.png"), - - ASMR_TIME_(6990, "ASMR Time ", 10, "https://storage.streamdps.com/iblock/49d/49dccba4525df92ed17678cc6ea47e95/b2c8c52d5294bb531d7d87a4c3ff97fe.webp"), - - POOL_PARTY(5938, "Pool Party", 4999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/4147c5bcfad9623c693f83d5d6cba1f7~tplv-obj.jpg"), - - MATCH_STAR(7070, "Match Star", 1, "https://storage.streamdps.com/iblock/497/497fa45aa565639b858e333ae2e0450c/f381f7c1c9a66fb6712e78a3b210b3ab.webp"), - - MATCH_STAR_7074(7074, "Match Star", 1, "https://storage.streamdps.com/iblock/bd5/bd50fed09a13493a57589939f8419460/5b136dca770fbb5c96dc9c62e20bf6b0.webp"), - - GLOW_STICK(6788, "Glow Stick", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/8e1a5d66370c5586545e358e37c10d25~tplv-obj.jpg"), - - MUSIC(6415, "Music", 499, "https://storage.streamdps.com/iblock/366/3663e0462a9eb4519288bf93fce16a76/ee50d49d9ab88cac71617c69be201161.webp"), - - FIRE(5523, "Fire", 1, "https://storage.streamdps.com/iblock/0f1/0f100548d20594a29c36938ceaea1a62/9e8ba4ba863ec74182826cd0ec1204f9.webp"), - - FIRE_5719(5719, "Fire", 5, "https://storage.streamdps.com/iblock/441/4412d8bb2050dfd3780ac56f887c961a/240ad3fc994753581879bb4ab90afb88.png"), - - PEACOCK(8387, "peacock", 15000, "https://storage.streamdps.com/iblock/f9f/f9f23f00af57e8fb8a421a2a7f24aacc/a5eb745418085f1be7692f577ff04b9c.webp"), - - AIRSHIP(6327, "Airship", 1999, "https://storage.streamdps.com/iblock/85e/85e8a2811f78d9e6df7d00419394b88c/da5e075e4040fd8a3b60d4f28a2fb5db.webp"), - - HEALTH_POTION(7813, "Health Potion", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/13f6a46b763c496306ff541daf3021a4~tplv-obj.png"), - - DRAGON_FLAME(7610, "Dragon Flame", 26999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/89b4d1d93c1cc614e3a0903ac7a94e0c~tplv-obj.jpg"), - - NASI_LEMAK(5588, "Nasi Lemak", 1, "https://storage.streamdps.com/iblock/565/56533f45e52bfd5f73f31ddf75812f46/f9aadd4e8227fa94828795c763b22fff.png"), - - MERMAID(6938, "Mermaid", 600, "https://storage.streamdps.com/iblock/386/386c5922deadaafedd55681a927f7011/78756635561cae6fc4225b573e01a84c.webp"), - - TURKISH_COFFEE(5994, "Turkish coffee", 5, "https://storage.streamdps.com/iblock/b1a/b1af09b6f6a337f74c8c0aa3c8ca4ae6/ed0261db4a52540a272958783d97713e.png"), - - HI_APRIL(8238, "Hi April", 88, "https://storage.streamdps.com/iblock/88e/88e25becb6f23daa0e97669a3b2905fb/d7b74b5b1e20c22e9baa4f1f02f1c6f5.webp"), - - TELESCOPE(6733, "Telescope", 5, "https://storage.streamdps.com/iblock/0ff/0ff6c8d47e3d601ef9f775bfa6cf9647/4489d8324898af2a82d18ea04166db2c.webp"), - - POWER_HUG(5631, "Power hug", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/9578adce6e3da2d211583212bdfd1b0e~tplv-obj.png"), - - SPACESHIP(6588, "Spaceship", 13999, "https://storage.streamdps.com/iblock/fb1/fb1096568dcc97c2575dec7441d0d651/245c4c7ce9bf5d5378586eb3a2478b42.webp"), - - PINATA(6800, "Pinata", 699, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/c8a18d43dc9fb4598d7e991ebeb958ae~tplv-obj.png"), - - BIRTHDAY_CROWN(9096, "Birthday Crown", 99, "https://storage.streamdps.com/iblock/c07/c073f2d950a252aa24b7343655208c8a/68f6af6dc16ab51396cef18f50a43792.webp"), - - LION_S_MANE(7985, "Lion's Mane", 500, "https://storage.streamdps.com/iblock/267/2670a5a8c9666b7afffb3255c2c104ee/abe9a0e7a6ef8b83d94df90f3a356748.webp"), - - WATERMELON_LOVE(6781, "Watermelon Love", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/1d1650cd9bb0e39d72a6e759525ffe59~tplv-obj.jpg"), - - COTTON_THE_SEAL(8349, "Cotton the Seal", 399, "https://storage.streamdps.com/iblock/6da/6dac7ca9a1f92e28287a9ef01e55a560/d0317b7d3411edd28a393a56d24a863f.webp"), - - COTTON_THE_SEAL_8852(8852, "Cotton the Seal", 399, "https://storage.streamdps.com/iblock/a36/a36238dfeb0d768707d336eac32cdf82/cf84e06c4c8f1e9dce3db677fd4770a5.webp"), - - ADAM_S_DREAM(7400, "Adam’s Dream", 25999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/9a586391fbb1e21621c4203e5563a9e0~tplv-obj.jpg"), - - GOLDEN_SPORTS_CAR(5287, "Golden sports car", 29999, "https://storage.streamdps.com/iblock/4c1/4c1fa9bee06971f242e06b4578492c3a/2460543c6afe7d35854e3147811fcc1f.png"), - - ICE_SKATING(7749, "Ice skating", 199, "https://storage.streamdps.com/iblock/bca/bca431a96e357d4a81ca36a861290830/2b4ad3b82b5dfea987fcbde0e6a620db.webp"), - - M4_BEATRIX(7543, "M4 Beatrix", 20, "https://storage.streamdps.com/iblock/bda/bdaf5a42e3e788628aee4d75446310e4/2089c0537e7645d02ed0647862564bed.webp"), - - M4_BEATRIX_7656(7656, "M4 Beatrix", 20, "https://storage.streamdps.com/iblock/da7/da77071a5194b9d7a3a6e94a9dcb5a4f/04a7595d5f7ffb42c9e28a697f0feed3.webp"), - - LIKE_POP(8130, "Like-Pop", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/75eb7b4aca24eaa6e566b566c7d21e2f~tplv-obj.jpg"), - - FOREST_FAIRY(9148, "Forest Fairy", 4000, "https://storage.streamdps.com/iblock/078/07801fde04dd77b439384738e630e59f/e50ece2683001006eae00866d6df7b63.webp"), - - NEW_UNIVERSE(9081, "New Universe", 1, "https://storage.streamdps.com/iblock/ff9/ff906a964a6ad9c4504438302d9354b8/3ee4796c239930c395afb3d7ef10295a.webp"), - - SPARKLING_COUNTDOWN(9644, "Sparkling Countdown", 2024, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/d6b4539ed9683707bdefe268f6575e74.png~tplv-obj.jpg"), - - DRUMS(7882, "Drums", 1000, "https://storage.streamdps.com/iblock/449/449c40e5064f776737e24fd6460195a1/477a014b033108643c2d674b2cce2d0a.webp"), - - ELFS_HAT_(9706, "Elfs Hat ", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f9857a040c92b34d6a261201a93c185f.png~tplv-obj.png"), - - PUMPKIN_PIE(7396, "Pumpkin Pie", 5, "https://storage.streamdps.com/iblock/abf/abf5efb8fac6f64568b472c3afdb3e25/f85e4ef55b8c7d03f81351babd833c69.webp"), - - EMAIL_MESSAGE(6199, "Email Message", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/c959df6dbffd6f07849d22d2c3c07861~tplv-obj.jpg"), - - PREMIUM_SHUTTLE(7125, "Premium Shuttle", 20000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/c2b287adee5151b7889d6e3d45b72e44~tplv-obj.jpg"), - - PARTY_HAT(6398, "Party hat", 199, "https://storage.streamdps.com/iblock/e92/e924ae4ad405da962162650abe98c01f/403b19fc0f2f47739d32448548be3263.png"), - - HI_MARCH(7977, "Hi March", 88, "https://storage.streamdps.com/iblock/e22/e2266686271c7a90ff04517f248c6f73/0459d679c01a5bfa5a4be1d61ec81ec8.webp"), - - CANDY_CANE_GUN(7498, "Candy Cane Gun", 799, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/58ef7964e32adc5fc47c5706a02e4ff0~tplv-obj.png"), - - FANTASTIC(6813, "Fantastic", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a1b2204b06aa19d45a0338e9f0099ea7~tplv-obj.png"), - - HEDGEHOG(6868, "Hedgehog", 299, "https://storage.streamdps.com/iblock/841/841e924150793d6961df0a1c89cc67ca/5886839b7de0b1289303081f9af380f8.webp"), - - JAKARTA_ROUNDABOUT(6452, "Jakarta Roundabout", 16999, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/31f67910fc5858cf087da65746f1f9f3~tplv-obj.png"), - - LIVE_FEST(9334, "LIVE Fest", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/1e98afffef90ed4b2cc9c9ebb88e3608.png~tplv-obj.png"), - - I_LOVE_TR(7139, "I LOVE TR", 1, "https://storage.streamdps.com/iblock/84d/84d68e92c471e7da792aa98d856c824c/7728ac60043efb9c96e2ce0f77dbef31.webp"), - - SHIBA_INU(5482, "Shiba Inu", 222, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/ddbcee02f5b86b803b0ec34357cd82ec.png~tplv-obj.jpg"), - - SHIBA_INU_7839(7839, "Shiba Inu", 199, "https://storage.streamdps.com/iblock/3c4/3c40e306064bb00719cb77dec261891a/bc24ae9f8a52d13475897170332d546f.webp"), - - LEMOND_BUDDY(8744, "Lemond Buddy", 199, "https://storage.streamdps.com/iblock/282/28210d38f8625d7c3f39bb85e1fd59c4/61f609f602fc0f3cc2bff6cf94d32fbe.webp"), - - LOVE_HANGUL(7050, "Love Hangul", 1, "https://storage.streamdps.com/iblock/cbe/cbec14bfbd7a08879ed3407271ee8071/00155d009644335398d32c4d35b60a79.webp"), - - HI_BEAR(8692, "Hi Bear", 10, "https://storage.streamdps.com/iblock/f34/f34b75494926337d0bede7003aee0af9/1cb25dfee5bac6dc49b19222ed6967f7.webp"), - - MIRROR(6070, "Mirror", 30, "https://storage.streamdps.com/iblock/306/306868d3fb21b7dffe7012c3d340cddc/718a6093224eda33ed0062de345d4edd.png"), - - DEHYA(8298, "Dehya", 10, "https://storage.streamdps.com/iblock/c69/c6958678de541ee2bc86ca0705a092d6/d33c50b1f67560f9673724a34b01a63d.webp"), - - PANETTONE(7814, "Panettone", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/64ce2413a362442819b4551703b7b26c~tplv-obj.png"), - - BASKETBALL(6269, "Basketball", 1, "https://storage.streamdps.com/iblock/1e1/1e15c5768844b752893c47c9699ffa5e/ac594ceeb59aa16782bfa62a46d832d8.png"), - - SUNSET_IN_BALI(5835, "Sunset in Bali", 799, "https://storage.streamdps.com/iblock/970/97081f479a0fa7bfbd37eab0ce7109c1/9e17c532a2f217b1cd2f01e21783a3db.png"), - - ANEMO_SLIME(7974, "Anemo Slime", 5, "https://storage.streamdps.com/iblock/8b0/8b0d71102fd2ec5bd933dd7b13d05494/0e4b5a7426584dfccd59a45dad66fd96.webp"), - - ANEMO_SLIME_8297(8297, "Anemo Slime", 5, "https://storage.streamdps.com/iblock/bda/bdaab62a1b0e4c545f642c756527befb/f8c85e3a422614f15130d0703bd8ad6a.webp"), - - MP3(6472, "Mp3", 100, "https://storage.streamdps.com/iblock/20a/20a06df8f2d9428df8fd690a7ce4bdaf/40a50efc8884f8c973a58a749350c9c3.png"), - - RHYTHMIC_BEAR(9468, "Rhythmic Bear", 2999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/16eacf541e4bd6816e88139d079519f5.png~tplv-obj.jpg"), - - CRYSTAL_BALL(6428, "Crystal Ball", 1700, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/7e4f9a99b7003ae05186f5324aae9fbf~tplv-obj.png"), - - HAPPY_WEEKEND(8264, "Happy Weekend", 599, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b04f104e717798235cd3edaa6703e6a3~tplv-obj.png"), - - PHOENIX(7319, "Phoenix", 25999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/ef248375c4167d70c1642731c732c982~tplv-obj.jpg"), - - BOUQUET_FLOWER(5780, "Bouquet Flower", 30, "https://storage.streamdps.com/iblock/ceb/cebb5d5f7004d6ccf9336ae20281be88/5061b1767c2325fe6704eb08d97c5cb8.png"), - - PUMPKIN_SPICE_LATTE(9242, "Pumpkin Spice Latte", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/0636d91615f7417ddd5f29438bf5debe~tplv-obj.png"), - - SHIBA_COOKIE(9770, "Shiba Cookie", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/4ea5282e7f61cbeee1214422d40ad407.png~tplv-obj.png"), - - CHILI(7086, "Chili", 1, "https://storage.streamdps.com/iblock/4e4/4e476335c1d0a47efc33a40688d0fc75/ab85d5eccda4bf6509874c9533739b62.webp"), - - GO_SNACKING(7021, "Go Snacking", 1, "https://storage.streamdps.com/iblock/666/6661d244aca6ec5f3de19372316e871e/f967ba18a333cd1489396cb608371824.webp"), - - PUG(6939, "Pug", 299, "https://storage.streamdps.com/iblock/367/367d7a870b489f203c084bd4338b5fba/6efbd5b994d91fa8a467bd338fcead92.webp"), - - TIKTOK_STARS(8582, "TikTok Stars", 39999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/b1667c891ed39fd68ba7252fff7a1e7c~tplv-obj.jpg"), - - CHILL(6704, "Chill", 5, "https://storage.streamdps.com/iblock/7df/7dfcee6b2702691bf9c8ca0966b3c4b1/144aa8fff9ce8c64aa7fcb507bf6c1cd.webp"), - - GINGERBREAD_MAN(9656, "Gingerbread man", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/af01db3e3cb9f54ea2cb421fab6062bc.png~tplv-obj.png"), - - TAKE_A_DRIVE(7624, "Take a Drive", 1200, "https://storage.streamdps.com/iblock/fb5/fb50bcd0bb83c3a338d7d5196a7e987c/aa0e7affca4b6d34877244af7f5b611c.webp"), - - TAKE_A_DRIVE_7631(7631, "Take a Drive", 1200, "https://storage.streamdps.com/iblock/c5b/c5b1ae3782864918bcb70d9e92046b87/8f3b4f952004f1aaef4bccfd69b19568.webp"), - - FRUITS_HAT(7091, "Fruits Hat", 199, "https://storage.streamdps.com/iblock/404/404cc4794702cc6feb93bf4517bc0762/05846cb2d9548cf2f0573159110ecb64.webp"), - - SPINNING_TOP(6483, "Spinning Top", 10, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/6cde70e04a6b40a9879f7b99ff191808~tplv-obj.png"), - - MISHKA_BEAR(5486, "Mishka Bear", 100, "https://storage.streamdps.com/iblock/880/8809f52dbf40e0d670067f8c223d7c04/c603798bc6cd2bdc5a032ddbeb55e258.png"), - - MISHKA_BEAR_5566(5566, "Mishka Bear", 100, "https://storage.streamdps.com/iblock/010/010ccc7a5d5e21231b46cea3223d5b1f/aa9c15ca87e4df8dad9be22164978fc2.png"), - - MISHKA_BEAR_7163(7163, "Mishka Bear", 100, "https://storage.streamdps.com/iblock/0cc/0ccd22056d7cd20351cfb11a8ec62bf1/4f7f3b65fad302160471f52bfc45fc34.webp"), - - PRIVATE_JET(5767, "Private Jet", 4888, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/921c6084acaa2339792052058cbd3fd3~tplv-obj.jpg"), - - BALALAIKA(5927, "Balalaika", 100, "https://storage.streamdps.com/iblock/d88/d88bc38371769262c006dccbaa43c9ff/1e0f5adda0546879e07126492ba6001c.webp"), - - POPCORN(9111, "Popcorn", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/676d2d4c31a8979f1fd06cdf5ecd922f~tplv-obj.png"), - - DRACO(8613, "Draco", 5000, "https://storage.streamdps.com/iblock/48f/48f1a8d280e271929718525560ad42a8/3021d84608e0c5da388f1f6534011a6f.webp"), - - SPEEDSTER(8418, "Speedster", 15000, "https://storage.streamdps.com/iblock/96a/96a5a249a1701c3c03e0b2427bad3b2f/63fb5582c89c17f275fc99505505b719.webp"), - - GEM_GUN(7122, "Gem Gun", 500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/dd06007ade737f1001977590b11d3f61~tplv-obj.jpg"), - - KNOCKOUT(8415, "Knockout", 4999, "https://storage.streamdps.com/iblock/1a5/1a56926523c34ab3b553180c42f7bc55/7a6076446639aade9d5498df45ba7f9b.webp"), - - WASP(7867, "Wasp", 1, "https://storage.streamdps.com/iblock/a2e/a2ee3b391f273bed4c62678256de1d67/fb7e033b22eec6c13fb9a0a4d4bb0ed7.webp"), - - FEATHER_HAT(7545, "Feather Hat", 199, "https://storage.streamdps.com/iblock/a34/a348051e15e9de47b89a23a9a688526b/530fe08e5162bb722eac73314c43972f.webp"), - - PRETZEL(7056, "Pretzel", 10, "https://storage.streamdps.com/iblock/3fd/3fdb36621abdc0daf7b4e2f924263d80/771e3b065da9318186d2ade5f7db03ac.webp"), - - PRETZEL_9175(9175, "Pretzel", 1, "https://storage.streamdps.com/iblock/a67/a6797793eb382a99d38b2a0c37ec9b58/04ea1042707a361ad0f4668d0d759daa.webp"), - - BIG_LOVE(7224, "Big Love", 5, "https://storage.streamdps.com/iblock/9d7/9d791fea266e119ffd938095526a1b55/1923108683e8c0aba3b78e1d0e8137cf.webp"), - - TGIF(6592, "TGIF", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/2734231d880b5cd20149f4cc8c760279~tplv-obj.png"), - - GOLDEN_GAMEPAD(6582, "Golden Gamepad", 30, "https://storage.streamdps.com/iblock/e85/e85940610dd45adc8733b51106c60712/ca839e1139ca0b94070c1e38093e95ec.png"), - - COCONUT_TREE(5794, "Coconut Tree", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/eb0923dbab5251f4c2e0496b11b55c4f~tplv-obj.png"), - - SUMMER_BAND(6555, "Summer Band", 3999, "https://storage.streamdps.com/iblock/43b/43b88814d979720d80a6e17258ab3bd8/b1abf3d90ae212317d6ae339ed5f5be7.png"), - - GORILLA(8602, "Gorilla", 30000, "https://storage.streamdps.com/iblock/1e2/1e29b9d1a0263f1487498dc556cdcbc1/bec227242f8c9b258855071aa050ac17.webp"), - - THUMBS_UP(6246, "Thumbs Up", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/570a663e27bdc460e05556fd1596771a~tplv-obj.jpg"), - - TOWARDS_THE_FUTURE(6625, "Towards the future", 28888, "https://storage.streamdps.com/iblock/b2f/b2f6915948e5eabce83a39c525eebe6f/005804958a7917fd06a09ddeb3f41a0e.png"), - - ZEUS(8456, "Zeus", 34000, "https://storage.streamdps.com/iblock/f4e/f4e74e07fff3d3b48143a5c56af7fec4/8b15ef2f342dcd2066bcdcf82e5f07e9.webp"), - - ZEUS_8457(8457, "Zeus", 34000, "https://storage.streamdps.com/iblock/fff/ffff57559cbd0d73b6b877e99fb9d803/b5127bbee5491c0aa32f764b679b087d.webp"), - - HAND_WAVE(6059, "Hand Wave", 9, "https://storage.streamdps.com/iblock/c80/c805a9c5c4647c816a003f9882f53a7b/3f3cc197f466a19170c0759dd1e9f1f1.png"), - - COOPER_SKATES_HOME(6865, "Cooper Skates Home", 599, "https://storage.streamdps.com/iblock/041/04184b09ec8e7bf137d33cf57ce4eec9/3c2e360b023b9980e54e9d9a394883b9.webp"), - - BIRTHDAY_PARTY(6787, "Birthday Party", 6999, "https://storage.streamdps.com/iblock/135/135b2ac0877de059f56e510b0ac70d08/07285ba7471fb98743bfe308d0b58ce2.webp"), - - BIRTHDAY_PARTY_9095(9095, "Birthday Party", 6999, "https://storage.streamdps.com/iblock/d0d/d0d1164a9ed81239b70cb25b93927023/d0dba293643c67dc33c1f4dda04e5b50.webp"), - - TEASING(6390, "Teasing", 401, "https://storage.streamdps.com/iblock/e14/e14c9b35975f1da5b8a5e3f116dae2bb/9f8cea9b65620e8376e44802c25ddf27.png"), - - CRICKET(6006, "Cricket", 99, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/408d55c0526ada808be7db3e22c02a56~tplv-obj.png"), - - FOAMY_DRINK(6740, "Foamy Drink", 100, "https://storage.streamdps.com/iblock/cc8/cc8133c73d5ca2cb5fde306f5b4e2a11/fb273956755fe6fbf7263023a9c36ebe.webp"), - - CAPYBARA(8217, "Capybara", 30, "https://storage.streamdps.com/iblock/e94/e944534be54186446d7c38563c772029/553d899c4bd4be31e7b051bb36e842f8.webp"), - - GUMMY(6126, "Gummy", 5, "https://storage.streamdps.com/iblock/c33/c338d672d2ccd9de8df40d7afe23e041/cf38b075df9389388a847e24a5af4a9e.png"), - - LEON_THE_KITTEN(6646, "Leon the Kitten", 4888, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a7748baba012c9e2d98a30dce7cc5a27~tplv-obj.jpg"), - - STAR_THRONE(7764, "Star Throne", 7999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/30063f6bc45aecc575c49ff3dbc33831~tplv-obj.jpg"), - - STAR_THRONE_8420(8420, "Star Throne", 7999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/30063f6bc45aecc575c49ff3dbc33831~tplv-obj.jpg"), - - MISTLETOE_GDM_23(7475, "Mistletoe GDM 23", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/3527969b8c27e3194e61ff0787a9c3c2~tplv-obj.png"), - - PLANET(5954, "Planet", 15000, "https://storage.streamdps.com/iblock/dc5/dc50bbe9b153d9f714919d386325a223/b296c2101cb24bc65e8abd2977d6c123.png"), - - DISCO_BALL(5540, "Disco Ball", 1000, "https://storage.streamdps.com/iblock/3e5/3e5e6d701c936bef5b85a0315b841184/e46e6c47d88c9bb81d27eb700456137a.webp"), - - DISCO_BALL_8250(8250, "Disco ball", 1000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a53d3ef956eb2f1aa7a7db46024c70bb~tplv-obj.png"), - - OUD(5301, "Oud", 300, "https://storage.streamdps.com/iblock/6ba/6ba340c152f9154c8d7c45d18bcb5914/6be86ee5d8a8ebaa17d93b766589b151.png"), - - SUITCASE(8597, "Suitcase", 199, "https://storage.streamdps.com/iblock/50f/50f04937063753d6de255d2b5a080c1c/4f101c7c50ddbe8bd26a2ce5f8c16896.webp"), - - DANCING_BEARS(8188, "Dancing Bears", 3000, "https://storage.streamdps.com/iblock/750/75026646d18ce879627c1688d3030aea/584e1dee044c0c11126d2f031ec86a5f.webp"), - - I_LOVE_YOU(5779, "I love you", 10, "https://storage.streamdps.com/iblock/98a/98aec966c166c73997ef2acda553682d/13c611a6fa3e8a8e00e7e6d4989bf56c.png"), - - I_LOVE_YOU_8259(8259, "I love you", 49, "https://storage.streamdps.com/iblock/230/230e7edc8986e8d5f633a2883cbf3667/75b756118ea0ea79126828b48b27644e.webp"), - - SUPER_CAKE(6797, "Super Cake", 1999, "https://storage.streamdps.com/iblock/34f/34f1b053a3657b7113e287e31bcb68b9/ba9debb65391244c8f6645438f6bc261.webp"), - - DAFFODILS(6435, "Daffodils", 99, "https://storage.streamdps.com/iblock/2ed/2edf26fa90a7b3ca44c0d7c77a765c77/c333c68579488e9a36f4130481932b7c.png"), - - MARACAS(7032, "Maracas", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/00204efcf0573192ad5d872c7beeaf5b~tplv-obj.png"), - - TINY_DINY(6560, "Tiny Diny", 10, "https://storage.streamdps.com/iblock/504/50412c09b6d36020e28ee09ceb45f22b/aa96e43206d46ed5f25e8f476f67da45.png"), - - TINY_DINY_7591(7591, "Tiny Diny", 10, "https://storage.streamdps.com/iblock/b24/b24309d4ea6722875678e492ae12fb3f/864ac7928a78b43be2d1ee93915a53f5.webp"), - - CORGI(6267, "Corgi", 299, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/148eef0884fdb12058d1c6897d1e02b9~tplv-obj.jpg"), - - DIAMOND_KING(5337, "Diamond King", 1500, "https://storage.streamdps.com/iblock/d7a/d7a7a3a0933ddead34a48a03d965f77a/bb50ca99cdfbdc705cacff9af43a1b20.png"), - - LOCK_AND_KEY(5880, "Lock and Key", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/2c9cec686b98281f7319b1a02ba2864a~tplv-obj.jpg"), - - TTEOKBOKKI(5645, "Tteokbokki", 5, "https://storage.streamdps.com/iblock/81c/81ca5954462f21f506095fe410dd2aaf/c07e9b0bb8d0559874b780495cc0e451.png"), - - CRYSTAL_HEART(5559, "Crystal Heart", 499, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/ae46ac6582a606009643440fe4138eb4.png~tplv-obj.png"), - - LOLLIPOP(5657, "Lollipop", 10, "https://storage.streamdps.com/iblock/857/85755cf3d5e2e5349efff7eeedbfff46/b5e02fcff0a73b906d530028d460e59d.png"), - - FLOWER_FESTIVAL(8442, "Flower Festival", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/9bfe63e39b581a69ff944758c3eae5a0~tplv-obj.png"), - - GRAPES(7234, "Grapes", 1, "https://storage.streamdps.com/iblock/442/442580106ac8748b79ef450eb25b5981/df624c619c48b583adee184bca134c80.webp"), - - TSAR(5524, "Tsar", 100, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/cb1c3e6263d4b6c08301f8798dcb5a9b.png~tplv-obj.png"), - - LLAMA_GREETINGS(6531, "Llama Greetings", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a6b95ce6350f5f4bdff6880ac6993789~tplv-obj.png"), - - SAM_THE_WHALE(8391, "Sam the Whale", 30000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/f48a1887eb88238738996bb997b31c0f.png~tplv-obj.jpg"), - - DIAMOND_TREE(7963, "Diamond Tree", 1088, "https://storage.streamdps.com/iblock/47a/47afc3c8563cacbff2ce13f2310a2fc4/84761a2a3e0431bda3bf3d2cc9d02b3f.webp"), - - LOVE_YOU(6125, "Love You", 10, "https://storage.streamdps.com/iblock/df0/df0c467bdbd803c8dc6a844499723d20/af65c7b68fb75877a5ecad188c27880a.png"), - - LOVE_YOU_5919(5919, "Love you", 20, "https://storage.streamdps.com/iblock/728/728eb443836e4ea999aa2cf341f26561/69d6c2bce8f5523d186a03b7eef20e1b.png"), - - LOVE_YOU_6890(6890, "Love you", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/ab0a7b44bfc140923bb74164f6f880ab~tplv-obj.jpg"), - - HERE_WE_GO(8245, "Here We Go", 1799, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/61b76a51a3757f0ff1cdc33b16c4d8ae~tplv-obj.jpg"), - - CHASING_THE_DREAM(7467, "Chasing the Dream", 1500, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/1ea8dbb805466c4ced19f29e9590040f~tplv-obj.jpg"), - - BIRD_WHISPERER(8344, "Bird Whisperer", 5000, "https://storage.streamdps.com/iblock/079/079bf5895816fb04293d01375eaf23a5/672128ca0f65deb0e75e2a9a690a79f0.webp"), - - GOOD_NIGHT(8268, "Good Night", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b7b55087141bd5f965eb31a99a5f157b~tplv-obj.png"), - - TRAIN_TO_2024(9642, "Train to 2024", 12024, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/0cb12913e0a96bbcc45f97b450e74cd3.png~tplv-obj.jpg"), - - ALIEN_PEACE_SIGN(7831, "Alien Peace Sign", 1, "https://storage.streamdps.com/iblock/5f7/5f7b29f5c7a4ca3a4dbbe8dc0e195459/cd83433a0f1697a0b66a891cbd7cf1af.webp"), - - THE_MAGIC_LAMP(7161, "The Magic Lamp", 1000, "https://storage.streamdps.com/iblock/e0d/e0d45fccd69220f321531383d97f51fc/4296cc4b886f31bb5b2cf106ebf640ab.webp"), - - TACO_(6113, "Taco ", 9, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/43d06db8c962623dbed6ecf70fb89ca8~tplv-obj.png"), - - TIARA(8496, "Tiara", 299, "https://storage.streamdps.com/iblock/1b1/1b1ee7b697bae41ee2cbf834d1f1099e/303eec791a710c2417bb5075529681d9.webp"), - - THE_CROWN(8207, "The Crown", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/5bf798f92fe96ba53c0f4d28f052f9bb~tplv-obj.png"), - - COFFEE(5333, "Coffee", 1, "https://storage.streamdps.com/iblock/920/920b64634d946a2238950c353c16df81/0fe22d9bdee1bd6d9d77f66bcd8cf45a.png"), - - COFFEE_5479(5479, "Coffee", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/02492214b9bd50fee2d69fd0d089c025.png~tplv-obj.jpg"), - - COFFEE_5933(5933, "Coffee", 10, "https://storage.streamdps.com/iblock/6d7/6d7c47d7f1862904fb26bf7b8297befb/fe6a95bcfc5abe6545f44983045aae65.png"), - - COFFEE_5961(5961, "Coffee", 30, "https://storage.streamdps.com/iblock/87b/87b2a811f1ca8c09060e2bd63a3b3be7/ae6288eb1eab67474807c64b9d69b5e6.webp"), - - MAGIC_HAT(6393, "Magic Hat", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b156ffd21bb3849a52144ab1688bbc43~tplv-obj.png"), - - HAND_HEART(5924, "Hand Heart", 100, "https://storage.streamdps.com/iblock/5ce/5cebff2a4b737063778ac5374e9e4792/f9bf5c945eb61002916feff420a1cc3a.png"), - - HAND_HEART_6968(6968, "Hand Heart", 100, "https://storage.streamdps.com/iblock/9f0/9f0bfed08f1d3b9e852469d6a4debeda/519497b062ded1019c958d5d0b352a7e.webp"), - - FRIEND(6752, "Friend", 299, "https://storage.streamdps.com/iblock/b70/b70182f7b0698b28b35b8816a4baa025/444dad1c4154d1d0be3629c32b2dec19.webp"), - - GARDENING(8232, "Gardening", 500, "https://storage.streamdps.com/iblock/304/304792b9ecf0559337cbd177eac7d286/87a750e1dfaf6d811af3d9970a64501d.webp"), - - GOLD_MINE(5587, "Gold Mine", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/58cbff1bd592ae4365a450c4bf767f3a.png~tplv-obj.jpg"), - - HAND_HEARTS(5660, "Hand Hearts", 100, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/6cd022271dc4669d182cad856384870f~tplv-obj.jpg"), - - GUITAR(6723, "Guitar", 99, "https://storage.streamdps.com/iblock/95e/95e6348b4ebcc6a163b9be452f3ee3ff/84a43f426dabe8772de4d6002827b064.webp"), - - GUITAR_7092(7092, "Guitar", 99, "https://storage.streamdps.com/iblock/5b6/5b657901ae6913dc23094f29e1450318/ba8b1c60d24c93fa641fa7f7ff5c1c5f.webp"), - - GUITAR_7883(7883, "Guitar", 99, "https://storage.streamdps.com/iblock/808/808c6a6e16e3ff0ee02479354102e337/ce5fe5c52bca407ac24c253361ec1968.webp"), - - MIRROR_BLOOM(6200, "Mirror Bloom", 1000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/a9d0e9406230fa9a901d992a90574e39~tplv-obj.jpg"), - - CHEF_S_HAT(6725, "Chef's Hat", 199, "https://storage.streamdps.com/iblock/da8/da87653d13440ecbe3a6f04abb4e6314/08ab9e948762a6bb041bb1963cacf07f.webp"), - - FULL_ENGLISH(6491, "Full English", 199, "https://storage.streamdps.com/iblock/046/0460e60b4ae09aa8319e75b26f9faf87/b1f6aeb51cbe15700dc2f29eec174a5a.webp"), - - OWL(5885, "Owl", 500, "https://storage.streamdps.com/iblock/e87/e87fc92de64aa711c6ce23ed3b2214c2/338e115665b1c9f75108b50a43adb95b.png"), - - TOP_HOST(6194, "Top Host", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/5947dc37282c417b411c61f20ee7d6d4~tplv-obj.png"), - - TIKTOK_CROWN(8873, "TikTok Crown", 299, "https://storage.streamdps.com/iblock/a79/a790613bdf2e83725d0519bbf289529d/83bb670c15ab91b9192c50300f4c8054.webp"), - - KFC_CHICKEN(9771, "KFC Chicken", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f9d59ccd2328b8a46841b3b1c87d9e55.png~tplv-obj.png"), - - LOVED(6705, "Loved", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/2a41781b0a29ba3c409c5dd83eed07f8~tplv-obj.png"), - - ON_FIRE(6840, "On Fire", 200, "https://storage.streamdps.com/iblock/cba/cba95075d6b63b84fbc52abb9d1d8208/d93ecc0b966bf972f01e77339a68e124.webp"), - - ON_FIRE_6958(6958, "On Fire", 200, "https://storage.streamdps.com/iblock/4ec/4ec314b4ee7dff4e92a8e1e75100dddf/19c9b5d8b5f24b1465632a31e55edca1.webp"), - - CROWN(5502, "Crown", 199, "https://storage.streamdps.com/iblock/758/7584af00e82831bcfd9993a0809a2cbd/c2ce45eb539543ef4cd60e9db8cc23e0.png"), - - CROWN_5713(5713, "Crown", 199, "https://storage.streamdps.com/iblock/e5f/e5f3fb8fd23314b0d5c77f4cc1e8371f/23b5573f5f080382a0be8a8013dbab2b.png"), - - TELEPHONE_BOX(6381, "Telephone Box", 2100, "https://storage.streamdps.com/iblock/a2e/a2ee002433a7295464359db46c025adf/5f026787f952abbffd3d7fc1b4cbe1c2.webp"), - - BOXING_GLOVES(6007, "Boxing Gloves", 299, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/9f8bd92363c400c284179f6719b6ba9c~tplv-obj.jpg"), - - FRUIT_FRIENDS(9465, "Fruit Friends", 299, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/1153dd51308c556cb4fcc48c7d62209f.png~tplv-obj.jpg"), - - FERRIS_WHEEL(5652, "Ferris Wheel", 3000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/3c7291ad4c2a6d4f70505c3e296ecebe~tplv-obj.jpg"), - - DE_NORTH_POLE(9658, "DE North Pole", 199, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/130e17b5b561a93cefbd236586881477.png~tplv-obj.png"), - - RUGBY_BALL(6249, "Rugby Ball", 10, "https://storage.streamdps.com/iblock/d53/d53d3efae1c69b949373db455da077cf/fa22f0507a304597b013268524a8573f.png"), - - TROPHY(5712, "Trophy", 500, "https://storage.streamdps.com/iblock/26f/26f17d2bc63c5e3f218ea2f25b245fa2/95d88e55486d8188f4b73c75def4354c.png"), - - ACROSS_THE_BOARD(8793, "Across the board", 450, "https://storage.streamdps.com/iblock/285/285070af9d4f72b74e7d74c22157f2d9/67d9fa3239a7f9a09ef78c832a66e624.webp"), - - GOOD_AFTERNOON(8266, "Good Afternoon", 399, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/bff3b908c4dd9cf19ab431cc99dc7940~tplv-obj.png"), - - GARDEN_GNOME(7002, "Garden Gnome", 1, "https://storage.streamdps.com/iblock/c1e/c1efcf386f4ffc5626e0be1ef1ecd93a/210fa9d66c1f0c1968608b40c4e698ea.webp"), - - MIMI___FIFI(9672, "Mimi & Fifi", 5000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/0a72d0084695d03586fea7d854dc3a47.png~tplv-obj.png"), - - CANDY_CANE(9698, "Candy Cane", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/1fa0a4ed666304c78a46de200b85c84b.png~tplv-obj.png"), - - FAKE_SMILE(9536, "Fake smile", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/35ce62173962e33834703212d0b845a7.png~tplv-obj.png"), - - SO_CUTE(9355, "So cute", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/d40d31241efcf57c630e894bb3007b8a.png~tplv-obj.png"), - - LILI_THE_LEOPARD(9467, "Lili the Leopard", 6599, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/7be03e1af477d1dbc6eb742d0c969372.png~tplv-obj.jpg"), - - MUSIC_BOX(5964, "Music Box", 2399, "https://storage.streamdps.com/iblock/f01/f01f2da5e18be863eb7e3a1375bb6206/499e06f8f76e5e90964184c25365cdec.png"), - - ELF_S_HAT_(9625, "Elf's Hat ", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/f9857a040c92b34d6a261201a93c185f.png~tplv-obj.png"), - - PRINCE(7398, "Prince", 500, "https://storage.streamdps.com/iblock/38b/38b4963191222c66267858149e662b7d/d98b625b2a3a261d2c12caaae61b479f.webp"), - - DASH(6757, "Dash", 299, "https://storage.streamdps.com/iblock/b35/b356ce71b1272dffc836a14df85700d2/16e177319d9f5cf312440139715612f5.webp"), - - SNOWGLOBE(9688, "Snowglobe", 499, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/ea5ac5f8e186897456bed2e78fc78ca5.png~tplv-obj.png"), - - BABY_FOX(8552, "Baby fox", 20, "https://storage.streamdps.com/iblock/b7d/b7df9be24aa630c9b04db3974f103a73/17a445fd5256e13281e64c718b5112fe.webp"), - - RAYA_RICE(6383, "Raya Rice", 1, "https://storage.streamdps.com/iblock/e0c/e0c375df5bdce1c926f46244ced54ecc/1bd688843c1c24370b8c4a74686c2c0d.png"), - - TACO(7087, "Taco", 9, "https://storage.streamdps.com/iblock/5e1/5e1e4be13d7ba14e46d500180914f450/e5f81b83f7f2ceb8d8b51ec30f522439.webp"), - - UNICORN_FANTASY(5338, "Unicorn Fantasy", 5000, "https://storage.streamdps.com/iblock/f1e/f1ef72264d52ca4a27797a7e0dc07679/cd6ceadfd461b15be27e15986029f96b.png"), - - UNICORN_FANTASY_5348(5348, "Unicorn Fantasy", 5000, "https://storage.streamdps.com/iblock/b48/b48d26ae9b05bcaa4d1cd8336df1bcfd/5e1712d8a9e08ee68603a509e2841719.png"), - - UNICORN_FANTASY_5475(5475, "Unicorn Fantasy", 5000, "https://storage.streamdps.com/iblock/b12/b129b116380a326df64aedb5a269b670/b1409c04e4d7490645dd39e76a078ae3.webp"), - - UNICORN_FANTASY_5483(5483, "Unicorn Fantasy", 5000, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/483c644e67e9bb1dd5970f2df00b7576.png~tplv-obj.jpg"), - - UNICORN_FANTASY_7237(7237, "Unicorn Fantasy", 5000, "https://storage.streamdps.com/iblock/136/136dc4c068ddc7a89b10df8d9f4800d8/3b4f386e75506f3ad5519e4330888427.webp"), - - PANTHER(7341, "Panther", 10, "https://storage.streamdps.com/iblock/74f/74f246d0f575fa20ccc456b80f5547ea/32f205cf24dcf07f5e8f308d9d425d59.webp"), - - BEACH_HOUSE(5803, "Beach House", 9999, "https://storage.streamdps.com/iblock/a92/a927384b7cd171837b82f9deed97395e/d6b06bfc5ee124544576120b8234b1a0.png"), - - GOLD_NECKLACE(5599, "Gold necklace", 200, "https://storage.streamdps.com/iblock/aa2/aa26035cd47797211a9ce1b5e51fd7ac/85e66a118c564c318e369974510f371d.png"), - - HOLIDAY_CAROUSEL(9678, "Holiday Carousel", 2000, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/b5ba3941f7389da7495b659e888ea61a.png~tplv-obj.png"), - - MPL_TROPHY(7119, "MPL Trophy", 450, "https://storage.streamdps.com/iblock/981/9816c81ee3e2fdc62ac221051e9ec290/75707f488be3f80faf5affd1cef38deb.webp"), - - OCTOPUS(8417, "Octopus", 10000, "https://storage.streamdps.com/iblock/419/4197c396a3fcdd28f0477d9af50cd964/1196ad0f243ca976832319a46c7935ed.webp"), - - PIM_BEAR(9043, "Pim Bear", 1500, "https://storage.streamdps.com/iblock/204/2043f85b8f2e2ee638ff3a1799eda329/2319b052e0e64799842751d9fee4d438.webp"), - - FALLING_FOR_YOU(8005, "Falling For You", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/a198bd39d2511dbba6a68867740e3ff9~tplv-obj.png"), - - SIGNATURE_JET(7124, "Signature Jet", 4888, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/fe27eba54a50c0a687e3dc0f2c02067d~tplv-obj.jpg"), - - CAP(6104, "Cap", 99, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/6c2ab2da19249ea570a2ece5e3377f04~tplv-obj.jpg"), - - BLUE_BEAD(5319, "Blue Bead", 5, "https://storage.streamdps.com/iblock/afe/afe8100602b9b735b74ab34365032ec7/d778bfcb66bff177989590909b969ef2.png"), - - TIKTOK_RED_CARPET(6542, "TikTok Red Carpet", 6600, "https://storage.streamdps.com/iblock/93b/93b6d520b6bd02d4aca9a00584556659/836888ffd7ad053712db5c26beeca7e9.png"), - - CAT(6345, "Cat", 3999, "https://storage.streamdps.com/iblock/dfe/dfefcaf9c4bc67e2ee681ba16c646224/6a33ae8b701c16dc57ff97fac4d16eca.png"), - - STARS_SNAP(8581, "Stars Snap", 10, "https://storage.streamdps.com/iblock/318/318a8ce7e87f37f90bf5e3fbf773d827/e67f69439ae7c4bbf03bdaffd6e961a2.webp"), - - BRAVO(7812, "Bravo", 1, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/b25e72d59e9771b09da8c8c70f395f82~tplv-obj.png"), - - SUPERB_TEAM(8202, "Superb Team", 1, "https://storage.streamdps.com/iblock/e6e/e6e8cdd5e84f701dc627b8cc3e280d4c/29ce845878feb46152b20a75a3259d56.webp"), - - MAGIC_POTION(7105, "Magic Potion", 499, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/e055625e9239df7e833702c768e033d2~tplv-obj.png"), - - GLOWING_JELLYFISH(8978, "Glowing Jellyfish", 1000, "https://storage.streamdps.com/iblock/e65/e65b1f71b4fe5709b454299439cb2674/36471857a2ba78694be934a54a0fa8d2.webp"), - - RAINING_GIFTS(8769, "Raining gifts", 999, "https://storage.streamdps.com/iblock/916/91661303a8dc3660acaf2f4e47a94f75/221a1f185676496ebcdbaf55f90aeb70.webp"), - - NACHOS(7088, "Nachos", 9, "https://storage.streamdps.com/iblock/ff1/ff16cd1c796189ed8fcfdb019eb224ef/1ae8b0b05294c56b99197256fcaa3fd4.webp"), - - SNAG(6411, "Snag", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/aa2d9b162c766a7fdf71fcead6d7bbcd~tplv-obj.png"), - - APPETIZERS(6106, "Appetizers", 19, "https://storage.streamdps.com/iblock/76b/76b94aaced493a2448cf655b5468feaf/8c1bea41ec9fb547f0a0eb46d658a1c8.png"), - - LOVE_LETTER(7932, "Love Letter", 1, "https://storage.streamdps.com/iblock/a40/a40cb58d5e8c07fa3e46a9acb4e34f6f/477507a1b14df0a22ef895c6214f3789.webp"), - - DANCING_CACTUS(6532, "Dancing Cactus", 299, "https://storage.streamdps.com/iblock/d94/d94439c3d68eee66c54e2684aa56a277/a18b71ee72683b6b1b49c0e64901e13e.png"), - - EARTH(5906, "Earth", 1, "https://storage.streamdps.com/iblock/0db/0db54eaf38fe9ca66924e04a545c71d0/56c6ce0c159cdc5469db4d47c01b3b95.webp"), - - BUMPER_CARS(5996, "Bumper Cars", 1288, "https://storage.streamdps.com/iblock/53b/53b569311552b729d1b347268370e576/8f236deca90a65e7046f7576d69976af.png"), - - CAMPFIRE(5843, "Campfire", 388, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/e280eb1b7fe92b4efe612d98064d5a2d~tplv-obj.png"), - - CAKE_SLICE(6784, "Cake Slice", 1, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/f681afb4be36d8a321eac741d387f1e2~tplv-obj.jpg"), - - CROCODILE(8740, "Crocodile", 10, "https://storage.streamdps.com/iblock/4e2/4e2d9df24c472158b8ed93546fc73b16/75722a173b75d601e0a80a679902529f.webp"), - - LOVE_YOU_6671(6671, "Love You", 199, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/134e51c00f46e01976399883ca4e4798~tplv-obj.jpg"), - - NO_1_TEAM(8205, "No.1 Team", 5, "https://storage.streamdps.com/iblock/27f/27fe97cb0f1b8056fa0aedc918ea560e/966df61a39e36fe0f7237e55c3298117.webp"), - - MONSTER_TRUCK(8104, "Monster Truck", 7999, "https://storage.streamdps.com/iblock/65e/65ef72be838f6a2d425eb3871490fb49/679fa1e8a32c9379751642775a7673e6.webp"), - - SUPERPOWER(8111, "Superpower", 299, "https://storage.streamdps.com/iblock/3d7/3d7c19e8efe9ef54aea45c48fa1b7c99/b3f6922a794374338c672b5a4c936aa0.webp"), - - DIAMOND_CROWN(5561, "Diamond Crown", 1499, "https://storage.streamdps.com/iblock/831/8311ff6e37c5a79099e87466a1c3b736/c7aceb6a224a7b11c3360fd88680bd00.png"), - - DIAMOND_CROWN_5604(5604, "Diamond Crown", 1499, "https://storage.streamdps.com/iblock/3b5/3b56c2352a02829ac4445094a3f76b51/738ad17c91919a940ee2001f9f262a95.png"), - - COCONUT_DRINK(8225, "Coconut Drink", 5, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/ce27ad017f987240dc447e65ae866f4f~tplv-obj.png"), - - M4_TROPHY(7544, "M4 Trophy", 450, "https://storage.streamdps.com/iblock/f40/f40a34a8e59806907deaa4f74df3462d/8deac28cb21517228bcd354645a987ea.webp"), - - FLOWER(6034, "Flower", 299, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/9c20971eeb28b6b4ba37e57df3983da0~tplv-obj.png"), - - PERFUME(5658, "Perfume", 20, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/20b8f61246c7b6032777bb81bf4ee055~tplv-obj.jpg"), - - KISS_YOUR_HEART(6661, "Kiss your Heart", 99, "https://storage.streamdps.com/iblock/13d/13d940df83e04a30523ca88c080ee8d8/213f06af314da4637a9ae8fc25bfaea3.webp"), - - CHESTNUTS(7233, "Chestnuts", 1, "https://storage.streamdps.com/iblock/b16/b165eccc2fc0ecdb85149432f8d40e94/e9aa3a5c8c9ae6baf20464d915fcbbc6.webp"), - - CHESTNUTS_7296(7296, "Chestnuts", 1, "https://storage.streamdps.com/iblock/7c7/7c7c8f9303c92aa20fce0e9e1a70e336/42e6c7a2865e19498ee04a7a1d700521.webp"), - - DIAMOND_HEART_NECKLACE(5598, "Diamond Heart necklace", 200, "https://storage.streamdps.com/iblock/d77/d77639893a76f2f8bf4c2c4d789e00cb/2740d5941e1512225daeecb8f841eb96.png"), - - HAPPY_MOTHER_S_DAY(8455, "Happy Mother's Day", 99, "https://storage.streamdps.com/iblock/a0f/a0ff283ce42ad27a03d6b8b98e81463b/9e5a49a9bae80f0afa30257d562cec8e.webp"), - - HOT_AIR_BALLOON(5976, "Hot Air Balloon", 999, "https://storage.streamdps.com/iblock/33a/33a5eb58a8dd71677072c9482aad209a/61be5fe5d3d639e3729edbf003a536c7.png"), - - RABBIT_AND_MOCHI(9303, "Rabbit and Mochi", 999, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/resource/213ef2549fbb10ec783c95a41d28cf0a.png~tplv-obj.png"), - - TEA(5303, "Tea", 50, "https://storage.streamdps.com/iblock/240/24051d7263606ed2b02f24f8455cb0a5/4f1cc7de604a1369c5770cc02cbee920.png"), - - TEA_6726(6726, "Tea", 20, "https://storage.streamdps.com/iblock/b0b/b0ba111b6319a8c9e384d5ca7b814e4c/6cd6f620512cd42711bc1235124b3265.webp"), - - CELEBRATION_RICE(5929, "Celebration Rice", 300, "https://storage.streamdps.com/iblock/39d/39dddc09363b056bff4671be4f6730eb/83feaed68d48efff46eded6d40e2318c.png"), - - JETSKI(5774, "Jetski", 2199, "https://storage.streamdps.com/iblock/b38/b38473c5d43c224d986556d4134342c2/db8aa2a8f093a3475ff18116e54dd5c7.png"), - - CORAL(5731, "Coral", 499, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/d4faa402c32bf4f92bee654b2663d9f1~tplv-obj.jpg"), - - PIRATE_S_SHIP(7598, "Pirate’s Ship", 15000, "https://storage.streamdps.com/iblock/475/4753e54cae562b34edbf1a157cd60b21/722409ec69cfaf707d611b0987799296.webp"), - - DOMBRA(6426, "Dombra", 20, "https://p19-webcast.tiktokcdn.com/img/maliva/webcast-va/ccd9fea1988521d1e81051a916800d6c~tplv-obj.png"), - - GRIFFIN(7987, "Griffin", 25999, "https://storage.streamdps.com/iblock/609/6092240118fdb3ad46036c0533dd23c8/0f700fd4e875174d01ad04a8db2ae94e.webp"), - - BEACH_HUT(6719, "Beach Hut", 5000, "https://storage.streamdps.com/iblock/227/22716035cef6112f66035eca2b60fa31/ffce7cd46aaa6c2b27ccba610cf35a39.webp"), - - WELCOME(6350, "Welcome", 9, "https://storage.streamdps.com/iblock/dda/ddaf400cc8b931bf1f1b2cdad4a9f7b0/2239c73a8edc68cfe66d2fae426d83bc.png"), - - THUNDER_FALCON(8651, "Thunder Falcon", 39999, "https://p16-webcast.tiktokcdn.com/img/maliva/webcast-va/26f3fbcda383e6093a19b8e7351a164c~tplv-obj.jpg"), - - BALLOONS(5756, "Balloons", 10, "https://storage.streamdps.com/iblock/462/462490a4e0da5abad033f4a57564041c/fe0831b660748b851ffd0e5a74847105.png"); - - private final int id; - - private final String name; - - private final int diamondCost; - - private final Picture picture; - - GiftOld(int id, String name, int diamondCost, String pictureLink) { - this.id = id; - this.name = name; - this.diamondCost = diamondCost; - this.picture = new Picture(pictureLink); - } - - public boolean hasDiamondCostRange(int minimalCost, int maximalCost) { - return diamondCost >= minimalCost && diamondCost <= maximalCost; - } - - public boolean hasDiamondCost(int cost) { - return diamondCost == cost; - } -} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java new file mode 100644 index 0000000..60ef712 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java @@ -0,0 +1,34 @@ +package io.github.jwdeveloper.tiktok.data.models.users; + +import lombok.Getter; + +@Getter +public class ListUser +{ + private final User user; + private final LinkType linkType; + private final long linkMicId, linkStatus, modifyTime, linkerId; + private final int userPosition, silenceStatus, roleType; + + public ListUser(io.github.jwdeveloper.tiktok.messages.data.ListUser listUser) { + this.user = User.map(listUser.getUser()); + this.linkMicId = listUser.getLinkmicId(); + this.linkStatus = listUser.getLinkStatus(); + this.linkType = LinkType.values()[listUser.getLinkTypeValue()]; + this.userPosition = listUser.getUserPosition(); + this.silenceStatus = listUser.getSilenceStatus(); + this.modifyTime = listUser.getModifyTime(); + this.linkerId = listUser.getLinkerId(); + this.roleType = listUser.getRoleType(); + } + + public static ListUser map(io.github.jwdeveloper.tiktok.messages.data.ListUser listUser) { + return new ListUser(listUser); + } + + public enum LinkType { + UNKNOWN, + AUDIO, + VIDEO + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/GiftsData.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/GiftsData.java index a024c30..bd103a0 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/GiftsData.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/GiftsData.java @@ -23,20 +23,12 @@ package io.github.jwdeveloper.tiktok.data.requests; import io.github.jwdeveloper.tiktok.data.models.gifts.Gift; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Getter; +import lombok.*; import java.util.List; public class GiftsData { - @Getter - public final class Request - { - - } - @Getter @AllArgsConstructor public static final class Response @@ -44,5 +36,4 @@ public class GiftsData private String json; private List gifts; } - -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java index 3ebc928..a2224b9 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java @@ -178,6 +178,4 @@ public class LiveClientSettings { headers.put("Accept-Language", "en-US,en; q=0.9"); return headers; } - - } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java index 617cc3e..f230100 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java @@ -22,53 +22,52 @@ */ package io.github.jwdeveloper.tiktok.listener; +import io.github.jwdeveloper.tiktok.live.LiveClient; /** - * - * @see ListenersManager - * + * ListenersManager + *

* TikTokEventListener is an alternative way of handing TikTok events. + *

+ * {@code TikTokLive.newClient("someuser").addListener(listener);} + *

+ * After registertion, all listeners are kept in Listener manager - {@link LiveClient#getListenersManager()} + *

+ * Method in TikTokEventListener should meet requirements below to be detected + *

- @TikTokEventObserver annotation + *

- 2 parameters of (LiveClient, Class extending TikTokEvent) + *

+ * {@code
+ * 	public static class CustomListener implements TikTokEventListener
+ *  {
+ *  	@TikTokEventObserver
+ *      public void onError(LiveClient liveClient, TikTokErrorEvent event)
+ *      {
+ *      	System.out.println(event.getException().getMessage());
+ *      }
  *
- *  TikTokLive.newClient("someuser").addListener(listener)
+ *      @TikTokEventObserver
+ *      public void onCommentMessage(LiveClient liveClient, TikTokCommentEvent event)
+ *      {
+ *          System.out.println(event.getText());
+ *      }
  *
- *  After registertion all listeners are kept in Listener manager
- *  that could be obtained by client.getListenerManager();
- *
- *  Method in TikTokEventListener should meet 4 requirements to be detected
- *         - must have @TikTokEventHandler annotation
- *         - must have 2 parameters
- *         - first parameter must be LiveClient
- *         - second must be class that extending TikTokEvent
- *
- *  public static class CustomListener implements TikTokEventListener
- *     {
- *         @TikTokEventHandler
- *         public void onError(LiveClient liveClient, TikTokErrorEvent event)
- *         {
- *             System.out.println(event.getException().getMessage());
- *         }
- *
- *         @TikTokEventHandler
- *         public void onCommentMessage(LiveClient liveClient, TikTokCommentEvent event)
- *         {
- *             System.out.println(event.getText());
- *         }
- *
- *         @TikTokEventHandler
- *         public void onGiftMessage(LiveClient liveClient, TikTokGiftMessageEvent event)
- *         {
- *             System.out.println(event.getGift().getDescription());
- *         }
- *
- *         @TikTokEventHandler
- *         public void onAnyEvent(LiveClient liveClient, TikTokEvent event)
- *         {
- *             System.out.println(event.getClass().getSimpleName());
- *         }
- *     }
+ *      @TikTokEventObserver
+ *      public void onGiftMessage(LiveClient liveClient, TikTokGiftMessageEvent event)
+ *      {
+ *          System.out.println(event.getGift().getDescription());
+ *      }
  *
+ *      @TikTokEventObserver
+ *      public void onAnyEvent(LiveClient liveClient, TikTokEvent event)
+ *      {
+ *          System.out.println(event.getClass().getSimpleName());
+ *      }
+ *   }
+ *  }
+ *  
*/ public interface TikTokEventListener { -} +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java new file mode 100644 index 0000000..17e1be0 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java @@ -0,0 +1,134 @@ +package io.github.jwdeveloper.tiktok.listener; + +import io.github.jwdeveloper.tiktok.data.events.*; +import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; +import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent; +import io.github.jwdeveloper.tiktok.data.events.envelop.TikTokChestEvent; +import io.github.jwdeveloper.tiktok.data.events.gift.*; +import io.github.jwdeveloper.tiktok.data.events.http.TikTokHttpResponseEvent; +import io.github.jwdeveloper.tiktok.data.events.link.*; +import io.github.jwdeveloper.tiktok.data.events.poll.TikTokPollEvent; +import io.github.jwdeveloper.tiktok.data.events.room.*; +import io.github.jwdeveloper.tiktok.data.events.social.*; +import io.github.jwdeveloper.tiktok.data.events.websocket.*; +import io.github.jwdeveloper.tiktok.live.LiveClient; + +public abstract class TikTokEventListenerBase implements TikTokEventListener +{ + public void onUnhandledSocial(LiveClient client, TikTokUnhandledSocialEvent event) {} + + public void onChest(LiveClient client, TikTokChestEvent event) {} + + public void onLinkMicFanTicket(LiveClient client, TikTokLinkMicFanTicketEvent event) {} + + public void onEnvelope(LiveClient client, TikTokEnvelopeEvent event) {} + + public void onShop(LiveClient client, TikTokShopEvent event) {} + + public void onDetect(LiveClient client, TikTokDetectEvent event) {} + + public void onLinkLayer(LiveClient client, TikTokLinkLayerEvent event) {} + + public void onConnected(LiveClient client, TikTokConnectedEvent event) {} + + public void onPreConnection(LiveClient client, TikTokPreConnectionEvent event) {} + + public void onCaption(LiveClient client, TikTokCaptionEvent event) {} + + public void onQuestion(LiveClient client, TikTokQuestionEvent event) {} + + public void onRoomPin(LiveClient client, TikTokRoomPinEvent event) {} + + public void onRoomInfo(LiveClient client, TikTokRoomInfoEvent event) {} + + public void onLivePaused(LiveClient client, TikTokLivePausedEvent event) {} + + public void onLiveUnpaused(LiveClient client, TikTokLiveUnpausedEvent event) {} + + public void onLike(LiveClient client, TikTokLikeEvent event) {} + + public void onLink(LiveClient client, TikTokLinkEvent event) {} + public void onLinkInvite(LiveClient client, TikTokLinkInviteEvent event) {} + public void onLinkReply(LiveClient client, TikTokLinkReplyEvent event) {} + public void onLinkCreate(LiveClient client, TikTokLinkCreateEvent event) {} + public void onLinkClose(LiveClient client, TikTokLinkCloseEvent event) {} + public void onLinkEnter(LiveClient client, TikTokLinkEnterEvent event) {} + public void onLinkLeave(LiveClient client, TikTokLinkLeaveEvent event) {} + public void onLinkCancel(LiveClient client, TikTokLinkCancelEvent event) {} + public void onLinkKickOut(LiveClient client, TikTokLinkKickOutEvent event) {} + public void onLinkLinkedListChange(LiveClient client, TikTokLinkLinkedListChangeEvent event) {} + public void onLinkUpdateUser(LiveClient client, TikTokLinkUpdateUserEvent event) {} + public void onLinkWaitListChange(LiveClient client, TikTokLinkWaitListChangeEvent event) {} + public void onLinkMute(LiveClient client, TikTokLinkMuteEvent event) {} + public void onLinkRandomMatch(LiveClient client, TikTokLinkRandomMatchEvent event) {} + public void onLinkUpdateUserSettings(LiveClient client, TikTokLinkUpdateUserSettingEvent event) {} + public void onLinkMicIdxUpdate(LiveClient client, TikTokLinkMicIdxUpdateEvent event) {} + public void onLinkListChange(LiveClient client, TikTokLinkListChangeEvent event) {} + public void onLinkCohostListChange(LiveClient client, TikTokLinkCohostListChangeEvent event) {} + public void onLinkMediaChange(LiveClient client, TikTokLinkMediaChangeEvent event) {} + public void onLinkAcceptNotice(LiveClient client, TikTokLinkAcceptNoticeEvent event) {} + public void onLinkSysKickOut(LiveClient client, TikTokLinkSysKickOutEvent event) {} + public void onLinkUserToast(LiveClient client, TikTokLinkUserToastEvent event) {} + + public void onBarrage(LiveClient client, TikTokBarrageEvent event) {} + + public void onGift(LiveClient client, TikTokGiftEvent event) {} + + public void onGiftCombo(LiveClient client, TikTokGiftComboEvent event) {} + + public void onLinkMicArmies(LiveClient client, TikTokLinkMicArmiesEvent event) {} + + public void onEmote(LiveClient client, TikTokEmoteEvent event) {} + + public void onUnauthorizedMember(LiveClient client, TikTokUnauthorizedMemberEvent event) {} + + public void onInRoomBanner(LiveClient client, TikTokInRoomBannerEvent event) {} + + public void onLinkMicMethod(LiveClient client, TikTokLinkMicMethodEvent event) {} + + public void onSubscribe(LiveClient client, TikTokSubscribeEvent event) {} + + public void onPoll(LiveClient client, TikTokPollEvent event) {} + + public void onFollow(LiveClient client, TikTokFollowEvent event) {} + + public void onComment(LiveClient client, TikTokCommentEvent event) {} + + public void onHttpResponse(LiveClient client, TikTokHttpResponseEvent action) {} + + public void onGoalUpdate(LiveClient client, TikTokGoalUpdateEvent event) {} + + public void onRankUpdate(LiveClient client, TikTokRankUpdateEvent event) {} + + public void onIMDelete(LiveClient client, TikTokIMDeleteEvent event) {} + + public void onLiveEnded(LiveClient client, TikTokLiveEndedEvent event) {} + + public void onError(LiveClient client, TikTokErrorEvent event) {} + + public void onJoin(LiveClient client, TikTokJoinEvent event) {} + + public void onRankText(LiveClient client, TikTokRankTextEvent event) {} + + public void onShare(LiveClient client, TikTokShareEvent event) {} + + public void onUnhandledMember(LiveClient client, TikTokUnhandledMemberEvent event) {} + + public void onSubNotify(LiveClient client, TikTokSubNotifyEvent event) {} + + public void onLinkMicBattle(LiveClient client, TikTokLinkMicBattleEvent event) {} + + public void onDisconnected(LiveClient client, TikTokDisconnectedEvent event) {} + + public void onUnhandledControl(LiveClient client, TikTokUnhandledControlEvent event) {} + + public void onEvent(LiveClient client, TikTokEvent event) {} + + public void onWebsocketResponse(LiveClient client, TikTokWebsocketResponseEvent event) {} + + public void onWebsocketMessage(LiveClient client, TikTokWebsocketMessageEvent event) {} + + public void onWebsocketUnhandledMessage(LiveClient client, TikTokWebsocketUnhandledMessageEvent event) {} + + public void onReconnecting(LiveClient client, TikTokReconnectingEvent event) {} +} \ No newline at end of file diff --git a/API/src/main/proto/data.proto b/API/src/main/proto/data.proto index f82d407..2f31d5b 100644 --- a/API/src/main/proto/data.proto +++ b/API/src/main/proto/data.proto @@ -1062,9 +1062,9 @@ message CohostListChangeContent { message LinkerListChangeContent { - repeated ListUser linkedUsersList = 1; - repeated ListUser appliedUsersList = 2; - repeated ListUser connectingUsersList = 3; + repeated ListUser linkedUsers = 1; + repeated ListUser appliedUsers = 2; + repeated ListUser connectingUsers = 3; } message LinkerMediaChangeContent { diff --git a/API/src/main/proto/enums.proto b/API/src/main/proto/enums.proto index 4512837..b11ee20 100644 --- a/API/src/main/proto/enums.proto +++ b/API/src/main/proto/enums.proto @@ -250,21 +250,21 @@ enum CommonContentCase { enum LinkMessageType { - TPYE_LINKER_UNKNOWN = 0; + TYPE_LINKER_UNKNOWN = 0; TYPE_LINKER_CREATE = 1; TYPE_LINKER_CLOSE = 2; TYPE_LINKER_INVITE = 3; TYPE_LINKER_APPLY = 4; TYPE_LINKER_REPLY = 5; - TPYE_LINKER_ENTER = 6; - TPYE_LINKER_LEAVE = 7; + TYPE_LINKER_ENTER = 6; + TYPE_LINKER_LEAVE = 7; TYPE_LINKER_PERMIT = 8; - TPYE_LINKER_CANCEL_INVITE = 9; + TYPE_LINKER_CANCEL_INVITE = 9; TYPE_LINKER_WAITING_LIST_CHANGE = 10; TYPE_LINKER_LINKED_LIST_CHANGE = 11; TYPE_LINKER_UPDATE_USER = 12; - TPYE_LINKER_KICK_OUT = 13; - TPYE_LINKER_CANCEL_APPLY = 14; + TYPE_LINKER_KICK_OUT = 13; + TYPE_LINKER_CANCEL_APPLY = 14; TYPE_LINKER_MUTE = 15; TYPE_LINKER_MATCH = 16; TYPE_LINKER_UPDATE_USER_SETTING = 17; @@ -275,8 +275,8 @@ enum LinkMessageType { TYPE_LINKER_COHOST_LIST_CHANGE = 22; TYPE_LINKER_MEDIA_CHANGE = 23; TYPE_LINKER_ACCEPT_NOTICE = 24; - TPYE_LINKER_SYS_KICK_OUT = 101; - TPYE_LINKMIC_USER_TOAST = 102; + TYPE_LINKER_SYS_KICK_OUT = 101; + TYPE_LINKMIC_USER_TOAST = 102; } enum MessageType { diff --git a/API/src/main/proto/webcast.proto b/API/src/main/proto/webcast.proto index 4e97f26..580e942 100644 --- a/API/src/main/proto/webcast.proto +++ b/API/src/main/proto/webcast.proto @@ -805,7 +805,7 @@ message WebcastLinkMessage { LinkerListChangeContent ListChangeContent = 20; CohostListChangeContent CohostListChangeContent = 21; LinkerMediaChangeContent MediaChangeContent = 22; - LinkerAcceptNoticeContent ReplyAcceptNoticeContent = 23; + LinkerAcceptNoticeContent AcceptNoticeContent = 23; LinkerSysKickOutContent SysKickOutContent = 101; LinkmicUserToastContent UserToastContent = 102; string extra = 200; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java index 02f81df..4b4aa89 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -91,7 +91,6 @@ public class TikTokLive { return new TikTokLiveHttpClient(); } - //I don't like it, but it is reasonable for now private static GiftsManager giftsManager; /** diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index 41ae03a..80f1f97 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -29,6 +29,7 @@ import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent import io.github.jwdeveloper.tiktok.data.events.envelop.TikTokChestEvent; import io.github.jwdeveloper.tiktok.data.events.gift.*; import io.github.jwdeveloper.tiktok.data.events.http.TikTokHttpResponseEvent; +import io.github.jwdeveloper.tiktok.data.events.link.*; import io.github.jwdeveloper.tiktok.data.events.poll.TikTokPollEvent; import io.github.jwdeveloper.tiktok.data.events.room.*; import io.github.jwdeveloper.tiktok.data.events.social.*; @@ -44,14 +45,15 @@ import io.github.jwdeveloper.tiktok.mappers.*; import io.github.jwdeveloper.tiktok.mappers.data.MappingResult; import io.github.jwdeveloper.tiktok.mappers.handlers.*; import io.github.jwdeveloper.tiktok.messages.webcast.*; -import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketClient; -import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketOfflineClient; +import io.github.jwdeveloper.tiktok.websocket.*; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.logging.Logger; +import static io.github.jwdeveloper.tiktok.messages.enums.LinkMessageType.*; + public class TikTokLiveClientBuilder implements LiveClientBuilder { protected final LiveClientSettings clientSettings; @@ -215,6 +217,33 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class); return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message)); }); + mapper.forMessage(WebcastLinkMessage.class, ((inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMessage.class); + return MappingResult.of(message, switch (message.getMessageType()) { + case TYPE_LINKER_INVITE -> new TikTokLinkInviteEvent(message); + case TYPE_LINKER_REPLY -> new TikTokLinkReplyEvent(message); + case TYPE_LINKER_CREATE -> new TikTokLinkCreateEvent(message); + case TYPE_LINKER_CLOSE -> new TikTokLinkCloseEvent(message); + case TYPE_LINKER_ENTER -> new TikTokLinkEnterEvent(message); + case TYPE_LINKER_LEAVE -> new TikTokLinkLeaveEvent(message); + case TYPE_LINKER_CANCEL_INVITE, TYPE_LINKER_CANCEL_APPLY -> new TikTokLinkCancelEvent(message); + case TYPE_LINKER_KICK_OUT -> new TikTokLinkKickOutEvent(message); + case TYPE_LINKER_LINKED_LIST_CHANGE -> new TikTokLinkLinkedListChangeEvent(message); + case TYPE_LINKER_UPDATE_USER -> new TikTokLinkUpdateUserEvent(message); + case TYPE_LINKER_WAITING_LIST_CHANGE, TYPE_LINKER_WAITING_LIST_CHANGE_V2 -> new TikTokLinkWaitListChangeEvent(message); + case TYPE_LINKER_MUTE -> new TikTokLinkMuteEvent(message); + case TYPE_LINKER_MATCH -> new TikTokLinkRandomMatchEvent(message); + case TYPE_LINKER_UPDATE_USER_SETTING -> new TikTokLinkUpdateUserSettingEvent(message); + case TYPE_LINKER_MIC_IDX_UPDATE -> new TikTokLinkMicIdxUpdateEvent(message); + case TYPE_LINKER_LINKED_LIST_CHANGE_V2 -> new TikTokLinkListChangeEvent(message); + case TYPE_LINKER_COHOST_LIST_CHANGE -> new TikTokLinkCohostListChangeEvent(message); + case TYPE_LINKER_MEDIA_CHANGE -> new TikTokLinkMediaChangeEvent(message); + case TYPE_LINKER_ACCEPT_NOTICE -> new TikTokLinkAcceptNoticeEvent(message); + case TYPE_LINKER_SYS_KICK_OUT -> new TikTokLinkSysKickOutEvent(message); + case TYPE_LINKMIC_USER_TOAST -> new TikTokLinkUserToastEvent(message); + default -> new TikTokLinkEvent(message); + }); + })); // mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class); // mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class); @@ -341,6 +370,111 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { return this; } + public TikTokLiveClientBuilder onLinkInvite(EventConsumer event) { + eventHandler.subscribe(TikTokLinkInviteEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkReply(EventConsumer event) { + eventHandler.subscribe(TikTokLinkReplyEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkCreate(EventConsumer event) { + eventHandler.subscribe(TikTokLinkCreateEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkClose(EventConsumer event) { + eventHandler.subscribe(TikTokLinkCloseEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkEnter(EventConsumer event) { + eventHandler.subscribe(TikTokLinkEnterEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkLeave(EventConsumer event) { + eventHandler.subscribe(TikTokLinkLeaveEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkCancel(EventConsumer event) { + eventHandler.subscribe(TikTokLinkCancelEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkKickOut(EventConsumer event) { + eventHandler.subscribe(TikTokLinkKickOutEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkLinkedListChange(EventConsumer event) { + eventHandler.subscribe(TikTokLinkLinkedListChangeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkUpdateUser(EventConsumer event) { + eventHandler.subscribe(TikTokLinkUpdateUserEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkWaitListChange(EventConsumer event) { + eventHandler.subscribe(TikTokLinkWaitListChangeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkMute(EventConsumer event) { + eventHandler.subscribe(TikTokLinkMuteEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkRandomMatch(EventConsumer event) { + eventHandler.subscribe(TikTokLinkRandomMatchEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkUpdateUserSettings(EventConsumer event) { + eventHandler.subscribe(TikTokLinkUpdateUserSettingEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkMicIdxUpdate(EventConsumer event) { + eventHandler.subscribe(TikTokLinkMicIdxUpdateEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkListChange(EventConsumer event) { + eventHandler.subscribe(TikTokLinkListChangeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkCohostListChange(EventConsumer event) { + eventHandler.subscribe(TikTokLinkCohostListChangeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkMediaChange(EventConsumer event) { + eventHandler.subscribe(TikTokLinkMediaChangeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkAcceptNotice(EventConsumer event) { + eventHandler.subscribe(TikTokLinkAcceptNoticeEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkSysKickOut(EventConsumer event) { + eventHandler.subscribe(TikTokLinkSysKickOutEvent.class, event); + return this; + } + + public TikTokLiveClientBuilder onLinkUserToast(EventConsumer event) { + eventHandler.subscribe(TikTokLinkUserToastEvent.class, event); + return this; + } + public TikTokLiveClientBuilder onBarrage(EventConsumer event) { eventHandler.subscribe(TikTokBarrageEvent.class, event); return this; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java index f180930..7387a13 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java @@ -56,7 +56,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient public TikTokLiveHttpClient(HttpClientFactory factory, LiveClientSettings settings) { this.httpFactory = factory; this.clientSettings = settings; - this.logger = LoggerFactory.create("HttpClient", clientSettings); + this.logger = LoggerFactory.create("HttpClient-"+hashCode(), clientSettings); liveUserDataMapper = new LiveUserDataMapper(); liveDataMapper = new LiveDataMapper(); giftsDataMapper = new GiftsDataMapper(); @@ -178,7 +178,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient try { var resultHeader = ActionResult.of(credentialsResponse.headers().firstValue("x-set-tt-cookie")); if (resultHeader.isFailure()) { - logger.warning("SignServer Headers: "+request.getRoomId()+" - "+credentialsResponse.headers().map()); + logger.warning("Sign Server Headers: "+request.getRoomId()+" - "+credentialsResponse.headers().map()); throw new TikTokSignServerException("Sign server did not return the x-set-tt-cookie header - "+result); } var websocketCookie = resultHeader.getContent(); diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index 7ea824a..46bdb5d 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -18,8 +18,8 @@ public class ActionResult { .setPrettyPrinting().create(); private boolean success = true; - private T content; private String message; + private T content; @Accessors(chain = true, fluent = true) private ActionResult previous; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClient.java index d31a17f..eb7a228 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClient.java @@ -30,6 +30,7 @@ import lombok.AllArgsConstructor; import java.net.*; import java.net.http.*; import java.nio.charset.*; +import java.time.*; import java.util.*; import java.util.regex.*; import java.util.stream.Collectors; @@ -47,7 +48,21 @@ public class HttpClient { try { var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); var result = ActionResult.of(response); - return response.statusCode() != 200 ? result.message("HttpResponse Code: ", response.statusCode()).failure() : result.success(); + return switch (response.statusCode()) { + case 420 -> result.message("HttpResponse Code:", response.statusCode(), "| IP Cloudflare Blocked.").failure(); + case 429 -> { + var wait = response.headers().firstValue("ratelimit-reset"); + if (wait.isEmpty()) + yield result.message("HttpResponse Code:", response.statusCode(), "| Sign server rate limit reached. Try again later.").failure(); + Duration duration = Duration.ofSeconds(Long.parseLong(wait.get())); + yield result.message("HttpResponse Code:", response.statusCode(), + String.format("| Sign server rate limit reached. Try again in %02d:%02d.", duration.toMinutesPart(), duration.toSecondsPart())).failure(); + } + case 500, 501, 502, 503 -> result.message("HttpResponse Code:", response.statusCode(), "| Sign server Error. Try again later.").failure(); + case 504 -> result.message("HttpResponse Code:", response.statusCode(), "| Sign server Timeout. Try again later.").failure(); + case 200 -> result.success(); + default -> result.message("HttpResponse Code:", response.statusCode()).failure(); + }; } catch (Exception e) { throw new TikTokLiveRequestException(e); } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java index 2731063..572e875 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java @@ -96,16 +96,17 @@ public class TikTokListenersManager implements ListenersManager { m.isAnnotationPresent(TikTokEventObserver.class)).toList(); var eventsMap = new HashMap, List>>(); for (var method : methods) { - var eventClazz = method.getParameterTypes()[1]; + var liveclientClass = method.getParameterTypes()[0]; + var eventClass = method.getParameterTypes()[1]; - if (eventClazz.isAssignableFrom(LiveClient.class) && - !eventClazz.equals(LiveClient.class)) { - throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 1nd parameter must instance of " + LiveClient.class.getName()); + if (!LiveClient.class.isAssignableFrom(liveclientClass) && !liveclientClass.equals(LiveClient.class)) { + throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 1st parameter must be instance of " + LiveClient.class.getName() + + " | Invalid parameter class: "+liveclientClass.getName()); } - if (eventClazz.isAssignableFrom(TikTokEvent.class) && - !eventClazz.equals(TikTokEvent.class)) { - throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 2nd parameter must instance of " + TikTokEvent.class.getName()); + if (!TikTokEvent.class.isAssignableFrom(eventClass) && !eventClass.equals(TikTokEvent.class)) { + throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 2nd parameter must be instance of " + TikTokEvent.class.getName() + + " | Invalid parameter class: "+eventClass.getName()); } EventConsumer eventMethodRef = (liveClient, event) -> @@ -117,7 +118,7 @@ public class TikTokListenersManager implements ListenersManager { throw new TikTokEventListenerMethodException(e); } }; - eventsMap.computeIfAbsent(eventClazz, (a) -> new ArrayList<>()).add(eventMethodRef); + eventsMap.computeIfAbsent(eventClass, (a) -> new ArrayList<>()).add(eventMethodRef); } return new ListenerBindingModel(listener, eventsMap); } diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java index 25d0081..4573678 100644 --- a/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java +++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftManagerTest.java @@ -22,12 +22,7 @@ */ package io.github.jwdeveloper.tiktok.gifts; -import io.github.jwdeveloper.tiktok.data.models.gifts.GiftOld; -import io.github.jwdeveloper.tiktok.data.models.Picture; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; import org.mockito.junit.jupiter.MockitoExtension; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java index 950971f..900edcf 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java @@ -4,6 +4,7 @@ import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; import io.github.jwdeveloper.tiktok.data.events.TikTokErrorEvent; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.data.events.control.TikTokConnectingEvent; +import io.github.jwdeveloper.tiktok.data.events.room.TikTokRoomInfoEvent; import io.github.jwdeveloper.tiktok.data.events.websocket.TikTokWebsocketResponseEvent; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException; import io.github.jwdeveloper.tiktok.extension.collector.api.LiveDataCollector; @@ -16,22 +17,20 @@ import org.bson.Document; import java.io.PrintWriter; import java.io.StringWriter; +import java.time.LocalDateTime; import java.util.Base64; -import java.util.Date; public class DataCollectorListener implements LiveDataCollector { private final Storage storage; private final CollectorListenerSettings settings; - private String roomId; - private String userName; + private String roomId, userName; public DataCollectorListener(Storage collection, CollectorListenerSettings settings) { this.storage = collection; this.settings = settings; } - @TikTokEventObserver private void onResponse(LiveClient liveClient, TikTokWebsocketResponseEvent event) { includeResponse(liveClient, event.getResponse()); @@ -40,13 +39,12 @@ public class DataCollectorListener implements LiveDataCollector { @TikTokEventObserver private void onEvent(LiveClient liveClient, TikTokEvent event) { - if (event instanceof TikTokConnectingEvent) { + if (event instanceof TikTokConnectingEvent) userName = liveClient.getRoomInfo().getHostName(); + else if (event instanceof TikTokRoomInfoEvent && roomId == null) roomId = liveClient.getRoomInfo().getRoomId(); - } - if (event instanceof TikTokErrorEvent) { + else if (event instanceof TikTokErrorEvent) return; - } includeEvent(liveClient, event); } @@ -57,7 +55,6 @@ public class DataCollectorListener implements LiveDataCollector { includeError(liveClient, event); } - private void includeResponse(LiveClient liveClient, WebcastResponse message) { var messageContent = Base64.getEncoder().encodeToString(message.toByteArray()); insertDocument(liveClient, createDocument("response", "webcast", messageContent)); @@ -86,33 +83,26 @@ public class DataCollectorListener implements LiveDataCollector { var content = sw.toString(); var contentBase64 = Base64.getEncoder().encodeToString(content.getBytes()); var doc = createDocument("error", exceptionName, contentBase64); - if (exception instanceof TikTokLiveMessageException ex) { - doc.append("message", ex.messageToBase64()) - .append("response", ex.webcastResponseToBase64()); - } + if (exception instanceof TikTokLiveMessageException ex) + doc.append("message", ex.messageToBase64()).append("response", ex.webcastResponseToBase64()); insertDocument(client, doc); } - private void insertDocument(LiveClient client, Document document) { - if (!settings.getFilter().execute(client, document)) { - return; - } - storage.insert(document); - } - + if (settings.getFilter().execute(client, document)) + storage.insert(document); + } private Document createDocument(String dataType, String dataTypeName, String content) { var doc = new Document(); doc.append("roomId", roomId); - for (var entry : settings.getExtraFields().entrySet()) { + for (var entry : settings.getExtraFields().entrySet()) doc.append(entry.getKey(), entry.getValue()); - } doc.append("tiktokUser", userName); doc.append("dataType", dataType); doc.append("dataTypeName", dataTypeName); doc.append("content", content); - doc.append("createdAt", new Date()); + doc.append("createdAt", LocalDateTime.now().toString()); return doc; } } \ No newline at end of file