From: Daniel Karbach Date: Thu, 3 Jul 2025 14:52:24 +0000 (+0200) Subject: (nonfunctional) discord guild event and user subscriptions X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=5254d5a0afe782e2040785ceaf478063a03f1ac4;p=alttp.git (nonfunctional) discord guild event and user subscriptions --- diff --git a/app/Console/Commands/DiscordEpisodeSubscriptionsCommand.php b/app/Console/Commands/DiscordEpisodeSubscriptionsCommand.php new file mode 100644 index 0000000..727f77f --- /dev/null +++ b/app/Console/Commands/DiscordEpisodeSubscriptionsCommand.php @@ -0,0 +1,75 @@ +handleGuild($guild); + } catch (\Exception $e) { + $this->error('error handling guild '.$guild->name.': '.$e->getMessage()); + } + } + return 0; + } + + private function handleGuild(DiscordGuild $guild) { + $from = now()->sub(1, 'hour'); + $eventIDs = $guild->event_subscriptions->pluck('event_id')->toArray(); + $userIDs = $guild->user_subscriptions->pluck('user_id')->toArray(); + if (empty($eventIDs) && empty($userIDs)) return; + + $query = Episode::with(['channels', 'event', 'players']) + ->where('episodes.start', '>', $from) + ->orderBy('episodes.start', 'ASC') + ->limit(20); + $query->where(function ($subquery) use ($eventIDs, $userIDs) { + if (!empty($eventIDs)) { + $subquery->whereIn('episodes.event_id', $eventIDs); + } + if (!empty($userIDs)) { + $subquery->orWhereHas('players', function ($builder) use ($userIDs) { + $builder->whereIn('episode_players.user_id', $userIDs); + }); + } + }); + $episodes = $query->get(); + foreach ($episodes as $episode) { + $this->handleEpisode($episode); + } + } + + private function handleEpisode(Episode $episode) { + $this->line($episode->start.' '.$episode->event->title.' ' .$episode->title); + foreach ($episode->players as $player) { + $this->line(' - '.$player->name_override); + } + } + +} diff --git a/app/DiscordBotCommands/PresenceCommand.php b/app/DiscordBotCommands/PresenceCommand.php index c466b1c..47c15a5 100644 --- a/app/DiscordBotCommands/PresenceCommand.php +++ b/app/DiscordBotCommands/PresenceCommand.php @@ -30,7 +30,7 @@ class PresenceCommand extends BaseCommand { } } if ($this->hasParameter('idle')) { - $idle = $this->parameters['idle']; + $idle = $this->getParameter('idle'); } if ($this->hasParameter('status')) { $status = $this->getParameter('status'); diff --git a/app/Models/DiscordGuild.php b/app/Models/DiscordGuild.php index db0825a..37e711b 100644 --- a/app/Models/DiscordGuild.php +++ b/app/Models/DiscordGuild.php @@ -52,10 +52,18 @@ class DiscordGuild extends Model return $this->hasMany(DiscordChannel::class)->orderBy('position'); } + public function event_subscriptions() { + return $this->hasMany(DiscordGuildEventSubscription::class); + } + public function roles() { return $this->hasMany(DiscordRole::class)->orderBy('position'); } + public function user_subscriptions() { + return $this->hasMany(DiscordGuildUserSubscription::class); + } + protected $fillable = [ 'guild_id', ]; diff --git a/app/Models/DiscordGuildEventSubscription.php b/app/Models/DiscordGuildEventSubscription.php new file mode 100644 index 0000000..11a5da9 --- /dev/null +++ b/app/Models/DiscordGuildEventSubscription.php @@ -0,0 +1,8 @@ +id(); + $table->foreignId('discord_guild_id')->constrained(); + $table->foreignId('event_id')->constrained(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('discord_guild_event_subscriptions'); + } +}; diff --git a/database/migrations/2025_07_03_143226_create_discord_guild_user_subscriptions_table.php b/database/migrations/2025_07_03_143226_create_discord_guild_user_subscriptions_table.php new file mode 100644 index 0000000..ceae338 --- /dev/null +++ b/database/migrations/2025_07_03_143226_create_discord_guild_user_subscriptions_table.php @@ -0,0 +1,29 @@ +id(); + $table->foreignId('discord_guild_id')->constrained(); + $table->foreignId('user_id')->constrained(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('discord_guild_user_subscriptions'); + } +};