你知唔知我系靓仔
v免签二二二开
系统更新:支持 Telegram 通知和 API Key 配置
更新内容
本次更新主要增加了以下功能:
-
Telegram 通知支持:
- 系统现在支持通过 Telegram Bot 发送通知消息。
- 当客户端断开连接或重连成功时,系统会自动通过 Telegram Bot 发送通知。
-
API Key 配置:
- 新增了 API Key 的配置选项,用户可以在设置页面中配置 API Key,用于系统与其他服务的集成。
-
客户端状态管理:
- 新增了
is_disconnected
字段,用于记录客户端是否断开连接的状态。
- 新增了
-
数据库结构调整:
- 为了支持新功能,数据库
setting
表中新增了四个字段:telegramBot
、telegramChat
、api_key
和is_disconnected
。
- 为了支持新功能,数据库
实现方法
1. 后端更新
1.1 新增字段查询与保存
在后端的 getSettings
和 saveSetting
函数中,新增了对 telegramBot
、telegramChat
、api_key
和 is_disconnected
字段的处理逻辑。
-
getSettings
函数:- 查询
setting
表中的telegramBot
、telegramChat
、api_key
和is_disconnected
字段,并将其值返回给前端。
$telegramBot = Db::name("setting")->where("vkey", "telegramBot")->find(); $telegramChat = Db::name("setting")->where("vkey", "telegramChat")->find(); $apiKey = Db::name("setting")->where("vkey", "api_key")->find(); $isDisconnected = Db::name("setting")->where("vkey", "is_disconnected")->find();
- 查询
-
saveSetting
函数:- 保存前端提交的
telegramBot
、telegramChat
、api_key
和is_disconnected
字段的值到数据库中。
Db::name("setting")->where("vkey", "telegramBot")->update(array("vvalue" => input("telegramBot"))); Db::name("setting")->where("vkey", "telegramChat")->update(array("vvalue" => input("telegramChat"))); Db::name("setting")->where("vkey", "api_key")->update(array("vvalue" => input("apiKey"))); Db::name("setting")->where("vkey", "is_disconnected")->update(array("vvalue" => input("isDisconnected")));
- 保存前端提交的
1.2 Telegram 通知功能
新增了一个辅助函数 sendTelegramMessage
,用于通过 Telegram Bot 发送消息。
private function sendTelegramMessage($message)
{
$botToken = Db::name("setting")->where("vkey", "telegramBot")->value("vvalue");
$chatId = Db::name("setting")->where("vkey", "telegramChat")->value("vvalue");
if (empty($botToken) || empty($chatId)) {
return false;
}
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendMessage";
$params = [
'chat_id' => $chatId,
'text' => $message,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$responseData = json_decode($response, true);
return isset($responseData['ok']) && $responseData['ok'] === true;
}
在 checkHeartbeat
函数中,调用 sendTelegramMessage
函数发送通知消息。
if ($timeDiff >= 180) {
$telegramMessage = "⚠️ 客户端断开连接\n时间: " . date('Y-m-d H:i:s', $currentTime);
$this->sendTelegramMessage($telegramMessage);
} else {
$telegramMessage = "✅ 客户端重连成功\n时间: " . date('Y-m-d H:i:s', $currentTime);
$this->sendTelegramMessage($telegramMessage);
}
2. 前端更新
2.1 新增输入字段
在前端设置页面中,新增了 telegramBot
、telegramChat
、apiKey
和 isDisconnected
的输入字段。
<div class="layui-form-item">
<label class="layui-form-label">Telegram Bot Token</label>
<div class="layui-input-block">
<input type="text" id="telegramBot" placeholder="请输入 Telegram Bot Token" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Telegram Chat ID</label>
<div class="layui-input-block">
<input type="text" id="telegramChat" placeholder="请输入 Telegram Chat ID" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">API Key</label>
<div class="layui-input-block">
<input type="text" id="apiKey" placeholder="请输入 API Key" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">客户端断开状态</label>
<div class="layui-input-block">
<input type="text" id="isDisconnected" placeholder="客户端断开状态" autocomplete="off" class="layui-input">
</div>
</div>
2.2 更新 JavaScript 逻辑
在 save
和 getstate
函数中,增加了对新增字段的处理逻辑。
-
save
函数:- 获取
telegramBot
、telegramChat
、apiKey
和isDisconnected
的值,并将其提交到后端。
var telegramBot = $("#telegramBot").val(); var telegramChat = $("#telegramChat").val(); var apiKey = $("#apiKey").val(); var isDisconnected = $("#isDisconnected").val(); var postData = { // 其他字段... telegramBot: telegramBot, telegramChat: telegramChat, apiKey: apiKey, isDisconnected: isDisconnected };
- 获取
-
getstate
函数:- 从后端获取
telegramBot
、telegramChat
、apiKey
和isDisconnected
的值,并将其绑定到输入框中。
$("#telegramBot").val(data.data.telegramBot || ''); $("#telegramChat").val(data.data.telegramChat || ''); $("#apiKey").val(data.data.apiKey || ''); $("#isDisconnected").val(data.data.isDisconnected || '');
- 从后端获取
数据库新增字段
为了支持新功能,需要在 setting
表中新增以下字段:
字段名 | 数据类型 | 说明 |
---|---|---|
telegramBot |
VARCHAR | 存储 Telegram Bot Token |
telegramChat |
VARCHAR | 存储 Telegram Chat ID |
api_key |
VARCHAR | 存储 API Key |
is_disconnected |
TINYINT | 存储客户端断开状态 |
SQL 语句
ALTER TABLE `setting` ADD COLUMN `telegramBot` VARCHAR(255) DEFAULT '';
ALTER TABLE `setting` ADD COLUMN `telegramChat` VARCHAR(255) DEFAULT '';
ALTER TABLE `setting` ADD COLUMN `api_key` VARCHAR(255) DEFAULT '';
ALTER TABLE `setting` ADD COLUMN `is_disconnected` TINYINT DEFAULT 0;
使用方法
1. 调用 checkHeartbeat
接口
checkHeartbeat
接口用于检测客户端的心跳状态,并根据状态发送 Telegram 通知。可以通过 curl
命令调用该接口。
请求示例
curl "https://domain/admin/index/checkHeartbeat?api_key=123456"
参数说明
api_key
:必填参数,用于验证请求的合法性。需要在setting
表中配置api_key
的值。
返回结果
-
如果客户端断开连接,返回如下结果:
{ "code": 1, "msg": "客户端断开连接,日志已记录", "data": "1698765432 客户端断开连接" }
-
如果客户端重连成功,返回如下结果:
{ "code": 1, "msg": "客户端重连成功,日志已更新", "data": "1698765600 客户端重连成功" }
-
如果客户端连接正常,返回如下结果:
{ "code": 0, "msg": "客户端连接正常" }
总结
本次更新通过新增 Telegram 通知、API Key 配置和客户端状态管理功能,增强了系统的实时通知能力和扩展性。用户可以在设置页面中配置 Telegram Bot Token、Chat ID 和 API Key,系统会在客户端状态变化时自动发送通知。数据库新增了四个字段以支持这些功能。
通过 curl
命令调用 checkHeartbeat
接口,可以方便地检测客户端状态并触发通知。