From 020c8da4262dc4534ede3288c26cdc3425a48c16 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Sat, 9 Nov 2024 17:18:57 +0800 Subject: [PATCH] update --- web/admin/setting/__init__.py | 1 + web/admin/setting/notify_tgbot.py | 85 ++++++++++++++++++++++++++++++ web/admin/setup/option.py | 4 +- web/core/mw.py | 29 ++++++++++ web/static/app/config.js | 27 ++++++---- web/templates/default/setting.html | 4 +- web/utils/config.py | 1 + 7 files changed, 139 insertions(+), 12 deletions(-) create mode 100644 web/admin/setting/notify_tgbot.py diff --git a/web/admin/setting/__init__.py b/web/admin/setting/__init__.py index c516d49bf..8e01f4bc0 100644 --- a/web/admin/setting/__init__.py +++ b/web/admin/setting/__init__.py @@ -13,6 +13,7 @@ from .temp_login import * from .timezone import * from .secondary_verifiy import * from .notify_email import * +from .notify_tgbot import * diff --git a/web/admin/setting/notify_tgbot.py b/web/admin/setting/notify_tgbot.py new file mode 100644 index 000000000..f3bc11a5d --- /dev/null +++ b/web/admin/setting/notify_tgbot.py @@ -0,0 +1,85 @@ +# coding:utf-8 + +# --------------------------------------------------------------------------------- +# MW-Linux面板 +# --------------------------------------------------------------------------------- +# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. +# --------------------------------------------------------------------------------- +# Author: midoks +# --------------------------------------------------------------------------------- + +import re +import json +import os +import time + +from flask import Blueprint, render_template +from flask import request + +from admin import session +from admin.user_login_check import panel_login_required + +import core.mw as mw +import utils.config as utils_config + +from .setting import blueprint +import thisdb + +# 获取邮件信息 +@blueprint.route('/get_notify_tgbot', endpoint='get_notify_tgbot', methods=['POST']) +@panel_login_required +def get_notify_tgbot(): + notify_tgbot = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify') + if 'cfg' in notify_tgbot: + decrypt_data = mw.deDoubleCrypt('tgbot', notify_tgbot['cfg']) + notify_tgbot['tgbot'] = json.loads(decrypt_data) + else: + notify_tgbot['tgbot'] = [] + return mw.returnData(True,'ok',notify_tgbot) + + +# 设置邮件信息 +@blueprint.route('/set_notify_tgbot', endpoint='set_notify_tgbot', methods=['POST']) +@panel_login_required +def set_notify_tgbot(): + data = request.form.get('data', '').strip() + + crypt_data = mw.enDoubleCrypt('tgbot', data) + + notify_tgbot = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify') + notify_tgbot['cfg'] = crypt_data + + thisdb.setOption('notify_tgbot', json.dumps(notify_tgbot), type='notify') + return mw.returnData(True,'设置成功') + + +# 设置邮件测试 +@blueprint.route('/set_notify_tgbot_test', endpoint='set_notify_tgbot_test', methods=['POST']) +@panel_login_required +def set_notify_tgbot_test(): + tag_data = request.form.get('data', '').strip() + + tmp = json.loads(tag_data) + test_pass = mw.tgbotNotifyTest(tmp['app_token'], tmp['chat_id']) + if test_pass == True: + return mw.returnData(True, '验证成功') + return mw.returnData(False, '验证失败:'+test_pass) + +# 切换邮件开关 +@blueprint.route('/set_notify_tgbot_enable', endpoint='set_notify_tgbot_enable', methods=['POST']) +@panel_login_required +def set_notify_tgbot_enable(): + tag = request.form.get('tag', '').strip() + data = request.form.get('data', '').strip() + + notify_tgbot = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify') + + if notify_tgbot['open']: + op_action = '关闭' + notify_tgbot['open'] = False + else: + op_action = '开启' + notify_tgbot['open'] = True + + thisdb.setOption('notify_tgbot', json.dumps(notify_tgbot), type='notify') + return mw.returnData(True, op_action+'成功') \ No newline at end of file diff --git a/web/admin/setup/option.py b/web/admin/setup/option.py index 8a3439d0d..09968a64d 100644 --- a/web/admin/setup/option.py +++ b/web/admin/setup/option.py @@ -59,7 +59,9 @@ def init_option(): thisdb.setOption('site_path', mw.getFatherDir()+'/wwwroot') - # 邮件通知 + # 异步邮件通知 thisdb.setOption('notify_email', json.dumps({'open':False}), type='notify') + # 异步Telegram Bot 通知 + thisdb.setOption('notify_tgbot', json.dumps({'open':False}), type='notify') return True \ No newline at end of file diff --git a/web/core/mw.py b/web/core/mw.py index 50f6561ff..70f0e391a 100644 --- a/web/core/mw.py +++ b/web/core/mw.py @@ -721,6 +721,34 @@ def writeLog(stype, msg, args=()): # writeFileLog(getTracebackInfo()) return writeDbLog(stype, msg, args, uid) +def writeFileLog(msg, path=None, limit_size=50 * 1024 * 1024, save_limit=3): + log_file = getPanelDir() + '/logs/debug.log' + if path != None: + log_file = path + + if os.path.exists(log_file): + size = os.path.getsize(log_file) + if size > limit_size: + log_file_rename = log_file + "_" + \ + time.strftime("%Y-%m-%d_%H%M%S") + '.log' + os.rename(log_file, log_file_rename) + logs = sorted(glob.glob(log_file + "_*")) + count = len(logs) + save_limit = count - save_limit + for i in range(count): + if i > save_limit: + break + os.remove(logs[i]) + # print('|---多余日志[' + logs[i] + ']已删除!') + + f = open(log_file, 'ab+') + msg += "\n" + if __name__ == '__main__': + print(msg) + f.write(msg.encode('utf-8')) + f.close() + return True + def writeDbLog(stype, msg, args=(), uid=1): try: import thisdb @@ -1220,6 +1248,7 @@ def tgbotNotifyHttpPost(app_token, chat_id, msg): return True except Exception as e: writeFileLog(str(e)) + return str(e) return False diff --git a/web/static/app/config.js b/web/static/app/config.js index c8594eaff..b3c662b9c 100755 --- a/web/static/app/config.js +++ b/web/static/app/config.js @@ -540,10 +540,19 @@ function setPanelSSL(){ }); } -function setNotifyApi(tag, obj){ +function setNotifyTgbot(obj){ var enable = $(obj).prop("checked"); - // console.log(tag,obj,enable); - $.post('/setting/set_notify_email_enable', {'tag':tag, 'enable':enable},function(rdata){ + $.post('/setting/set_notify_tgbot_enable', {'enable':enable},function(rdata){ + showMsg(rdata.msg, function(){ + if (rdata.status){} + } ,{icon:rdata.status?1:2}, 1000); + },'json'); +} + + +function setNotifyEmail(obj){ + var enable = $(obj).prop("checked"); + $.post('/setting/set_notify_email_enable', {'enable':enable},function(rdata){ showMsg(rdata.msg, function(){ if (rdata.status){} } ,{icon:rdata.status?1:2}, 1000); @@ -552,16 +561,16 @@ function setNotifyApi(tag, obj){ function getTgbot(){ var loadT = layer.msg('正在获取TgBot信息...',{icon:16,time:0,shade: [0.3, '#000']}); - $.post('/setting/get_notify',{},function(data){ + $.post('/setting/get_notify_tgbot',{},function(data){ layer.close(loadT); var app_token = ''; var chat_id = ''; if (data.status){ - if (typeof(data['data']['tgbot']) !='undefined'){ - app_token = data['data']['tgbot']['data']['app_token']; - chat_id = data['data']['tgbot']['data']['chat_id']; + if (data['data']['tgbot'].length != 0){ + app_token = data['data']['tgbot']['app_token']; + chat_id = data['data']['tgbot']['chat_id']; } } @@ -598,7 +607,7 @@ function getTgbot(){ return false; } - $.post('/setting/set_notify',{'tag':'tgbot', 'data':JSON.stringify(pdata)},function(rdata){ + $.post('/setting/set_notify_tgbot',{'tag':'tgbot', 'data':JSON.stringify(pdata)},function(rdata){ showMsg(rdata.msg, function(){ if (rdata.status){ layer.close(index); @@ -622,7 +631,7 @@ function getTgbot(){ return false; } - $.post('/setting/set_notify_test',{'tag':'tgbot', 'data':JSON.stringify(pdata)},function(rdata){ + $.post('/setting/set_notify_tgbot_test',{'tag':'tgbot', 'data':JSON.stringify(pdata)},function(rdata){ showMsg(rdata.msg, function(){ if (rdata.status){ layer.close(index); diff --git a/web/templates/default/setting.html b/web/templates/default/setting.html index 1e908c07d..a831407d8 100755 --- a/web/templates/default/setting.html +++ b/web/templates/default/setting.html @@ -164,7 +164,7 @@

TG机器人通知 - + Telegram Bot机器人通知【国内可能无法使用 @@ -172,7 +172,7 @@

邮件通知 - + 邮件通知 diff --git a/web/utils/config.py b/web/utils/config.py index 5d6737b2d..bc8307893 100644 --- a/web/utils/config.py +++ b/web/utils/config.py @@ -82,5 +82,6 @@ def getGlobalVar(): # 邮件通知设置 data['notify_email'] = thisdb.getOptionByJson('notify_email', default={'open':False}, type='notify') + data['notify_tgbot'] = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify') return data \ No newline at end of file