mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-20 13:47:15 +08:00
加入时间管理模块,使用md5验证实现热加载config.json变化
This commit is contained in:
@@ -12,6 +12,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|||||||
from common.log import logger
|
from common.log import logger
|
||||||
from common.tmp_dir import TmpDir
|
from common.tmp_dir import TmpDir
|
||||||
from config import conf
|
from config import conf
|
||||||
|
from common.time_check import time_checker
|
||||||
import requests
|
import requests
|
||||||
import io
|
import io
|
||||||
import time
|
import time
|
||||||
@@ -66,6 +67,8 @@ class WechatChannel(Channel):
|
|||||||
else:
|
else:
|
||||||
self._do_send_text(query, from_user_id)
|
self._do_send_text(query, from_user_id)
|
||||||
|
|
||||||
|
|
||||||
|
@time_checker
|
||||||
def handle_text(self, msg):
|
def handle_text(self, msg):
|
||||||
logger.debug("[WX]receive text msg: " + json.dumps(msg, ensure_ascii=False))
|
logger.debug("[WX]receive text msg: " + json.dumps(msg, ensure_ascii=False))
|
||||||
content = msg['Text']
|
content = msg['Text']
|
||||||
@@ -109,6 +112,7 @@ class WechatChannel(Channel):
|
|||||||
thread_pool.submit(self._do_send_text, content, to_user_id)
|
thread_pool.submit(self._do_send_text, content, to_user_id)
|
||||||
|
|
||||||
|
|
||||||
|
@time_checker
|
||||||
def handle_group(self, msg):
|
def handle_group(self, msg):
|
||||||
logger.debug("[WX]receive group msg: " + json.dumps(msg, ensure_ascii=False))
|
logger.debug("[WX]receive group msg: " + json.dumps(msg, ensure_ascii=False))
|
||||||
group_name = msg['User'].get('NickName', None)
|
group_name = msg['User'].get('NickName', None)
|
||||||
|
|||||||
72
common/time_check.py
Normal file
72
common/time_check.py
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import time,re,hashlib
|
||||||
|
from config import load_config,md5,conf
|
||||||
|
import config
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_md5(file_name):
|
||||||
|
"""
|
||||||
|
计算文件的md5
|
||||||
|
:param file_name:
|
||||||
|
:return m.hexdigest():
|
||||||
|
"""
|
||||||
|
m = hashlib.md5() #创建md5对象
|
||||||
|
with open(file_name,'rb') as fobj:
|
||||||
|
while True:
|
||||||
|
data = fobj.read(1024)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
m.update(data) #更新md5对象
|
||||||
|
|
||||||
|
return m.hexdigest() #返回md5值
|
||||||
|
|
||||||
|
|
||||||
|
def time_checker(f):
|
||||||
|
# print(args[0]())
|
||||||
|
def wrapTheFunction(self, *args, **kwargs):
|
||||||
|
global md5 # 从config.py拿来一个全局变量md5 默认是False
|
||||||
|
if md5 == None:
|
||||||
|
_config = conf()
|
||||||
|
elif md5 == get_file_md5("./config.json"):
|
||||||
|
_config = conf()
|
||||||
|
# chat_time_module = _config["chat_time_module"]
|
||||||
|
# chat_start_time = _config["chat_start_time"]
|
||||||
|
# chat_stopt_time = _config["chat_stop_time"]
|
||||||
|
else:
|
||||||
|
print("检测到配置文件变化")
|
||||||
|
_config = load_config() # 启动时间支持热更改 修改config.json文件后即可生效
|
||||||
|
md5 = get_file_md5("./config.json")
|
||||||
|
# config.md5 = get_file_md5("./config.json")
|
||||||
|
|
||||||
|
chat_time_module = _config["chat_time_module"]
|
||||||
|
chat_start_time = _config["chat_start_time"]
|
||||||
|
chat_stopt_time = _config["chat_stop_time"]
|
||||||
|
# print(md5,chat_time_module,chat_start_time,chat_stopt_time)
|
||||||
|
|
||||||
|
if chat_time_module:
|
||||||
|
time_regex = re.compile(r'^([01]?[0-9]|2[0-4])(:)([0-5][0-9])$') #时间匹配,包含24:00
|
||||||
|
|
||||||
|
starttime_format_check = time_regex.match(chat_start_time) # 检查停止时间格式
|
||||||
|
stoptime_format_check = time_regex.match(chat_stopt_time) # 检查停止时间格式
|
||||||
|
chat_time_check = chat_start_time < chat_stopt_time # 确定启动时间<停止时间
|
||||||
|
|
||||||
|
if starttime_format_check and stoptime_format_check and chat_time_check:
|
||||||
|
# print('服务启动时间:{}'.format(CHAT_START_TIME))
|
||||||
|
# print('服务结束时间:{}'.format(CHAT_STOP_TIME))
|
||||||
|
if chat_start_time>"23:59":
|
||||||
|
print('启动时间可能存在问题,请修改')
|
||||||
|
else:
|
||||||
|
print("时间格式不正确,请在config.json中修改您的CHAT_START_TIME/CHAT_STOP_TIME,否则可能会影响您正常使用,程序正在自动退出")
|
||||||
|
|
||||||
|
now_time = time.strftime("%H:%M", time.localtime())
|
||||||
|
if chat_start_time <= now_time <= chat_stopt_time:
|
||||||
|
# print("在服务时间内")
|
||||||
|
# 正常请求并返回
|
||||||
|
f(self, *args, **kwargs)
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
print('不在服务时间内,禁止访问')
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
f(self, *args, **kwargs)
|
||||||
|
return wrapTheFunction
|
||||||
|
|
||||||
@@ -11,6 +11,9 @@
|
|||||||
"voice_reply_voice": false,
|
"voice_reply_voice": false,
|
||||||
"conversation_max_tokens": 1000,
|
"conversation_max_tokens": 1000,
|
||||||
"expires_in_seconds": 3600,
|
"expires_in_seconds": 3600,
|
||||||
"character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。"
|
"character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
|
||||||
|
"chat_time_module": false,
|
||||||
|
"chat_start_time": "00:00",
|
||||||
|
"chat_stop_time": "24:00"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import os
|
|||||||
from common.log import logger
|
from common.log import logger
|
||||||
|
|
||||||
config = {}
|
config = {}
|
||||||
|
md5 = None
|
||||||
|
|
||||||
def load_config():
|
def load_config():
|
||||||
global config
|
global config
|
||||||
@@ -17,6 +17,7 @@ def load_config():
|
|||||||
# 将json字符串反序列化为dict类型
|
# 将json字符串反序列化为dict类型
|
||||||
config = json.loads(config_str)
|
config = json.loads(config_str)
|
||||||
logger.info("[INIT] load config: {}".format(config))
|
logger.info("[INIT] load config: {}".format(config))
|
||||||
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user