优化新人欢迎信息

This commit is contained in:
pllx
2026-04-27 13:54:59 +08:00
parent 3e85cb67bc
commit 8db1a252d7
+12 -5
View File
@@ -123,9 +123,19 @@ class ChatController extends Controller
// 广播 UserJoined 事件,通知房间内的其他人
broadcast(new UserJoined($id, $user->username, $userData))->toOthers();
// 每次进入先清理掉历史中旧的欢迎消息,保证同一个人只保留最后一条
// 必须在推送新消息之前执行,否则可能误删刚刚创建的欢迎播报
$this->chatState->removeOldWelcomeMessages($id, $user->username);
// 新人首次进入:赠送 6666 金币、播放满场烟花、发送全场欢迎通告
// 双重校验:优先以 has_received_new_gift 标记为准,若标记异常则用 created_at 时间兜底
$user->refresh();
if (! $user->has_received_new_gift) {
$isNewbie = ! $user->has_received_new_gift;
// 兜底:如果用户创建时间在 2 分钟内,即使标记异常也按新人处理
if (! $isNewbie && $user->created_at && $user->created_at->diffInSeconds(now()) < 120) {
$isNewbie = true;
}
if ($isNewbie) {
// 通过统一积分服务发放新人礼包 6666 金币并记录流水
$this->currencyService->change(
$user, 'gold', 6666, CurrencySource::NEWBIE_BONUS, '新人首次入场婿赠的 6666 金币大礼包', $id,
@@ -147,6 +157,7 @@ class ChatController extends Controller
];
$this->chatState->pushMessage($id, $newbieMsg);
broadcast(new MessageSent($id, $newbieMsg));
SaveMessageJob::dispatch($newbieMsg);
// 广播烟花特效给此时已在房间的其他用户
broadcast(new \App\Events\EffectBroadcast($id, 'fireworks', $user->username))->toOthers();
@@ -179,10 +190,6 @@ class ChatController extends Controller
SaveMessageJob::dispatch($aiWelcomeMsg);
}
// superlevel 管理员进入:触发全房间烟花 + 系统公告,其他人走通用播报
// 每次进入先清理掉历史中旧的欢迎消息,保证同一个人只保留最后一条
$this->chatState->removeOldWelcomeMessages($id, $user->username);
// 统一走通用进场播报逻辑,管理员不再发送单独的特殊登录提示。
[$text, $color] = $this->broadcast->buildEntryBroadcast($user);
$vipPresencePayload = $this->broadcast->buildVipPresencePayload($user, 'join');