+<?php
+
+namespace App\Console\Commands;
+
+use App\Models\ChatLog;
+use Illuminate\Console\Command;
+
+class TwitchTopEmotes extends Command {
+
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'twitch:top-emotes {amount=10}';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Compiles a list of top N emotes in the chatbot catalog';
+
+ /**
+ * Execute the console command.
+ *
+ * @return int
+ */
+ public function handle() {
+ $counts = [];
+
+ ChatLog::where('type', '=', 'chat')
+ ->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;
+ }
+
+}
+
+?>