mirror of https://github.com/dnomd343/tgbot
Dnomd343
3 years ago
2 changed files with 115 additions and 1 deletions
@ -0,0 +1,109 @@ |
|||
<?php |
|||
|
|||
class kmsCheck { |
|||
private $api = 'https://kms.343.re/check?'; |
|||
|
|||
private function isHost($host) { // 判断host是否合法 |
|||
preg_match('/^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/', $host, $match); |
|||
if (count($match) !== 0) { // 域名 |
|||
return true; |
|||
} |
|||
if (filter_var($host, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { // IPv4地址 |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public function check($server) { |
|||
$temp = explode(':', $server); |
|||
if (count($temp) === 1) { // 不带:的请求 |
|||
|
|||
if ($this->isHost($temp[0])) { |
|||
$host = $server; |
|||
$port = 1688; |
|||
} else { |
|||
return array( |
|||
'status' => 'error', |
|||
'message' => 'Illegal host' |
|||
); |
|||
} |
|||
} else if (count($temp) === 2) { // 带一个:的请求 |
|||
if ($this->isHost($temp[0])) { |
|||
$host = $temp[0]; |
|||
} else { |
|||
return array( |
|||
'status' => 'error', |
|||
'message' => 'Illegal host' |
|||
); |
|||
} |
|||
$port = $temp[1]; |
|||
if ($port < 0 || $port > 65535) { |
|||
return array( |
|||
'status' => 'error', |
|||
'message' => 'Illegal port' |
|||
); |
|||
} |
|||
} else { // 带多个:的请求 |
|||
return array( |
|||
'status' => 'error', |
|||
'message' => 'Illegal request' |
|||
); |
|||
} |
|||
return array( |
|||
'status' => 'ok', |
|||
'host' => $host, |
|||
'port' => $port |
|||
); |
|||
} |
|||
|
|||
public function checkKms($host, $port) { |
|||
$server = $host . ':' . $port; |
|||
$url = $this->api . 'host=' . $host . '&port=' . $port; |
|||
$content = json_decode(file_get_contents($url), true); // 请求上游接口 |
|||
switch ($content['status']) { |
|||
case 'ok': |
|||
return array( |
|||
'parse_mode' => 'Markdown', |
|||
'text' => '`' . $server . '`' . PHP_EOL . 'KMS服务*正常运行*' |
|||
); |
|||
case 'error': |
|||
return array( |
|||
'parse_mode' => 'Markdown', |
|||
'text' => '`' . $server . '`' . PHP_EOL . 'KMS服务*无法使用*' |
|||
); |
|||
default: |
|||
return array( |
|||
'text' => 'Server error' |
|||
); |
|||
} |
|||
} |
|||
} |
|||
|
|||
function kmsCheck($rawParam) { // KMS测试入口 |
|||
global $chatId; |
|||
if ($rawParam == '' || $rawParam === 'help') { // 显示使用说明 |
|||
sendMessage($chatId, array( |
|||
'parse_mode' => 'Markdown', |
|||
'text' => '*Usage:* `/kms IP/Domain[:port]`' |
|||
)); |
|||
return; |
|||
} |
|||
$check = (new kmsCheck)->check($rawParam); |
|||
if ($check['status'] === 'error') { // 输入格式有误 |
|||
sendMessage($chatId, array( |
|||
'text' => $check['message'] |
|||
)); |
|||
return; |
|||
} |
|||
$message = json_decode(sendMessage($chatId, array( |
|||
'parse_mode' => 'Markdown', |
|||
'text' => '`' . $rawParam . '`' . PHP_EOL . 'KMS服务检测中...' |
|||
)), true); |
|||
sendPayload(array( |
|||
'method' => 'editMessageText', |
|||
'chat_id' => $chatId, |
|||
'message_id' => $message['result']['message_id'] |
|||
) + (new kmsCheck)->checkKms($check['host'], $check['port'])); // 发起查询并返回结果 |
|||
} |
|||
|
|||
?> |
Loading…
Reference in new issue