26 lines
1.8 KiB
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]);
|
|
}
|
|
}
|