From a9eba7ca62ff8bbfc9d1030395088dedd89ea769 Mon Sep 17 00:00:00 2001 From: Akazawa Daisuke <40195276+akkadaska@users.noreply.github.com> Date: Mon, 3 Oct 2022 15:09:40 +0900 Subject: [PATCH] feat: add RemoveChatItemAction and LiveChatTickerStickerItem (#214) --- .../classes/livechat/RemoveChatItemAction.ts | 14 +++++ .../items/LiveChatTickerPaidStickerItem.ts | 56 +++++++++++++++++++ src/parser/map.ts | 4 ++ 3 files changed, 74 insertions(+) create mode 100644 src/parser/classes/livechat/RemoveChatItemAction.ts create mode 100644 src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts diff --git a/src/parser/classes/livechat/RemoveChatItemAction.ts b/src/parser/classes/livechat/RemoveChatItemAction.ts new file mode 100644 index 00000000..325677b6 --- /dev/null +++ b/src/parser/classes/livechat/RemoveChatItemAction.ts @@ -0,0 +1,14 @@ +import { YTNode } from '../../helpers'; + +class RemoveChatItemAction extends YTNode { + static type = 'RemoveChatItemAction'; + + target_item_id: string; + + constructor(data: any) { + super(); + this.target_item_id = data.targetItemId; + } +} + +export default RemoveChatItemAction; \ No newline at end of file diff --git a/src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts b/src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts new file mode 100644 index 00000000..c580200e --- /dev/null +++ b/src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts @@ -0,0 +1,56 @@ +import Text from '../../misc/Text'; +import Thumbnail from '../../misc/Thumbnail'; +import NavigationEndpoint from '../../NavigationEndpoint'; +import MetadataBadge from '../../MetadataBadge'; +import LiveChatAuthorBadge from '../../LiveChatAuthorBadge'; +import Parser from '../../../index'; + +import { YTNode } from '../../../helpers'; + +class LiveChatTickerPaidStickerItem extends YTNode { + static type = 'LiveChatTickerPaidStickerItem'; + + author: { + id: string; + thumbnails: Thumbnail[]; + badges: LiveChatAuthorBadge[] | MetadataBadge[]; + is_moderator: boolean | null; + is_verified: boolean | null; + is_verified_artist: boolean | null; + }; + + amount: Text; + duration_sec: string; // Or number? + full_duration_sec: string; + show_item; + show_item_endpoint: NavigationEndpoint; + id: string; + + constructor(data: any) { + super(); + + this.author = { + id: data.authorExternalChannelId, + thumbnails: Thumbnail.fromResponse(data.authorPhoto), + badges: Parser.parseArray(data.authorBadges, [ MetadataBadge, LiveChatAuthorBadge ]), + is_moderator: null, + is_verified: null, + is_verified_artist: null + }; + + const badges = Parser.parseArray(data.authorBadges, [ MetadataBadge, LiveChatAuthorBadge ]); + + this.author.badges = badges; + this.author.is_moderator = badges?.some((badge) => badge.icon_type == 'MODERATOR') || null; + this.author.is_verified = badges?.some((badge) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED') || null; + this.author.is_verified_artist = badges?.some((badge) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED_ARTIST') || null; + this.amount = new Text(data.amount); + this.duration_sec = data.durationSec; + this.full_duration_sec = data.fullDurationSec; + this.show_item = Parser.parse(data.showItemEndpoint.showLiveChatItemEndpoint.renderer); + this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint); + this.id = data.id; + } +} + +export default LiveChatTickerPaidStickerItem; \ No newline at end of file diff --git a/src/parser/map.ts b/src/parser/map.ts index a0d57779..3602e057 100644 --- a/src/parser/map.ts +++ b/src/parser/map.ts @@ -103,6 +103,7 @@ import { default as LiveChatPlaceholderItem } from './classes/livechat/items/Liv import { default as LiveChatProductItem } from './classes/livechat/items/LiveChatProductItem'; import { default as LiveChatTextMessage } from './classes/livechat/items/LiveChatTextMessage'; import { default as LiveChatTickerPaidMessageItem } from './classes/livechat/items/LiveChatTickerPaidMessageItem'; +import { default as LiveChatTickerPaidStickerItem } from './classes/livechat/items/LiveChatTickerPaidStickerItem'; import { default as LiveChatTickerSponsorItem } from './classes/livechat/items/LiveChatTickerSponsorItem'; import { default as LiveChatViewerEngagementMessage } from './classes/livechat/items/LiveChatViewerEngagementMessage'; import { default as PollHeader } from './classes/livechat/items/PollHeader'; @@ -110,6 +111,7 @@ import { default as LiveChatActionPanel } from './classes/livechat/LiveChatActio import { default as MarkChatItemAsDeletedAction } from './classes/livechat/MarkChatItemAsDeletedAction'; import { default as MarkChatItemsByAuthorAsDeletedAction } from './classes/livechat/MarkChatItemsByAuthorAsDeletedAction'; import { default as RemoveBannerForLiveChatCommand } from './classes/livechat/RemoveBannerForLiveChatCommand'; +import { default as RemoveChatItemAction } from './classes/livechat/RemoveChatItemAction'; import { default as ReplaceChatItemAction } from './classes/livechat/ReplaceChatItemAction'; import { default as ReplayChatItemAction } from './classes/livechat/ReplayChatItemAction'; import { default as ShowLiveChatActionPanelAction } from './classes/livechat/ShowLiveChatActionPanelAction'; @@ -378,6 +380,7 @@ const map: Record = { LiveChatProductItem, LiveChatTextMessage, LiveChatTickerPaidMessageItem, + LiveChatTickerPaidStickerItem, LiveChatTickerSponsorItem, LiveChatViewerEngagementMessage, PollHeader, @@ -385,6 +388,7 @@ const map: Record = { MarkChatItemAsDeletedAction, MarkChatItemsByAuthorAsDeletedAction, RemoveBannerForLiveChatCommand, + RemoveChatItemAction, ReplaceChatItemAction, ReplayChatItemAction, ShowLiveChatActionPanelAction,