diff --git a/src/Events/Twitch/ViewerMilestoneEvent.php b/src/Events/Twitch/ViewerMilestoneEvent.php new file mode 100644 index 0000000..e61e438 --- /dev/null +++ b/src/Events/Twitch/ViewerMilestoneEvent.php @@ -0,0 +1,49 @@ +channel = $channel; + $this->user = $user; + $this->milestoneValue = $milestoneValue; + $this->category = $category; + $this->tags = $tags; + } +} diff --git a/src/Messages/IrcMessageParser.php b/src/Messages/IrcMessageParser.php index 8aaee9c..d105c6b 100644 --- a/src/Messages/IrcMessageParser.php +++ b/src/Messages/IrcMessageParser.php @@ -47,6 +47,7 @@ public function parseSingle(string $message): IrcMessage break; case 'PRIVMSG': + case 'WHISPER': $msg = new PrivmsgMessage($message); break; diff --git a/src/Messages/UserNoticeMessage.php b/src/Messages/UserNoticeMessage.php index 35c6d53..f614ec1 100644 --- a/src/Messages/UserNoticeMessage.php +++ b/src/Messages/UserNoticeMessage.php @@ -21,6 +21,7 @@ class UserNoticeMessage extends IrcMessage public const TAG_SUB = 'sub'; public const TAG_SUBGIFT = 'subgift'; public const TAG_SUBMYSTERYGIFT = 'submysterygift'; + public const TAG_VIEWERMILESTONE = 'viewermilestone'; public Channel $channel; @@ -68,6 +69,8 @@ public function getArguments(string $msgId): ?Event $raidedChannel = $tags['msg-param-displayName'] ?? $tags['msg-param-login'] ?? ''; $viewers = (int)($tags['msg-param-viewerCount'] ?? 0); $ritual = $tags['msg-param-ritual-name'] ?? ''; + $category = $tags['msg-param-category'] ?? ''; + $milestoneValue = (int)($tags['msg-param-value'] ?? 0); $message = $this->payload ?? ''; switch ($msgId) { @@ -93,6 +96,8 @@ public function getArguments(string $msgId): ?Event return new Twitch\SubGiftEvent($this->channel, $username, $streakMonths, $recipient, $plan, $tags); case self::TAG_SUBMYSTERYGIFT: return new Twitch\SubMysteryGiftEvent($this->channel, $username, $giftSubCount, $plan, $tags); + case self::TAG_VIEWERMILESTONE: + return new Twitch\ViewerMilestoneEvent($this->channel, $username, $milestoneValue, $category, $tags); default: return null; }