--- /dev/null
+<?php
+
+namespace App\Models;
+
+use Discord\Parts\Channel\Channel;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class DiscordChannel extends Model
+{
+ use HasFactory;
+
+ public static function onUpstreamCreate(Channel $channel) {
+ $guild = DiscordGuild::firstWhere('guild_id', $channel->guild_id);
+ if (!$guild) return;
+ static::sync($guild, $channel);
+ }
+
+ public static function onUpstreamUpdate(Channel $channel) {
+ $guild = DiscordGuild::firstWhere('guild_id', $channel->guild_id);
+ if (!$guild) return;
+ static::sync($guild, $channel);
+ }
+
+ public static function onUpstreamDelete($channel) {
+ if (!$channel) return;
+ $model = static::firstWhere('channel_id', $channel->id);
+ if (!$model) return;
+ $model->delete();
+ }
+
+ public static function sync(DiscordGuild $guild, Channel $channel) {
+ $model = static::firstOrNew([
+ 'channel_id' => $channel->id,
+ 'discord_guild_id' => $guild->id,
+ ]);
+ $model->name = $channel->name;
+ $model->type = $channel->type;
+ $model->position = $channel->position;
+ $model->private = $channel->is_private;
+ $model->save();
+ }
+
+ public function guild() {
+ return $this->belongsTo(DiscordGuild::class);
+ }
+
+ protected $fillable = [
+ 'channel_id',
+ 'discord_guild_id',
+ ];
+
+}