pushBetMessage( roomId: $roomId, content: "🎲 【百家乐】【{$username}】 押注了 {$formattedAmount} 金币({$betLabel})!✨", fontColor: '#d97706', toastTitle: '🎲 有人下注百家乐', toastMessage: "{$username} 押注 {$formattedAmount} 金币({$betLabel})", toastIcon: '🎲', toastColor: '#d97706', ); } /** * 广播赛马下注成功通知。 */ public function horseRace(int $roomId, string $username, int $amount, string $horseName): void { $formattedAmount = number_format($amount); $this->pushBetMessage( roomId: $roomId, content: "🐎 【赛马】【{$username}】 押注了 {$formattedAmount} 金币({$horseName})!✨", fontColor: '#d97706', toastTitle: '🐎 有人下注赛马', toastMessage: "{$username} 押注 {$formattedAmount} 金币({$horseName})", toastIcon: '🐎', toastColor: '#d97706', ); } /** * 广播双色球购票成功通知。 */ public function lottery(int $roomId, string $username, string $issueNo, string $numbersLabel, int $ticketCount): void { $moreText = $ticketCount > 1 ? "等 {$ticketCount} 注号码" : ''; $this->pushBetMessage( roomId: $roomId, content: "🎟️ 【{$username}】购买 {$issueNo} 期 {$numbersLabel} {$moreText}", fontColor: '#dc2626', toastTitle: '🎟️ 有人购买双色球', toastMessage: "{$username} 购买 {$issueNo} 期 {$numbersLabel} {$moreText}", toastIcon: '🎟️', toastColor: '#dc2626', action: '大声宣告', ); } /** * 广播红包领取成功通知。 */ public function redPacketClaimed(int $roomId, string $username, int $amount, string $type): void { $typeLabel = $type === 'exp' ? '经验' : '金币'; $typeIcon = $type === 'exp' ? '✨' : '💰'; $toastColor = $type === 'exp' ? '#6d28d9' : '#d97706'; $formattedAmount = number_format($amount); $this->pushBetMessage( roomId: $roomId, content: "🧧 {$username} 抢到了 {$formattedAmount} {$typeLabel}礼包!{$typeIcon}", fontColor: $toastColor, toastTitle: '🧧 有人领取红包', toastMessage: "{$username} 抢到 {$formattedAmount} {$typeLabel}礼包", toastIcon: '🧧', toastColor: $toastColor, ); } /** * 推送带右下角通知载荷的公屏游戏消息。 */ private function pushBetMessage( int $roomId, string $content, string $fontColor, string $toastTitle, string $toastMessage, string $toastIcon, string $toastColor, string $action = '', ): void { $message = [ 'id' => $this->chatState->nextMessageId($roomId), 'room_id' => $roomId, 'from_user' => '系统传音', 'to_user' => '大家', 'content' => $content, 'is_secret' => false, 'font_color' => $fontColor, 'action' => $action, 'sent_at' => now()->toDateTimeString(), 'toast_notification' => [ 'title' => $toastTitle, 'message' => $toastMessage, 'icon' => $toastIcon, 'color' => $toastColor, 'duration' => 8000, ], ]; // 下注通知必须进房间 Presence 频道,确保当前房间所有在线人员都能看到右下角提示。 $this->chatState->pushMessage($roomId, $message); event(new MessageSent($roomId, $message)); SaveMessageJob::dispatch($message); } }