TelegramWebHook.php 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  1. <?php
  2. namespace App\Http\Controllers\api;
  3. use App\Constants\StepStatus;
  4. use App\Constants\Util;
  5. use App\Exceptions\MessageException;
  6. use App\Http\Controllers\Controller;
  7. use App\Models\Message;
  8. use App\Models\User;
  9. use App\Services\OnLineService;
  10. use App\Services\RecordService;
  11. use App\Services\RoomService;
  12. use App\Services\SettlementService;
  13. use App\Services\TopUpService;
  14. use App\Services\TutorialService;
  15. use App\Services\UserService;
  16. use App\Services\WalletService;
  17. use App\Services\WithdrawService;
  18. use App\Services\BalanceLogService;
  19. use Illuminate\Http\Request;
  20. use Illuminate\Support\Facades\Cache;
  21. use Illuminate\Support\Facades\DB;
  22. use Telegram\Bot\Api;
  23. use Telegram\Bot\Exceptions\TelegramSDKException;
  24. use Illuminate\Support\Facades\Log;
  25. use App\Models\Config;
  26. use App\Services\GameplayRuleService;
  27. use App\Services\BetService;
  28. use App\Services\IssueService;
  29. class TelegramWebHook extends Controller
  30. {
  31. protected $telegram;
  32. public function __construct(Api $telegram)
  33. {
  34. $this->telegram = $telegram;
  35. }
  36. public function handle(Request $request)
  37. {
  38. Log::error('Telegram 日志写入测试: ' . json_encode([$request->ip()], JSON_UNESCAPED_UNICODE));
  39. // try {
  40. $m = new Message();
  41. $m->json = $request->ip();
  42. $m->save();
  43. $telegram = new Api(config('services.telegram.token'));
  44. // } catch (TelegramSDKException $e) {
  45. // return response()->json(['status' => 'ok']);
  46. // }
  47. $update = $telegram->getWebhookUpdate(); // 获取更新数据
  48. $update->callbackQuery;
  49. if ($update->has('callback_query')) {
  50. $json['type'] = 'callback_query';
  51. $callbackQuery = $update->callbackQuery;
  52. $json['update'] = $callbackQuery;
  53. $message = $callbackQuery->message;
  54. $from = $callbackQuery->from;
  55. $data = $callbackQuery->data; // 获取 callback_data
  56. $callbackId = $callbackQuery->id; // 获取 callback_query 的 ID
  57. $m = new Message();
  58. $m->json = $data;
  59. $m->save();
  60. Util::delCache($message->chat->id);
  61. Log::error('Telegram 回调数据(JSON): ' . json_encode($update, JSON_UNESCAPED_UNICODE));
  62. DB::beginTransaction();
  63. try {
  64. $chatId = $message->chat->id;
  65. $firstName = $message->chat->firstName;
  66. $messageId = $message->messageId;
  67. if (!$from->isBot) {
  68. $chatId = $from->id;
  69. $firstName = $from->firstName;
  70. }
  71. $user = User::where('member_id', $chatId)->first();
  72. if (!$user) {
  73. $user = new User();
  74. $user->member_id = $chatId;
  75. }
  76. $user->first_name = $firstName;
  77. $user->save();
  78. //给每个用户生成一个专属的USDT钱包
  79. WalletService::getUserWallet($chatId);
  80. // 查看余额弹窗
  81. if($data === 'balanceAlert'){
  82. $alertText = WalletService::getBalance($chatId)['text'];
  83. WalletService::alertNotice($callbackId , $alertText);
  84. }
  85. // 今日流水弹窗
  86. if($data === 'todayFlowAlert'){
  87. $alertText = BalanceLogService::getTodayFlowing($chatId)['text'];
  88. BalanceLogService::alertNotice($callbackId , $alertText);
  89. }
  90. // 近期注单弹窗
  91. if($data === 'betsAlert'){
  92. $alertText = BetService::recentlyRecord($chatId);
  93. BetService::alertNotice($callbackId , $alertText);
  94. }
  95. //近期注单,下一页
  96. $pattern = "/^betRecordNextPage@@\d+$/";
  97. if (preg_match($pattern, $data)) {
  98. $page = preg_replace('/^betRecordNextPage@@/', '', $data);
  99. $page = intval($page);
  100. $res = BetService::record($chatId ,$messageId ,$page );
  101. $telegram->editMessageText($res);
  102. }
  103. DB::commit();
  104. } //
  105. catch (MessageException $e) {
  106. DB::rollBack();
  107. $msg = $e->getMessage();
  108. $msg = json_decode($msg, true);
  109. $telegram->sendMessage($msg);
  110. } //
  111. catch (TelegramSDKException $e) {
  112. DB::rollBack();
  113. $m = new Message();
  114. $m->json = $e->getMessage();
  115. $m->save();
  116. $telegram->sendMessage([
  117. 'chat_id' => $chatId,
  118. 'text' => '‼️‼️系统发生了错误,请联系客服'
  119. ]);
  120. }//
  121. catch (\Exception $e) {
  122. DB::rollBack();
  123. $m = new Message();
  124. $m->json = json_encode([
  125. 'line' => $e->getLine(),
  126. 'message' => $e->getMessage()
  127. ]);
  128. $m->save();
  129. $telegram->sendMessage([
  130. 'chat_id' => $chatId,
  131. 'text' => '‼️‼️系统发生了错误,请联系客服'
  132. ]);
  133. }
  134. }else {
  135. $update = $request->all();
  136. Log::error('Telegram 文字消息回复: ' . json_encode($update, JSON_UNESCAPED_UNICODE));
  137. if (isset($update['message'])) {
  138. $message = $update['message'];
  139. $chatId = $message['chat']['id'];
  140. $messageId = $message['message_id'];
  141. DB::beginTransaction();
  142. try {
  143. $m = new Message();
  144. $m->json = json_encode($update);
  145. $m->save();
  146. $returnMsg = $this->processChatMessage($chatId, $messageId, $message, $message['from']);
  147. if($returnMsg){
  148. $this->telegram->sendMessage($returnMsg);
  149. }
  150. DB::commit();
  151. }
  152. catch (MessageException $e) {
  153. DB::rollBack();
  154. $msg = $e->getMessage();
  155. $msg = json_decode($msg, true);
  156. $telegram->sendMessage($msg);
  157. } //
  158. catch (TelegramSDKException $e) {
  159. DB::rollBack();
  160. $m = new Message();
  161. $m->json = $e->getMessage();
  162. $m->save();
  163. $telegram->sendMessage([
  164. 'chat_id' => $chatId,
  165. 'text' => '‼️‼️系统发生了错误,请联系客服'
  166. ]);
  167. }//
  168. catch (\Exception $e) {
  169. DB::rollBack();
  170. $m = new Message();
  171. $m->json = json_encode([
  172. 'line' => $e->getLine(),
  173. 'message' => $e->getMessage()
  174. ]);
  175. $m->save();
  176. Log::error('Telegram 处理消息异常: ' . $e->getMessage());
  177. $telegram->sendMessage([
  178. 'chat_id' => $chatId,
  179. 'text' => '‼️‼️系统发生了错误,请联系客服'
  180. ]);
  181. }
  182. }
  183. }
  184. return response()->json(['status' => 'ok']);
  185. }
  186. /**
  187. * @description: 处理聊天消息
  188. * @param {*} $chatId
  189. * @param {*} $messageId
  190. * @param {*} $message
  191. * @param {*} $from
  192. * @return {*}
  193. */
  194. public function processChatMessage($chatId, $messageId, $message, $from)
  195. {
  196. $returnMsg = [];
  197. //用户发送图片,结算截图
  198. if (isset($message['photo'])) {
  199. $stepStatus = Cache::get(get_step_key($chatId), -1);
  200. $stepStatus = intval($stepStatus);
  201. // //结算截图
  202. // if ($stepStatus === StepStatus::INPUT_IMAGE) {
  203. // $photo = $message['photo'][count($message['photo']) - 1];
  204. // $res = (new SettlementService())->photo($photo, $chatId);
  205. // if ($res) $telegram->sendMessage($res);
  206. // }//
  207. // //充值截图
  208. // else if ($stepStatus === StepStatus::INPUT_TOP_UP_IMAGE) {
  209. // $photo = $message['photo'][count($message['photo']) - 1];
  210. // $res = TopUpService::photo($chatId, $photo);
  211. // if (isset($res['message_id'])) $telegram->editMessageText($res);
  212. // else $telegram->sendMessage($res);
  213. // }
  214. } //用户发送了消息
  215. else if (isset($message['text'])) {
  216. $text = $message['text'];
  217. if ($message['chat']['type'] === 'private') {
  218. switch ($text) {
  219. case "/start":
  220. Util::delCache($chatId);
  221. $user = User::where('member_id', $chatId)->first();
  222. if (!$user) {
  223. $user = new User();
  224. $user->member_id = $chatId;
  225. }
  226. $user->first_name = $message['chat']['first_name'];
  227. $user->save();
  228. //给每个用户生成一个专属的USDT钱包
  229. WalletService::getUserWallet($chatId);
  230. $username = config('services.telegram.username');
  231. $this->setReplyKeyboard($chatId);
  232. break;
  233. case "近期注单":
  234. Util::delCache($chatId);
  235. $returnMsg = BetService::record($chatId);
  236. // $this->telegram->sendMessage([
  237. // 'chat_id' => $chatId,
  238. // 'text' => $text
  239. // ]);
  240. break;
  241. case "今日流水":
  242. Util::delCache($chatId);
  243. $returnMsg = BalanceLogService::getTodayFlowing($chatId);
  244. // $this->telegram->sendMessage($result);
  245. break;
  246. case "联系客服":
  247. Util::delCache($chatId);
  248. $receivingAddress = Config::where('field', 'receiving_address')->first()->val;
  249. $serviceAccount = Config::where('field', 'service_account')->first()->val;
  250. $text = "官方唯一上分地址:\n";
  251. $text .= "USDT: \n";
  252. $text .= "{$receivingAddress}\n\n\n";
  253. $text .= "‼️特别注意‼️特别注意‼️\n";
  254. $text .= "‼️近期骗子肆意妄为,猖狂狡诈。经常冒充我方财务,管理人员以各种手段行使诈骗之术。多数为要求转账/提供验证码等。任何主动私聊您的都是非奸即盗。望各位老板谨记,预防受骗!\n";
  255. $text .= "‼️本群管理以及财务绝不会主动私聊客户。请各位老板务必认准群内带标识管理账号,转账前务必核对是否官方账号以及地址。任何一切不是官方行为的受骗上当,本群概不负责,谢谢!\n";
  256. $text .= "‼️为了您的资金安全,下分更换地址请提前告知财务,并使用原地址进行转账或录屏进行身份核实,核实为本人操作后才可进行更换地址下分\n";
  257. $text .= "‼️如查分金额与实际转账金额不同,请重新喊查。玩家重复查3次以上错误金额则视为恶意捣乱,将不退还转账金额!\n";
  258. $text .= "‼️如因为人为失误问题,到账金额与玩家实际转账金额不符,到账后的一切下注视为无效。\n";
  259. $text .= "‼️本群不接待以任何形式刷水的水军,一经发现玩家存在刷水行为将扣除历史所有返水、彩金。并冻结分数一个月,每天仅可下分账户余额10%。不纠结,不解释,请各大水军自行绕道。\n";
  260. $keyboard = [];
  261. $keyboard[] = [['text' => '✅ 唯一客服', 'callback_data' => "", 'url' => "https://t.me/{$serviceAccount}"]];
  262. $returnMsg = [
  263. 'chat_id' => $chatId,
  264. 'text' => $text,
  265. 'reply_markup' => json_encode(['inline_keyboard' => $keyboard])
  266. ];
  267. break;
  268. case "开奖历史":
  269. Util::delCache($chatId);
  270. IssueService::currentLotteryResults($chatId);
  271. break;
  272. case "当期下注":
  273. Util::delCache($chatId);
  274. $returnMsg = BetService::currentBet($chatId);
  275. break;
  276. case "查看余额":
  277. Util::delCache($chatId);
  278. $returnMsg = WalletService::getBalance($chatId);
  279. // $this->telegram->sendMessage($result);
  280. break;
  281. case "投注大群":
  282. Util::delCache($chatId);
  283. $bettingGroup = Config::where('field', 'betting_group')->first()->val;
  284. $text = "👇👇👇点击下方按钮进群投注👇👇👇\n";
  285. $keyboard = [];
  286. $keyboard[] = [['text' => '✅ 投注群', 'callback_data' => "", 'url' => "https://t.me/{$bettingGroup}"]];
  287. $returnMsg = [
  288. 'chat_id' => $chatId,
  289. 'text' => $text,
  290. 'reply_markup' => json_encode(['inline_keyboard' => $keyboard])
  291. ];
  292. break;
  293. default:
  294. $returnMsg = BetService::bet($chatId,$text,$messageId);
  295. // $this->telegram->sendMessage($returnMsg);
  296. }
  297. return $returnMsg;
  298. }
  299. }
  300. }
  301. /**
  302. * @description: 设置 start 回复菜单
  303. * @param {*} $chatId
  304. * @return {*}
  305. */
  306. public function setReplyKeyboard($chatId)
  307. {
  308. $telegram = new Api(config('services.telegram.token'));
  309. $keyboard = [
  310. ['近期注单', '今日流水', '联系客服'], // 第一排按钮
  311. ['开奖历史', '当期下注', '查看余额'], // 第二排按钮
  312. ['投注大群']
  313. ];
  314. $replyMarkup = [
  315. 'keyboard' => $keyboard,
  316. 'resize_keyboard' => true, // 自适应大小
  317. 'one_time_keyboard' => false, // 保持显示,不会点击后收起
  318. ];
  319. $telegram->sendMessage([
  320. 'chat_id' => $chatId,
  321. 'text' => '你好,请选择功能菜单',
  322. 'reply_markup' => json_encode($replyMarkup),
  323. ]);
  324. }
  325. public function handleMessage(Request $request)
  326. {
  327. $telegram = new Api(config('services.telegram.token'));
  328. $update = $telegram->getWebhookUpdate(); // 获取更新数据
  329. $update->callbackQuery;
  330. if ($update->has('callback_query')) {
  331. $json['type'] = 'callback_query';
  332. $callbackQuery = $update->callbackQuery;
  333. $json['update'] = $callbackQuery;
  334. $message = $callbackQuery->message;
  335. $from = $callbackQuery->from;
  336. $data = $callbackQuery->data; // 获取 callback_data
  337. $callbackId = $callbackQuery->id; // 获取 callback_query 的 ID
  338. $m = new Message();
  339. $m->json = $data;
  340. $m->save();
  341. Util::delCache($message->chat->id);
  342. DB::beginTransaction();
  343. try {
  344. $chatId = $message->chat->id;
  345. $firstName = $message->chat->firstName;
  346. $messageId = $message->messageId;
  347. if (!$from->isBot) {
  348. $chatId = $from->id;
  349. $firstName = $from->firstName;
  350. }
  351. $user = User::where('member_id', $chatId)->first();
  352. if (!$user) {
  353. $user = new User();
  354. $user->member_id = $chatId;
  355. }
  356. $user->first_name = $firstName;
  357. $user->save();
  358. //给每个用户生成一个专属的USDT钱包
  359. WalletService::getUserWallet($chatId);
  360. // 查看余额弹窗
  361. if($data === 'balanceAlert'){
  362. Log::error('查看余额弹窗 balanceAlert: ' . $callbackId);
  363. // $alertText = WalletService::getBalance($chatId)['text'];
  364. WalletService::alertNotice($callbackId , '您好,您的余额为:');
  365. }
  366. //取消创建游戏
  367. if ($data === "games@@cancel") {
  368. $roomService = new RoomService($telegram);
  369. $res = $roomService->cancel($chatId, $messageId);
  370. $telegram->editMessageText($res);
  371. }
  372. if ($data === 'withdrawAddress@@done') {
  373. $res = WithdrawService::done($chatId, $messageId, $firstName);
  374. $telegram->editMessageText($res);
  375. }
  376. //选择提现地址
  377. $pattern = "/^withdrawAddress@@choose\d+$/";
  378. if (preg_match($pattern, $data)) {
  379. $id = preg_replace('/^withdrawAddress@@choose/', '', $data);
  380. $res = WithdrawService::chooseAddress($chatId, $firstName, $messageId, $id);
  381. $telegram->editMessageText($res);
  382. }
  383. //删除地址
  384. $pattern = "/^withdrawAddress@@del\d+$/";
  385. if (preg_match($pattern, $data)) {
  386. $id = preg_replace('/^withdrawAddress@@del/', '', $data);
  387. $res = WithdrawService::delAddress($chatId, $id, $messageId);
  388. $telegram->editMessageText($res);
  389. }
  390. //地址详情
  391. $pattern = "/^withdrawAddress@@detail\d+$/";
  392. if (preg_match($pattern, $data)) {
  393. $id = preg_replace('/^withdrawAddress@@detail/', '', $data);
  394. $res = WithdrawService::addressDetails($chatId, $messageId, $id);
  395. $telegram->editMessageText($res);
  396. }
  397. //教程帮助
  398. $pattern = "/^Tutorial@@\d+$/";
  399. if (preg_match($pattern, $data)) {
  400. $index = preg_replace('/^Tutorial@@/', '', $data);
  401. $res = TutorialService::help($chatId, $index, $messageId);
  402. $telegram->editMessageText($res);
  403. }
  404. if ($data === 'Tutorial@@home') {
  405. $res = (new TutorialService())->index($chatId);
  406. $res['message_id'] = $messageId;
  407. $telegram->editMessageText($res);
  408. }
  409. //游戏房间首页
  410. $pattern = "/^games@@home\d+$/";
  411. if (preg_match($pattern, $data)) {
  412. $roomId = preg_replace('/^games@@home/', '', $data);
  413. $res = (new RoomService($telegram))->gameHome($roomId, $chatId, $messageId);
  414. $m = new Message();
  415. $m->json = json_encode($res);
  416. $m->save();
  417. $telegram->editMessageText($res);
  418. }
  419. //选择游戏
  420. $pattern = "/^inputGameName@@.+$/";
  421. if (preg_match($pattern, $data)) {
  422. $gameName = preg_replace('/^inputGameName@@/', '', $data);
  423. $roomService = new RoomService($telegram);
  424. $res = $roomService->setGameName($chatId, $gameName, $messageId);
  425. if (isset($res['message_id'])) $telegram->editMessageText($res);
  426. else $telegram->sendMessage($res);
  427. }
  428. //选择中途加入
  429. $pattern = "/^setGameMidway@@.+$/";
  430. if (preg_match($pattern, $data)) {
  431. $midway = preg_replace('/^setGameMidway@@/', '', $data);
  432. $roomService = new RoomService($telegram);
  433. $res = $roomService->setGameMidway($chatId, $midway, $messageId);
  434. if (isset($res['message_id'])) $telegram->editMessageText($res);
  435. else $telegram->sendMessage($res);
  436. }
  437. //确认游戏ID
  438. $pattern = "/^inputGameID@@\d+$/";
  439. if (preg_match($pattern, $data)) {
  440. $gameId = preg_replace('/^inputGameID@@/', '', $data);
  441. $rs = new RoomService($telegram);
  442. $res = $rs->setGameID($chatId, $gameId, $messageId);
  443. foreach ($res as $r) {
  444. if (isset($r['message_id'])) {
  445. $telegram->editMessageText($r);
  446. } else {
  447. $telegram->sendMessage($r);
  448. }
  449. }
  450. }
  451. //房间低分
  452. $pattern = '/^roomMin@@.*/';
  453. if (preg_match($pattern, $data)) {
  454. $roomService = new RoomService($telegram);
  455. $res = $roomService->setMin($data, $chatId, $messageId);
  456. if (isset($res['message_id'])) {
  457. $telegram->editMessageText($res);
  458. } else {
  459. $telegram->sendMessage($res);
  460. }
  461. }
  462. //删除本条数据
  463. if ($data === 'del@@message') {
  464. $telegram->deleteMessage([
  465. 'chat_id' => $chatId,
  466. 'message_id' => $messageId,
  467. ]);
  468. }
  469. //确认创建房间
  470. if ($data === 'room@@done') {
  471. $roomService = new RoomService($telegram);
  472. $res = $roomService->done($chatId, $messageId);
  473. foreach ($res as $r) {
  474. if (isset($r['message_id'])) {
  475. $telegram->editMessageText($r);
  476. } else {
  477. $telegram->sendMessage($r);
  478. }
  479. }
  480. }
  481. //客服帮助
  482. if ($data === "/tutorial") {
  483. $res = (new TutorialService())->index($chatId);
  484. $telegram->sendMessage($res);
  485. }
  486. //点击提现按钮
  487. if ($data === "withdraw@@apply") {
  488. $res = (new WithdrawService())->apply($chatId, $messageId);
  489. $telegram->editMessageText($res);
  490. }
  491. //地址管理
  492. if ($data === 'withdraw@@address') {
  493. $res = WithdrawService::getAddress($chatId, $messageId);
  494. $telegram->editMessageText($res);
  495. }
  496. //点击充值按钮
  497. if ($data === 'topup@@topup') {
  498. $telegram->deleteMessage([
  499. 'chat_id' => $chatId,
  500. 'message_id' => $messageId,
  501. ]);
  502. $topService = new TopUpService();
  503. $res = $topService->scan($chatId, $messageId);
  504. $telegram->sendPhoto($res);
  505. }
  506. //点击充值的账单按钮
  507. if ($data === 'topup@@bill') {
  508. $res = (new TopUpService())->bill($chatId, $firstName, $messageId);
  509. $telegram->editMessageText($res);
  510. // $text = "📅 请输入查询日期\n";
  511. // $date = date('Y-m-d');
  512. // $text .= "例如您要查询的日期 {$date}\n";
  513. // $text .= "那么请发送:【充值账单】{$date}\n";
  514. // $telegram->sendMessage([
  515. // 'chat_id' => $chatId,
  516. // 'text' => $text
  517. // ]);
  518. }
  519. //关闭本条消息
  520. if ($data === 'message@@close') {
  521. $telegram->deleteMessage([
  522. 'chat_id' => $chatId,
  523. 'message_id' => $messageId
  524. ]);
  525. }
  526. if ($data === 'withdrawAddress@@add') {
  527. $res = WithdrawService::addAddress($chatId, $messageId);
  528. $telegram->editMessageText($res);
  529. }
  530. //提现管理
  531. if ($data === "withdraw@@home") {
  532. $res = WithdrawService::index($chatId, $firstName, $messageId);
  533. $telegram->editMessageText($res);
  534. }
  535. //点击提现的账单按钮
  536. if ($data === "withdraw@@bill") {
  537. $res = (new WithdrawService())->bill($chatId, $firstName, $messageId);
  538. $telegram->editMessageText($res);
  539. // $telegram->sendMessage($res);
  540. // $text = "📅 请输入查询日期\n";
  541. // $date = date('Y-m-d');
  542. // $text .= "例如您要查询的日期 {$date}\n";
  543. // $text .= "那么请发送:【提现账单】{$date}\n";
  544. // $telegram->sendMessage([
  545. // 'chat_id' => $chatId,
  546. // 'text' => $text
  547. // ]);
  548. }
  549. //充值首页
  550. if ($data === "topUp@@home" || $data === "topUp@@home1") {
  551. $res = (new TopUpService())->index($chatId, $firstName, $messageId);
  552. if ($data === "topUp@@home1") {
  553. $telegram->deleteMessage([
  554. 'chat_id' => $chatId,
  555. 'message_id' => $messageId
  556. ]);
  557. $telegram->sendMessage($res);
  558. } else {
  559. $telegram->editMessageText($res);
  560. }
  561. }
  562. //点击我已付款按钮
  563. //手动充值(后台审核后到账)
  564. if ($data === 'topUp@@pay2') {
  565. $telegram->deleteMessage([
  566. 'chat_id' => $chatId,
  567. 'message_id' => $messageId
  568. ]);
  569. $res = TopUpService::pay2($chatId);
  570. $telegram->sendMessage($res);
  571. } //
  572. //自动充值
  573. elseif ($data === 'topUp@@pay') {
  574. $telegram->deleteMessage([
  575. 'chat_id' => $chatId,
  576. 'message_id' => $messageId
  577. ]);
  578. $topService = new TopUpService();
  579. $res = $topService->done($chatId);
  580. $telegram->sendMessage($res);
  581. }
  582. //充值账单,下一页
  583. $pattern = "/^topUpBillNextPage@@\d+$/";
  584. if (preg_match($pattern, $data)) {
  585. $page = preg_replace('/^topUpBillNextPage@@/', '', $data);
  586. $page = intval($page);
  587. $res = (new TopUpService())->bill($chatId, $firstName, $messageId, $page);
  588. $telegram->editMessageText($res);
  589. }
  590. //提现账单,下一页
  591. $pattern = "/^withdrawBillNextPage@@\d+$/";
  592. if (preg_match($pattern, $data)) {
  593. $page = preg_replace('/^withdrawBillNextPage@@/', '', $data);
  594. $page = intval($page);
  595. $res = (new WithdrawService())->bill($chatId, $firstName, $messageId, $page);
  596. $telegram->editMessageText($res);
  597. }
  598. //提前开始游戏
  599. $pattern = "/^games@@start\d+$/";
  600. if (preg_match($pattern, $data)) {
  601. $roomId = preg_replace('/^games@@start/', '', $data);
  602. $roomService = new RoomService($telegram);
  603. $res = $roomService->start($chatId, $roomId, $messageId);
  604. foreach ($res as $r) {
  605. if (isset($r['message_id'])) {
  606. $telegram->editMessageText($r);
  607. } else {
  608. $telegram->sendMessage($r);
  609. }
  610. }
  611. }
  612. //解散房间
  613. $pattern = "/^games@@Disband\d+$/";
  614. if (preg_match($pattern, $data)) {
  615. $roomService = new RoomService($telegram);
  616. $roomId = preg_replace('/^games@@Disband/', '', $data);
  617. $res = $roomService->disband($roomId, $chatId, $messageId);
  618. foreach ($res as $r) {
  619. if (isset($r['message_id'])) {
  620. $telegram->editMessageText($r);
  621. } else {
  622. $telegram->sendMessage($r);
  623. }
  624. }
  625. }
  626. //退出房间
  627. $pattern = "/^games@@exit\d+$/";
  628. if (preg_match($pattern, $data)) {
  629. $roomService = new RoomService($telegram);
  630. $res = $roomService->exit($data, $chatId, $messageId);
  631. if (isset($res['message_id'])) $telegram->editMessageText($res);
  632. else $telegram->sendMessage($res);
  633. }
  634. //人员/状态
  635. $pattern = "/^games@@status\d+$/";
  636. if (preg_match($pattern, $data)) {
  637. $roomId = preg_replace('/^games@@status/', '', $data);
  638. $roomService = new RoomService($telegram);
  639. $res = $roomService->userStatus($roomId, $chatId, $messageId);
  640. if (isset($res['message_id'])) $telegram->editMessageText($res);
  641. else $telegram->sendMessage($res);
  642. }
  643. //准备
  644. $pattern = "/^games@@ready\d+$/";
  645. if (preg_match($pattern, $data)) {
  646. $roomId = preg_replace('/^games@@ready/', '', $data);
  647. $res = (new RoomService($telegram))->ready($roomId, $chatId, $messageId);
  648. foreach ($res as $r) {
  649. if (isset($r['message_id'])) {
  650. $telegram->editMessageText($r);
  651. } else {
  652. $telegram->sendMessage($r);
  653. }
  654. }
  655. }
  656. //结算游戏
  657. $pattern = "/^games@@settle\d+$/";
  658. if (preg_match($pattern, $data)) {
  659. $roomId = preg_replace('/^games@@settle/', '', $data);
  660. $res = (new SettlementService())->settle($roomId, $chatId, $messageId);
  661. if (isset($res['message_id'])) $telegram->editMessageText($res);
  662. else $telegram->sendMessage($res);
  663. }
  664. //在线房间,下一页
  665. $pattern = "/^onlineNextPage@@\d+$/";
  666. if (preg_match($pattern, $data)) {
  667. $page = preg_replace('/^onlineNextPage@@/', '', $data);
  668. $page = intval($page);
  669. $res = (new OnLineService())->getList($chatId, $messageId, $page);
  670. $telegram->editMessageText($res);
  671. }
  672. //我的战绩,下一页
  673. $pattern = "/^recordNextPage@@\d+$/";
  674. if (preg_match($pattern, $data)) {
  675. $page = preg_replace('/^recordNextPage@@/', '', $data);
  676. $page = intval($page);
  677. $res = (new RecordService())->getList($chatId, $firstName, $messageId, $page);
  678. $telegram->editMessageText($res);
  679. }
  680. //加入房间
  681. $pattern = "/^join@@\d+$/";
  682. if (preg_match($pattern, $data)) {
  683. $roomId = preg_replace('/^join@@/', '', $data);
  684. $res = (new RoomService($telegram))->join($chatId, $roomId, $messageId);
  685. foreach ($res as $r) {
  686. if (isset($r['message_id'])) {
  687. $telegram->editMessageText($r);
  688. } else {
  689. $telegram->sendMessage($r);
  690. }
  691. }
  692. }
  693. //输入房间号加入房间
  694. if ($data === 'join@@room') {
  695. $res = OnLineService::joinRoom($chatId, $messageId);
  696. $telegram->editMessageText($res);
  697. }
  698. //通过频道加入房间
  699. $pattern = "/^channelJoin@@\d+$/";
  700. if (preg_match($pattern, $data)) {
  701. $roomId = preg_replace('/^channelJoin@@/', '', $data);
  702. $res = (new RoomService($telegram))->join($from->id, $roomId);
  703. foreach ($res as $r) {
  704. if (isset($r['message_id'])) {
  705. $telegram->editMessageText($r);
  706. } else {
  707. $telegram->sendMessage($r);
  708. }
  709. }
  710. }
  711. DB::commit();
  712. } //
  713. catch (MessageException $e) {
  714. DB::rollBack();
  715. $msg = $e->getMessage();
  716. $msg = json_decode($msg, true);
  717. $telegram->sendMessage($msg);
  718. } //
  719. catch (TelegramSDKException $e) {
  720. DB::rollBack();
  721. $m = new Message();
  722. $m->json = $e->getMessage();
  723. $m->save();
  724. $telegram->sendMessage([
  725. 'chat_id' => $chatId,
  726. 'text' => '‼️‼️系统发生了错误,请联系客服'
  727. ]);
  728. }//
  729. catch (\Exception $e) {
  730. DB::rollBack();
  731. $m = new Message();
  732. $m->json = json_encode([
  733. 'line' => $e->getLine(),
  734. 'message' => $e->getMessage()
  735. ]);
  736. $m->save();
  737. $telegram->sendMessage([
  738. 'chat_id' => $chatId,
  739. 'text' => '‼️‼️系统发生了错误,请联系客服'
  740. ]);
  741. }
  742. } //
  743. else {
  744. $update = $request->all();
  745. if (isset($update['message'])) {
  746. $message = $update['message'];
  747. $chatId = $message['chat']['id'];
  748. $messageId = $message['message_id'];
  749. DB::beginTransaction();
  750. try {
  751. $m = new Message();
  752. $m->json = json_encode($update);
  753. $m->save();
  754. $user = User::where('member_id', $chatId)->first();
  755. if (!$user) {
  756. $user = new User();
  757. $user->member_id = $chatId;
  758. }
  759. $user->first_name = $message['chat']['first_name'];
  760. $user->save();
  761. //给每个用户生成一个专属的USDT钱包
  762. WalletService::getUserWallet($chatId);
  763. //用户发送图片,结算截图
  764. if (isset($message['photo'])) {
  765. $stepStatus = Cache::get(get_step_key($chatId), -1);
  766. $stepStatus = intval($stepStatus);
  767. //结算截图
  768. if ($stepStatus === StepStatus::INPUT_IMAGE) {
  769. $photo = $message['photo'][count($message['photo']) - 1];
  770. $res = (new SettlementService())->photo($photo, $chatId);
  771. if ($res) $telegram->sendMessage($res);
  772. }//
  773. //充值截图
  774. else if ($stepStatus === StepStatus::INPUT_TOP_UP_IMAGE) {
  775. $photo = $message['photo'][count($message['photo']) - 1];
  776. $res = TopUpService::photo($chatId, $photo);
  777. if (isset($res['message_id'])) $telegram->editMessageText($res);
  778. else $telegram->sendMessage($res);
  779. }
  780. } //用户发送了消息
  781. else if (isset($message['text'])) {
  782. $text = $message['text'];
  783. if ($message['chat']['type'] === 'private') {
  784. switch ($text) {
  785. //教程帮助
  786. case "/tutorial":
  787. Util::delCache($chatId);
  788. $res = (new TutorialService())->index($chatId);
  789. $telegram->sendMessage($res);
  790. break;
  791. //提现管理
  792. case "/withdraw":
  793. Util::delCache($chatId);
  794. $res = WithdrawService::index($chatId, $message['chat']['first_name']);
  795. $telegram->sendMessage($res);
  796. break;
  797. //我的战绩
  798. case "/record":
  799. Util::delCache($chatId);
  800. $res = (new RecordService())->getList($chatId, $message['chat']['first_name']);
  801. $telegram->sendMessage($res);
  802. break;
  803. //充值管理
  804. case "/topup":
  805. Util::delCache($chatId);
  806. $res = (new TopUpService())->index($chatId, $message['chat']['first_name']);
  807. $telegram->sendMessage($res);
  808. break;
  809. //在线房间
  810. case"/online":
  811. Util::delCache($chatId);
  812. $data = (new OnLineService())->getList($chatId, null, 1);
  813. $telegram->sendMessage($data);
  814. break;
  815. //创建房间
  816. case "/room":
  817. Util::delCache($chatId);
  818. $roomService = new RoomService($telegram);
  819. $res = $roomService->create($chatId);
  820. $telegram->sendMessage($res);
  821. break;
  822. case "/start":
  823. Util::delCache($chatId);
  824. $user = User::where('member_id', $chatId)->first();
  825. if (!$user) {
  826. $user = new User();
  827. $user->member_id = $chatId;
  828. }
  829. $user->first_name = $message['chat']['first_name'];
  830. $user->save();
  831. //给每个用户生成一个专属的USDT钱包
  832. WalletService::getUserWallet($chatId);
  833. $username = config('services.telegram.username');
  834. $telegram->sendMessage(['chat_id' => $chatId, 'text' => "🎉欢迎使用 @{$username}"]);
  835. break;
  836. default:
  837. $stepStatus = Cache::get(get_step_key($chatId), -1);
  838. $stepStatus = intval($stepStatus);
  839. switch ($stepStatus) {
  840. case StepStatus::INPUT_GAME_INTRODUCTION:
  841. $res = (new RoomService($telegram))->setIntroduction($chatId, $text, $messageId);
  842. if (isset($res['message_id'])) $telegram->editMessageText($res);
  843. else $telegram->sendMessage($res);
  844. break;
  845. case StepStatus::INPUT_TOP_UP_MONEY:
  846. $res = TopUpService::inputAmount($chatId, $text, $messageId);
  847. if (isset($res['message_id'])) $telegram->editMessageText($res);
  848. else $telegram->sendMessage($res);
  849. break;
  850. case StepStatus::INPUT_JOIN_ROOM_ID:
  851. $res = OnLineService::join($chatId, $text, $messageId);
  852. foreach ($res as $r) {
  853. if (isset($r['message_id'])) $telegram->editMessageText($r);
  854. else $telegram->sendMessage($r);
  855. }
  856. break;
  857. case StepStatus::INPUT_ADDRESS_ALIAS:
  858. $res = WithdrawService::inputAlias($chatId, $text, $messageId);
  859. $telegram->sendMessage($res);
  860. break;
  861. case StepStatus::INPUT_ADDRESS_TRC20:
  862. $res = WithdrawService::inputAddress($chatId, $text, $messageId);
  863. $telegram->sendMessage($res);
  864. break;
  865. case StepStatus::INPUT_WITHDRAW_MONEY:
  866. $res = (new WithdrawService())->inputAmount($chatId, $text, $messageId);
  867. foreach ($res as $r) $telegram->sendMessage($r);
  868. break;
  869. case StepStatus::INPUT_TOP_UP_IMAGE:
  870. $telegram->sendMessage([
  871. 'chat_id' => $chatId,
  872. 'text' => "输入错误,请上传充值截图!",
  873. 'reply_to_message_id' => $messageId
  874. ]);
  875. break;
  876. case StepStatus::INPUT_IMAGE:
  877. $telegram->sendMessage([
  878. 'chat_id' => $chatId,
  879. 'text' => "输入错误,请上传战绩截图!",
  880. 'reply_to_message_id' => $messageId
  881. ]);
  882. break;
  883. //输入结算分数
  884. case StepStatus::INPUT_SCORE:
  885. $res = (new SettlementService())->submitSettle($chatId, $text, $messageId);
  886. foreach ($res['data'] as $r) $telegram->sendMessage($r);
  887. break;
  888. //输入游戏名称
  889. case StepStatus::INPUT_GAME_NAME:
  890. $gameName = $text;
  891. $roomService = new RoomService($telegram);
  892. $res = $roomService->setGameName($chatId, $gameName, $messageId);
  893. if (isset($res['message_id'])) $telegram->editMessageText($res);
  894. else $telegram->sendMessage($res);
  895. break;
  896. //输入房间号
  897. case StepStatus::INPUT_ROOM_ID:
  898. $roomId = $text;
  899. $roomService = new RoomService($telegram);
  900. $res = $roomService->setNum($chatId, $roomId, $messageId);
  901. if (isset($res['message_id'])) $telegram->editMessageText($res);
  902. else $telegram->sendMessage($res);
  903. break;
  904. //输入是否允许中途加入
  905. case StepStatus::INPUT_MIDWAY:
  906. $midway = $text;
  907. $roomService = new RoomService($telegram);
  908. $res = $roomService->setGameMidway($chatId, $midway, $messageId);
  909. if (isset($res['message_id'])) $telegram->editMessageText($res);
  910. else $telegram->sendMessage($res);
  911. break;
  912. //输入 人数/局数
  913. case StepStatus::INPUT_ROOM_NUM:
  914. $array = explode('/', $text);
  915. $roomService = new RoomService($telegram);
  916. $res = $roomService->setNumberOfGames($chatId, $array, $messageId);
  917. if (isset($res['message_id'])) $telegram->editMessageText($res);
  918. else $telegram->sendMessage($res);
  919. break;
  920. //输入 游戏ID
  921. case StepStatus::INPUT_GAME_ID:
  922. $gameId = $text;
  923. $rs = new RoomService($telegram);
  924. $res = $rs->setGameID($chatId, $gameId, $messageId);
  925. foreach ($res as $r) {
  926. if (isset($r['message_id'])) $telegram->editMessageText($r);
  927. else $telegram->sendMessage($r);
  928. }
  929. break;
  930. break;
  931. default:
  932. Util::delCache($chatId);
  933. $res = (new TutorialService())->index($chatId);
  934. $telegram->sendMessage($res);
  935. break;
  936. }
  937. break;
  938. }
  939. }
  940. }
  941. DB::commit();
  942. } //
  943. catch (MessageException $e) {
  944. DB::rollBack();
  945. $m = new Message();
  946. $m->json = $e->getMessage();
  947. $m->save();
  948. try {
  949. $msg = $e->getMessage();
  950. $msg = json_decode($msg, true);
  951. $telegram->sendMessage($msg);
  952. } catch (TelegramSDKException $e) {
  953. }
  954. } //
  955. catch (TelegramSDKException $e) {
  956. DB::rollBack();
  957. $m = new Message();
  958. $m->json = $e->getMessage();
  959. $m->save();
  960. $telegram->sendMessage([
  961. 'chat_id' => $chatId,
  962. 'text' => '‼️‼️系统发生了错误,请联系客服'
  963. ]);
  964. }//
  965. catch (\Exception $e) {
  966. DB::rollBack();
  967. $m = new Message();
  968. $m->json = $e->getMessage();
  969. $m->save();
  970. $telegram->sendMessage([
  971. 'chat_id' => $chatId,
  972. 'text' => '‼️‼️系统发生了错误,请联系客服'
  973. ]);
  974. }
  975. }
  976. }
  977. return response()->json(['status' => 'ok']);
  978. }
  979. }