diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 656a1f7..674408f 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -156,59 +156,36 @@ class ChatController extends Controller // 每次进入先清理掉历史中旧的欢迎消息,保证同一个人只保留最后一条 $this->chatState->removeOldWelcomeMessages($id, $user->username); - if ($user->user_level >= $superLevel) { - // 管理员专属:全房间烟花 - broadcast(new \App\Events\EffectBroadcast($id, 'fireworks', $user->username)); + // 统一走通用进场播报逻辑,管理员不再发送单独的特殊登录提示。 + [$text, $color] = $this->broadcast->buildEntryBroadcast($user); + $vipPresencePayload = $this->broadcast->buildVipPresencePayload($user, 'join'); - // 传给前端,让管理员自己屏幕上也按规矩加载燃放烟花 - $newbieEffect = 'fireworks'; + $generalWelcomeMsg = [ + 'id' => $this->chatState->nextMessageId($id), + 'room_id' => $id, + 'from_user' => '进出播报', + 'to_user' => '大家', + 'content' => "{$text}", + 'is_secret' => false, + 'font_color' => $color, + 'action' => empty($vipPresencePayload) ? 'system_welcome' : 'vip_presence', + 'welcome_user' => $user->username, + 'sent_at' => now()->toDateTimeString(), + ]; - $welcomeMsg = [ - 'id' => $this->chatState->nextMessageId($id), - 'room_id' => $id, - 'from_user' => '系统公告', - 'to_user' => '大家', - 'content' => "🎉 欢迎管理员 【{$user->username}】 驾临本聊天室!请各位文明聊天!", - 'is_secret' => false, - 'font_color' => '#b91c1c', - 'action' => 'admin_welcome', - 'welcome_user' => $user->username, - 'sent_at' => now()->toDateTimeString(), - ]; - $this->chatState->pushMessage($id, $welcomeMsg); - broadcast(new MessageSent($id, $welcomeMsg)); - } else { - // 非站长:生成通用播报(有职务 > 有VIP > 普通随机词) - [$text, $color] = $this->broadcast->buildEntryBroadcast($user); - $vipPresencePayload = $this->broadcast->buildVipPresencePayload($user, 'join'); + // 当会员等级带有专属主题时,把横幅与特效字段并入系统消息,供前端展示豪华进场效果。 + if (! empty($vipPresencePayload)) { + $generalWelcomeMsg = array_merge($generalWelcomeMsg, $vipPresencePayload); + $initialPresenceTheme = $vipPresencePayload; + } - $generalWelcomeMsg = [ - 'id' => $this->chatState->nextMessageId($id), - 'room_id' => $id, - 'from_user' => '进出播报', - 'to_user' => '大家', - 'content' => "{$text}", - 'is_secret' => false, - 'font_color' => $color, - 'action' => empty($vipPresencePayload) ? 'system_welcome' : 'vip_presence', - 'welcome_user' => $user->username, - 'sent_at' => now()->toDateTimeString(), - ]; + $this->chatState->pushMessage($id, $generalWelcomeMsg); + // 修复:之前使用了 ->toOthers() 导致自己看不到自己的进场提示 + broadcast(new MessageSent($id, $generalWelcomeMsg)); - // 当会员等级带有专属主题时,把横幅与特效字段并入系统消息,供前端展示豪华进场效果。 - if (! empty($vipPresencePayload)) { - $generalWelcomeMsg = array_merge($generalWelcomeMsg, $vipPresencePayload); - $initialPresenceTheme = $vipPresencePayload; - } - - $this->chatState->pushMessage($id, $generalWelcomeMsg); - // 修复:之前使用了 ->toOthers() 导致自己看不到自己的进场提示 - broadcast(new MessageSent($id, $generalWelcomeMsg)); - - // 会员专属特效需要单独广播给其他在线成员,自己则在页面初始化后本地补播。 - if (! empty($vipPresencePayload['presence_effect'])) { - broadcast(new \App\Events\EffectBroadcast($id, $vipPresencePayload['presence_effect'], $user->username))->toOthers(); - } + // 会员专属特效需要单独广播给其他在线成员,自己则在页面初始化后本地补播。 + if (! empty($vipPresencePayload['presence_effect'])) { + broadcast(new \App\Events\EffectBroadcast($id, $vipPresencePayload['presence_effect'], $user->username))->toOthers(); } }