mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 09:21:46 +08:00 
			
		
		
		
	feature: add telegram reply ticket
This commit is contained in:
		| @@ -7,6 +7,7 @@ use Illuminate\Http\Request; | |||||||
| use App\Http\Controllers\Controller; | use App\Http\Controllers\Controller; | ||||||
| use App\Models\User; | use App\Models\User; | ||||||
| use App\Utils\Helper; | use App\Utils\Helper; | ||||||
|  | use App\Services\TicketService; | ||||||
|  |  | ||||||
| class TelegramController extends Controller | class TelegramController extends Controller | ||||||
| { | { | ||||||
| @@ -24,14 +25,13 @@ class TelegramController extends Controller | |||||||
|         $this->msg = $this->getMessage($request->input()); |         $this->msg = $this->getMessage($request->input()); | ||||||
|         if (!$this->msg) return; |         if (!$this->msg) return; | ||||||
|         try { |         try { | ||||||
|             switch($this->msg->command) { |             switch($this->msg->message_type) { | ||||||
|                 case '/bind': $this->bind(); |                 case 'send': | ||||||
|  |                     $this->fromSend(); | ||||||
|                     break; |                     break; | ||||||
|                 case '/traffic': $this->traffic(); |                 case 'reply': | ||||||
|  |                     $this->fromReply(); | ||||||
|                     break; |                     break; | ||||||
|                 case '/getlatesturl': $this->getLatestUrl(); |  | ||||||
|                     break; |  | ||||||
|                 default: $this->help(); |  | ||||||
|             } |             } | ||||||
|         } catch (\Exception $e) { |         } catch (\Exception $e) { | ||||||
|             $telegramService = new TelegramService(); |             $telegramService = new TelegramService(); | ||||||
| @@ -39,6 +39,27 @@ class TelegramController extends Controller | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private function fromSend() | ||||||
|  |     { | ||||||
|  |         switch($this->msg->command) { | ||||||
|  |             case '/bind': $this->bind(); | ||||||
|  |                 break; | ||||||
|  |             case '/traffic': $this->traffic(); | ||||||
|  |                 break; | ||||||
|  |             case '/getlatesturl': $this->getLatestUrl(); | ||||||
|  |                 break; | ||||||
|  |             default: $this->help(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function fromReply() | ||||||
|  |     { | ||||||
|  |         // ticket | ||||||
|  |         if (preg_match("/[#](.*)/", $this->msg->reply_text, $match)) { | ||||||
|  |             $this->replayTicket($match[1]); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private function getMessage(array $data) |     private function getMessage(array $data) | ||||||
|     { |     { | ||||||
|         if (!isset($data['message'])) return false; |         if (!isset($data['message'])) return false; | ||||||
| @@ -50,6 +71,11 @@ class TelegramController extends Controller | |||||||
|         $obj->args = array_slice($text, 1); |         $obj->args = array_slice($text, 1); | ||||||
|         $obj->chat_id = $data['message']['chat']['id']; |         $obj->chat_id = $data['message']['chat']['id']; | ||||||
|         $obj->message_id = $data['message']['message_id']; |         $obj->message_id = $data['message']['message_id']; | ||||||
|  |         $obj->message_type = !isset($data['message']['reply_to_message']) ? 'send' : 'reply'; | ||||||
|  |         $obj->text = $data['message']['text']; | ||||||
|  |         if ($obj->message_type === 'reply') { | ||||||
|  |             $obj->reply_text = $data['message']['reply_to_message']['text']; | ||||||
|  |         } | ||||||
|         return $obj; |         return $obj; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -124,4 +150,23 @@ class TelegramController extends Controller | |||||||
|         ); |         ); | ||||||
|         $telegramService->sendMessage($msg->chat_id, $text, 'markdown'); |         $telegramService->sendMessage($msg->chat_id, $text, 'markdown'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private function replayTicket($ticketId) | ||||||
|  |     { | ||||||
|  |         $msg = $this->msg; | ||||||
|  |         $user = User::where('telegram_id', $msg->chat_id)->first(); | ||||||
|  |         if (!$user) { | ||||||
|  |             abort(500, '用户不存在'); | ||||||
|  |         } | ||||||
|  |         $ticketService = new TicketService(); | ||||||
|  |         if ($user->is_admin) { | ||||||
|  |             $ticketService->replyByAdmin( | ||||||
|  |                 $ticketId, | ||||||
|  |                 $msg->text, | ||||||
|  |                 $user->id | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |         $telegramService = new TelegramService(); | ||||||
|  |         $telegramService->sendMessage($msg->chat_id, "#`{$ticketId}` 的工单已回复成功", 'markdown'); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user