| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 | <?phpnamespace App\Services;use App\Constants\StepStatus;use App\Models\Room;use App\Models\RoomUser;use App\Models\User;use App\Models\Wallet;use Illuminate\Support\Facades\Cache;class OnLineService{    static function join($chatId, $roomId, $messageId)    {        $room = Room::where('room_id', $roomId)->first();        if (!$room) {            return [[                'chat_id' => $chatId,                'text' => '❌ 房间不存在,请重新输入!',                'reply_to_message_id' => $messageId            ]];        }        if ($room->status !== 1 && $room->status != 2) {            return [[                'chat_id' => $chatId,                'text' => '❌ 房间已开始游戏,请重新输入!',                'reply_to_message_id' => $messageId            ]];        }        if($room->status == 2 && !$room->midway){            return [[                'chat_id' => $chatId,                'text' => '❌ 房间已开始游戏,不允许中途加入!',                'reply_to_message_id' => $messageId            ]];        }        $wallet = Wallet::where('member_id', $chatId)->first();        $zuiDi = $room->base_score * 100;        if ($wallet->available_balance < $zuiDi) {            return [[                'chat_id' => $chatId,                'text' => "❌您选择的是:{$room->base_score}USDT的房间,最低余额:{$zuiDi}USDT\n请重新输入或充值余额!",                'reply_to_message_id' => $messageId            ]];        }        if ($room->join_count >= $room->participants) {            return [[                'chat_id' => $chatId,                'text' => '❌加入失败,房间人数已满'            ]];        }        $ru = RoomUser::where('member_id', $chatId)            ->whereIn('status', [0, 1, 2, 3])            ->first();        if ($ru) {            $keyboard = [                [                    ['text' => '进入房间', 'callback_data' => "games@@home{$ru->room_id}"],                ],            ];            return [[                'chat_id' => $chatId,                'text' => "您已加入房间,请进入房间继续游戏",                'reply_markup' => json_encode(['inline_keyboard' => $keyboard])            ]];        }        $user = User::where('member_id', $chatId)->first();        $ru = new RoomUser();        $ru->room_id = $room->room_id;        $ru->member_id = $chatId;        $ru->first_name = $user->first_name;        $ru->status = 0;        $ru->save();        $room->join_count += 1;        $room->save();        $arr = [];        $list = RoomUser::where('room_id', $ru->room_id)->where('member_id', '<>', $chatId)->get();        foreach ($list as $item) {            $arr[] = [                'chat_id' => $item->member_id,                'text' => "新用户进入房间",            ];            if ($room->join_count == $room->participants) {                $arr[] = [                    'chat_id' => $item->member_id,                    'text' => "房间已满员,请所有玩家准备",                ];            }        }        $data = RoomService::getGameIdMessage($chatId, $room->game_name, null);        unset($data['message_id']);        $arr[] = $data;        Cache::put(get_step_key($chatId), StepStatus::INPUT_GAME_ID);        return $arr;    }    static function joinRoom($chatId, $messageId)    {        Cache::put(get_step_key($chatId), StepStatus::INPUT_JOIN_ROOM_ID);        return [            'chat_id' => $chatId,            'message_id' => $messageId,            'text' => '请发送您要加入的房间号'        ];    }    public function getList($chatId, $messageId = null, $page = 1, $limit = 8)    {        Cache::delete("{$chatId}_CREATE_ROOM_MESSAGE_ID");        $ru = RoomUser::where('member_id', $chatId)            ->whereIn('status', [0, 1, 2, 3])            ->first();        if ($ru) {            $keyboard = [                [                    ['text' => '进入房间', 'callback_data' => "games@@home{$ru->room_id}"],                ],            ];            return [                'chat_id' => $chatId,                'text' => "您已加入房间,请进入房间继续游戏",                'message_id' => $messageId,                'reply_markup' => json_encode(['inline_keyboard' => $keyboard])            ];        }        $res = Room::where('status', 1)            ->forPage($page, $limit)->get();        $count = Room::where('status', 1)->count();//        if ($count > 0) {        $keyboard = [];        foreach ($res as $item) {            $keyboard[] = [                ['text' => "{$item->game_name}  人数:{$item->join_count}/$item->participants  局数:{$item->rounds}局  底分:{$item->base_score}USDT", 'callback_data' => "join@@{$item->room_id}"]            ];        }        $dPage = false;        if ($page > 1) {            $dPage = true;            $keyboard[] = [                ['text' => "👆上一页", 'callback_data' => "onlineNextPage@@" . ($page - 1)]            ];        }        $allPage = ceil($count / $limit);        if ($allPage > $page) {            $dPage = true;            if ($page > 1) {                $keyboard[count($keyboard) - 1][] = ['text' => "👇下一页", 'callback_data' => "onlineNextPage@@" . ($page + 1)];            } else {                $keyboard[] = [                    ['text' => "👇下一页", 'callback_data' => "onlineNextPage@@" . ($page + 1)]                ];            }        }        if ($dPage) {            if (count($keyboard[count($keyboard) - 1]) >= 2) {                $keyboard[count($keyboard) - 1][] = ['text' => '输入房间号', 'callback_data' => 'join@@room'];                $keyboard[count($keyboard) - 1][] = ['text' => "🔙返回", 'callback_data' => "del@@message"];            } else {                $keyboard[] = [                    ['text' => '输入房间号', 'callback_data' => 'join@@room'],                    ['text' => "🔙返回", 'callback_data' => "del@@message"],                ];            }        } else {            $keyboard[] = [                ['text' => '输入房间号', 'callback_data' => 'join@@room'],                ['text' => "🔙返回", 'callback_data' => "del@@message"],            ];        }        $data = [            'chat_id' => $chatId,            'text' => "👇选择以下在线房间,加入后可参与游戏!",            'message_id' => $messageId,            'reply_markup' => json_encode(['inline_keyboard' => $keyboard])        ];        return $data;//        }    }}
 |