From ac6921da72ff4b0beab9e5f1308788a55aae3ad9 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Thu, 9 May 2024 12:32:01 +0200 Subject: [PATCH] add emote stats command --- app/Console/Commands/TwitchTopEmotes.php | 62 ++++++++++++++++++++++++ app/Models/ChatLog.php | 4 +- app/TwitchBot/TokenizedMessage.php | 13 ++++- 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 app/Console/Commands/TwitchTopEmotes.php diff --git a/app/Console/Commands/TwitchTopEmotes.php b/app/Console/Commands/TwitchTopEmotes.php new file mode 100644 index 0000000..81436d9 --- /dev/null +++ b/app/Console/Commands/TwitchTopEmotes.php @@ -0,0 +1,62 @@ +where('banned', '=', false) + ->whereNotNull('evaluated_at') + ->chunk(5000, function ($msgs) use (&$counts) { + foreach ($msgs as $msg) { + $tokenized = $msg->tokenize(); + foreach ($tokenized->getOriginalEmotes() as $emote) { + if (!isset($counts[$emote])) { + $counts[$emote] = 1; + } else { + ++$counts[$emote]; + } + } + } + }); + + arsort($counts); + + $amount = intval($this->argument('amount')); + $counts = array_slice($counts, 0, $amount); + + foreach ($counts as $emote => $count) { + $this->line(mb_str_pad($emote, 20).$count); + } + + return 0; + } + +} + +?> diff --git a/app/Models/ChatLog.php b/app/Models/ChatLog.php index 6af1587..2d43b2f 100644 --- a/app/Models/ChatLog.php +++ b/app/Models/ChatLog.php @@ -34,9 +34,7 @@ class ChatLog extends Model { $positions = explode(',', $set[1]); foreach ($positions as $position) { $coords = explode('-', $position); - for ($i = intval($coords[0]); $i <= intval($coords[1]); ++$i) { - $text[$i] = ' '; - } + $text = mb_substr($text, 0, $coords[0]).str_repeat(' ', $coords[1] - $coords[0] + 1).mb_substr($text, $coords[1] + 1); } } } diff --git a/app/TwitchBot/TokenizedMessage.php b/app/TwitchBot/TokenizedMessage.php index 37836a9..4b7d758 100644 --- a/app/TwitchBot/TokenizedMessage.php +++ b/app/TwitchBot/TokenizedMessage.php @@ -22,7 +22,9 @@ class TokenizedMessage { $positions = explode(',', $set[1]); foreach ($positions as $position) { $coords = explode('-', $position); - $this->emotes[] = preg_replace('/\d+$/', '', strtolower(mb_substr($this->text, $coords[0], $coords[1] - $coords[0] + 1))); + $emote_text = mb_substr($this->text, $coords[0], $coords[1] - $coords[0] + 1); + $this->original_emotes[] = $emote_text; + $this->emotes[] = preg_replace('/\d+$/', '', strtolower($emote_text)); $this->emoteless = mb_substr($this->emoteless, 0, $coords[0]).str_repeat(' ', $coords[1] - $coords[0] + 1).mb_substr($this->emoteless, $coords[1] + 1); } } @@ -77,10 +79,18 @@ class TokenizedMessage { return !empty($this->tokens) && $this->tokens[count($this->tokens) - 1] == $text; } + public function getEmotes() { + return $this->emotes; + } + public function getNumericValue() { return intval($this->text); } + public function getOriginalEmotes() { + return $this->original_emotes; + } + public function hasConsecutiveTokens($tokens) { for ($i = 0; $i < count($this->tokens) - count($tokens) + 1; ++$i) { for ($j = 0; $j < count($tokens); ++$j) { @@ -344,6 +354,7 @@ class TokenizedMessage { private $tokens; private $emotes = []; + private $original_emotes = []; private $emoteless = ''; private $emoteless_raw = ''; private $emoteless_tokens = []; -- 2.39.2