OnLineService.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace App\Services;
  3. use App\Constants\StepStatus;
  4. use App\Models\Room;
  5. use App\Models\RoomUser;
  6. use App\Models\User;
  7. use App\Models\Wallet;
  8. use Illuminate\Support\Facades\Cache;
  9. class OnLineService
  10. {
  11. static function join($chatId, $roomId, $messageId)
  12. {
  13. $room = Room::where('room_id', $roomId)->first();
  14. if (!$room) {
  15. return [[
  16. 'chat_id' => $chatId,
  17. 'text' => '❌ 房间不存在,请重新输入!',
  18. 'reply_to_message_id' => $messageId
  19. ]];
  20. }
  21. if ($room->status !== 1 && $room->status != 2) {
  22. return [[
  23. 'chat_id' => $chatId,
  24. 'text' => '❌ 房间已开始游戏,请重新输入!',
  25. 'reply_to_message_id' => $messageId
  26. ]];
  27. }
  28. if($room->status == 2 && !$room->midway){
  29. return [[
  30. 'chat_id' => $chatId,
  31. 'text' => '❌ 房间已开始游戏,不允许中途加入!',
  32. 'reply_to_message_id' => $messageId
  33. ]];
  34. }
  35. $wallet = Wallet::where('member_id', $chatId)->first();
  36. $zuiDi = $room->base_score * 100;
  37. if ($wallet->available_balance < $zuiDi) {
  38. return [[
  39. 'chat_id' => $chatId,
  40. 'text' => "❌您选择的是:{$room->base_score}USDT的房间,最低余额:{$zuiDi}USDT\n请重新输入或充值余额!",
  41. 'reply_to_message_id' => $messageId
  42. ]];
  43. }
  44. if ($room->join_count >= $room->participants) {
  45. return [[
  46. 'chat_id' => $chatId,
  47. 'text' => '❌加入失败,房间人数已满'
  48. ]];
  49. }
  50. $ru = RoomUser::where('member_id', $chatId)
  51. ->whereIn('status', [0, 1, 2, 3])
  52. ->first();
  53. if ($ru) {
  54. $keyboard = [
  55. [
  56. ['text' => '进入房间', 'callback_data' => "games@@home{$ru->room_id}"],
  57. ],
  58. ];
  59. return [[
  60. 'chat_id' => $chatId,
  61. 'text' => "您已加入房间,请进入房间继续游戏",
  62. 'reply_markup' => json_encode(['inline_keyboard' => $keyboard])
  63. ]];
  64. }
  65. $user = User::where('member_id', $chatId)->first();
  66. $ru = new RoomUser();
  67. $ru->room_id = $room->room_id;
  68. $ru->member_id = $chatId;
  69. $ru->first_name = $user->first_name;
  70. $ru->status = 0;
  71. $ru->save();
  72. $room->join_count += 1;
  73. $room->save();
  74. $arr = [];
  75. $list = RoomUser::where('room_id', $ru->room_id)->where('member_id', '<>', $chatId)->get();
  76. foreach ($list as $item) {
  77. $arr[] = [
  78. 'chat_id' => $item->member_id,
  79. 'text' => "新用户进入房间",
  80. ];
  81. if ($room->join_count == $room->participants) {
  82. $arr[] = [
  83. 'chat_id' => $item->member_id,
  84. 'text' => "房间已满员,请所有玩家准备",
  85. ];
  86. }
  87. }
  88. $data = RoomService::getGameIdMessage($chatId, $room->game_name, null);
  89. unset($data['message_id']);
  90. $arr[] = $data;
  91. Cache::put(get_step_key($chatId), StepStatus::INPUT_GAME_ID);
  92. return $arr;
  93. }
  94. static function joinRoom($chatId, $messageId)
  95. {
  96. Cache::put(get_step_key($chatId), StepStatus::INPUT_JOIN_ROOM_ID);
  97. return [
  98. 'chat_id' => $chatId,
  99. 'message_id' => $messageId,
  100. 'text' => '请发送您要加入的房间号'
  101. ];
  102. }
  103. public function getList($chatId, $messageId = null, $page = 1, $limit = 8)
  104. {
  105. Cache::delete("{$chatId}_CREATE_ROOM_MESSAGE_ID");
  106. $ru = RoomUser::where('member_id', $chatId)
  107. ->whereIn('status', [0, 1, 2, 3])
  108. ->first();
  109. if ($ru) {
  110. $keyboard = [
  111. [
  112. ['text' => '进入房间', 'callback_data' => "games@@home{$ru->room_id}"],
  113. ],
  114. ];
  115. return [
  116. 'chat_id' => $chatId,
  117. 'text' => "您已加入房间,请进入房间继续游戏",
  118. 'message_id' => $messageId,
  119. 'reply_markup' => json_encode(['inline_keyboard' => $keyboard])
  120. ];
  121. }
  122. $res = Room::where('status', 1)
  123. ->forPage($page, $limit)->get();
  124. $count = Room::where('status', 1)->count();
  125. // if ($count > 0) {
  126. $keyboard = [];
  127. foreach ($res as $item) {
  128. $keyboard[] = [
  129. ['text' => "{$item->game_name} 人数:{$item->join_count}/$item->participants 局数:{$item->rounds}局 底分:{$item->base_score}USDT", 'callback_data' => "join@@{$item->room_id}"]
  130. ];
  131. }
  132. $dPage = false;
  133. if ($page > 1) {
  134. $dPage = true;
  135. $keyboard[] = [
  136. ['text' => "👆上一页", 'callback_data' => "onlineNextPage@@" . ($page - 1)]
  137. ];
  138. }
  139. $allPage = ceil($count / $limit);
  140. if ($allPage > $page) {
  141. $dPage = true;
  142. if ($page > 1) {
  143. $keyboard[count($keyboard) - 1][] = ['text' => "👇下一页", 'callback_data' => "onlineNextPage@@" . ($page + 1)];
  144. } else {
  145. $keyboard[] = [
  146. ['text' => "👇下一页", 'callback_data' => "onlineNextPage@@" . ($page + 1)]
  147. ];
  148. }
  149. }
  150. if ($dPage) {
  151. if (count($keyboard[count($keyboard) - 1]) >= 2) {
  152. $keyboard[count($keyboard) - 1][] = ['text' => '输入房间号', 'callback_data' => 'join@@room'];
  153. $keyboard[count($keyboard) - 1][] = ['text' => "🔙返回", 'callback_data' => "del@@message"];
  154. } else {
  155. $keyboard[] = [
  156. ['text' => '输入房间号', 'callback_data' => 'join@@room'],
  157. ['text' => "🔙返回", 'callback_data' => "del@@message"],
  158. ];
  159. }
  160. } else {
  161. $keyboard[] = [
  162. ['text' => '输入房间号', 'callback_data' => 'join@@room'],
  163. ['text' => "🔙返回", 'callback_data' => "del@@message"],
  164. ];
  165. }
  166. $data = [
  167. 'chat_id' => $chatId,
  168. 'text' => "👇选择以下在线房间,加入后可参与游戏!",
  169. 'message_id' => $messageId,
  170. 'reply_markup' => json_encode(['inline_keyboard' => $keyboard])
  171. ];
  172. return $data;
  173. // }
  174. }
  175. }