TelegramWebHook.php 49 KB

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