feat: bot

This commit is contained in:
hashbro
2026-08-15 23:05:51 +08:00
parent 9049fdccad
commit 376b442880
26 changed files with 944 additions and 352 deletions
@@ -15,13 +15,33 @@
<div class="layui-input-block">
<input type="text" name="telegram_bot_token" class="layui-input" autocomplete="off"
value="{{ $form['telegram.bot_token'] }}">
<div class="layui-form-mid layui-word-aux" id="LAY-telegram-bot-name">
@if($botUsername)
当前 Bot:<b>{{ $botUsername }}</b>
@if($botInviteUrl)
· <a href="{{ $botInviteUrl }}" target="_blank" rel="noopener">邀请进群</a>
@endif
@else
保存 Token 后会通过 Telegram getMe 自动识别 @用户名,无需手填。
@endif
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Chat ID</label>
<div class="layui-input-block">
<input type="text" name="telegram_owner_chat_id" class="layui-input" autocomplete="off"
value="{{ $form['telegram.owner_chat_id'] }}" placeholder="个人或群组 chat_id">
<div style="display:flex;gap:8px;align-items:center;max-width:640px;">
<input type="text" name="telegram_owner_chat_id" class="layui-input" autocomplete="off"
value="{{ $form['telegram.owner_chat_id'] }}" placeholder="官方通知群 chat_id" style="flex:1;">
<button type="button" class="layui-btn layui-btn-primary" id="LAY-telegram-test" style="flex-shrink:0;">测试推送</button>
</div>
<div class="layui-form-mid layui-word-aux" id="LAY-telegram-chat-hint">
@if($botUsername)
请邀请 <b>{{ $botUsername }}</b> 进群(进群后 Bot 会回复 Chat ID),再填到这里。全站共用这一个 Bot;代理单独推送只需在「代理用户」里填 Chat ID。
@else
全站共用这一个 Bot。此处为官方通知群;代理单独推送只需在「代理用户」里填 Chat ID。保存 Token 后会提示要邀请哪个 Bot。
@endif
</div>
</div>
</div>
@@ -88,6 +108,17 @@ layui.use(['form', 'layer'], function () {
data: Object.assign({}, data.field, { _token: token }),
success: function (res) {
layer.msg(res.msg || (res.code === 0 ? '已保存' : '失败'));
if (res.code === 0 && res.data) {
var name = res.data.bot_username || '';
var url = res.data.bot_invite_url || '';
if (name) {
var invite = url ? ' · <a href="' + url + '" target="_blank" rel="noopener">邀请进群</a>' : '';
$('#LAY-telegram-bot-name').html('当前 Bot:<b>' + name + '</b>' + invite);
$('#LAY-telegram-chat-hint').html('请邀请 <b>' + name + '</b> 进群(进群后 Bot 会回复 Chat ID),再填到这里。全站共用这一个 Bot;代理单独推送只需在「代理用户」里填 Chat ID。');
} else {
$('#LAY-telegram-bot-name').text('保存 Token 后会通过 Telegram getMe 自动识别 @用户名,无需手填。');
}
}
},
error: function (xhr) {
layer.msg((xhr.responseJSON && xhr.responseJSON.message) || '保存失败');
@@ -95,6 +126,30 @@ layui.use(['form', 'layer'], function () {
});
return false;
});
$('#LAY-telegram-test').on('click', function () {
var $btn = $(this);
if ($btn.prop('disabled')) return;
$btn.prop('disabled', true);
$.ajax({
url: @json(route('admin.system.settings.telegramTest')),
method: 'POST',
data: {
_token: token,
chat_id: $('input[name=telegram_owner_chat_id]').val(),
bot_token: $('input[name=telegram_bot_token]').val()
},
success: function (res) {
layer.msg(res.msg || (res.code === 0 ? '已发送' : '失败'));
},
error: function (xhr) {
layer.msg((xhr.responseJSON && xhr.responseJSON.message) || '测试失败');
},
complete: function () {
$btn.prop('disabled', false);
}
});
});
});
</script>
@endpush