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/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/events/link/TikTokLinkApplyEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkApplyEvent.java new file mode 100644 index 0000000..ef5dbee --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkApplyEvent.java @@ -0,0 +1,36 @@ +/* + * 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 TikTokLinkApplyEvent extends TikTokLinkEvent { + + 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 84% 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 8b846e2..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,7 +20,7 @@ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package io.github.jwdeveloper.tiktok.data.events; +package io.github.jwdeveloper.tiktok.data.events.link; import io.github.jwdeveloper.tiktok.annotations.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; @@ -31,7 +31,13 @@ import lombok.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/link/TikTokLinkMicIdxUpdateEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMicIdxUpdateEvent.java new file mode 100644 index 0000000..f6d09ef --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/link/TikTokLinkMicIdxUpdateEvent.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 TikTokLinkMicIdxUpdateEvent extends TikTokLinkEvent { + + 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/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/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/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;