dpl/app/Http/Controllers/V2/Admin/TelegramTicketController.php

26 lines
1.8 KiB
PHP

<?php
namespace App\Http\Controllers\V2\Admin;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\TelegramTicketMessage;
use App\Services\TelegramTickets\TicketBridge;
use Illuminate\Http\Request;
class TelegramTicketController extends Controller {
public function fetch(TicketBridge $bridge){
return $this->success(['settings'=>$bridge->settings(),'bot_configured'=>(bool)admin_setting('telegram_bot_token'),
'bot_enabled'=>(bool)admin_setting('telegram_bot_enable'), 'secure_webhook_configured'=>(bool)admin_setting('telegram_webhook_secret'),
'admins'=>User::where('is_admin',1)->where('banned',0)->get(['id','email','telegram_id'])->map(fn($u)=>['id'=>$u->id,'email'=>$u->email,'bound'=>(bool)$u->telegram_id]),
'delivery_counts'=>TelegramTicketMessage::selectRaw('status, count(*) as total')->groupBy('status')->pluck('total','status')]);
}
public function save(Request $request,TicketBridge $bridge){
$data=$request->validate(['notify_enabled'=>'required|boolean','reply_enabled'=>'required|boolean','receiver_user_ids'=>'present|array|max:20','receiver_user_ids.*'=>'integer|distinct']);
$ids=$data['receiver_user_ids'];if($ids&&User::whereIn('id',$ids)->where('is_admin',1)->where('banned',0)->count()!==count($ids))return $this->fail([422,'接收人必须是有效管理员']);
admin_setting(['telegram_ticket'=>$data]);return $this->success($bridge->settings());
}
public function bindCode(Request $request,TicketBridge $bridge){
$admin=$request->user();if(!$admin||!$admin->is_admin||$admin->banned)return $this->fail([403,'仅管理员可绑定']);
if(!admin_setting('telegram_bot_token'))return $this->fail([422,'请先配置客服机器人']);
return $this->success(['command'=>'/staffbind '.$bridge->bindingCode($admin),'expires_in'=>600]);
}
}