Remove legacy test script and enhance main application with WeChat server and menu management features. Added commands for starting the WeChat callback server and managing WeChat menus, along with necessary imports and error handling. Updated requirements to include Flask for the WeChat server functionality.
This commit is contained in:
+120
-1
@@ -23,6 +23,8 @@ try:
|
||||
from .storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage, cleanup_storage
|
||||
from .storage.md_generator import generate_onu_md
|
||||
from .notification.wechat import send_announcements_notification, send_system_notification
|
||||
from .wechat.callback_server import get_callback_server
|
||||
from .wechat.menu_manager import WeChatMenuManager
|
||||
except ImportError:
|
||||
try:
|
||||
# 尝试绝对导入(直接运行脚本时)
|
||||
@@ -34,6 +36,14 @@ except ImportError:
|
||||
from storage.postgresql import init_storage, save_announcements_to_storage, save_all_announcements_by_source_to_storage, cleanup_storage
|
||||
from storage.md_generator import generate_onu_md
|
||||
from notification.wechat import send_announcements_notification, send_system_notification
|
||||
# 企业微信模块动态导入,避免循环导入问题
|
||||
wechat_available = True
|
||||
try:
|
||||
from wechat.callback_server import get_callback_server
|
||||
from wechat.menu_manager import WeChatMenuManager
|
||||
except ImportError:
|
||||
wechat_available = False
|
||||
print("企业微信模块不可用", file=sys.stderr)
|
||||
except ImportError as e:
|
||||
print(f"导入错误: {e}", file=sys.stderr)
|
||||
print("请确保依赖已正确安装: pip install -r requirements.txt", file=sys.stderr)
|
||||
@@ -164,6 +174,61 @@ class GXGPMonitorApp:
|
||||
logger.error(f"数据清理任务执行失败: {str(e)}")
|
||||
return {"success": False, "error": str(e)}
|
||||
|
||||
def run_wechat_server(self, host: str = '0.0.0.0', port: int = 18001):
|
||||
"""启动企业微信回调服务器"""
|
||||
if not wechat_available:
|
||||
return {"success": False, "error": "企业微信模块不可用"}
|
||||
|
||||
try:
|
||||
logger.info("启动企业微信回调服务器")
|
||||
|
||||
# 获取回调服务器
|
||||
callback_server = get_callback_server()
|
||||
|
||||
# 启动服务器
|
||||
callback_server.run(host=host, port=port, debug=self.config.debug)
|
||||
|
||||
return {"success": True, "host": host, "port": port}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"启动企业微信回调服务器失败: {str(e)}")
|
||||
return {"success": False, "error": str(e)}
|
||||
|
||||
def manage_wechat_menu(self, action: str) -> Dict[str, Any]:
|
||||
"""管理企业微信菜单"""
|
||||
if not wechat_available:
|
||||
return {"success": False, "error": "企业微信模块不可用"}
|
||||
|
||||
try:
|
||||
logger.info(f"执行企业微信菜单操作: {action}")
|
||||
|
||||
menu_manager = WeChatMenuManager()
|
||||
|
||||
if action == 'create':
|
||||
success = menu_manager.create_menu()
|
||||
result = {"success": success, "action": "create"}
|
||||
elif action == 'delete':
|
||||
success = menu_manager.delete_menu()
|
||||
result = {"success": success, "action": "delete"}
|
||||
elif action == 'get':
|
||||
menu_info = menu_manager.get_menu()
|
||||
result = {"success": menu_info is not None, "action": "get", "menu": menu_info}
|
||||
elif action == 'test':
|
||||
test_results = menu_manager.test_menu_operations()
|
||||
result = {"success": True, "action": "test", "results": test_results}
|
||||
else:
|
||||
result = {"success": False, "error": f"未知操作: {action}"}
|
||||
|
||||
if result["success"]:
|
||||
logger.info(f"企业微信菜单操作成功: {action}")
|
||||
else:
|
||||
logger.error(f"企业微信菜单操作失败: {action}")
|
||||
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"企业微信菜单管理异常: {str(e)}")
|
||||
return {"success": False, "error": str(e)}
|
||||
|
||||
def show_status(self):
|
||||
"""显示系统状态"""
|
||||
@@ -212,12 +277,14 @@ def create_argument_parser():
|
||||
python main.py crawl --keywords "大化" # 爬取指定关键词
|
||||
python main.py cleanup # 执行数据清理
|
||||
python main.py status # 查看系统状态
|
||||
python main.py wechat-server # 启动企业微信回调服务器
|
||||
python main.py wechat-menu --action create # 创建企业微信菜单
|
||||
"""
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'command',
|
||||
choices=['crawl', 'cleanup', 'status'],
|
||||
choices=['crawl', 'cleanup', 'status', 'wechat-server', 'wechat-menu'],
|
||||
help='要执行的命令'
|
||||
)
|
||||
|
||||
@@ -252,6 +319,28 @@ def create_argument_parser():
|
||||
help='清理多少天前的过期数据'
|
||||
)
|
||||
|
||||
# wechat-server命令的参数
|
||||
parser.add_argument(
|
||||
'--host', '-H',
|
||||
default='0.0.0.0',
|
||||
help='服务器监听主机地址 (默认: 0.0.0.0)'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--port', '-P',
|
||||
type=int,
|
||||
default=18001,
|
||||
help='服务器监听端口 (默认: 18001)'
|
||||
)
|
||||
|
||||
# wechat-menu命令的参数
|
||||
parser.add_argument(
|
||||
'--action', '-a',
|
||||
choices=['create', 'delete', 'get', 'test'],
|
||||
default='create',
|
||||
help='菜单操作类型 (默认: create)'
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
@@ -302,6 +391,36 @@ def main():
|
||||
# 显示状态
|
||||
app.show_status()
|
||||
|
||||
elif args.command == 'wechat-server':
|
||||
# 启动企业微信回调服务器
|
||||
result = app.run_wechat_server(host=args.host, port=args.port)
|
||||
if result["success"]:
|
||||
print(f"✅ 企业微信回调服务器已启动: {result['host']}:{result['port']}")
|
||||
print(" 回调地址: /api/v1/wechat/callback")
|
||||
else:
|
||||
print(f"❌ 企业微信回调服务器启动失败: {result.get('error', '未知错误')}")
|
||||
sys.exit(1)
|
||||
|
||||
elif args.command == 'wechat-menu':
|
||||
# 企业微信菜单管理
|
||||
result = app.manage_wechat_menu(action=args.action)
|
||||
if result["success"]:
|
||||
if args.action == 'create':
|
||||
print("✅ 企业微信菜单创建成功")
|
||||
elif args.action == 'delete':
|
||||
print("✅ 企业微信菜单删除成功")
|
||||
elif args.action == 'get':
|
||||
print("✅ 企业微信菜单获取成功")
|
||||
if result.get("menu"):
|
||||
print("菜单信息:", json.dumps(result["menu"], indent=2, ensure_ascii=False))
|
||||
elif args.action == 'test':
|
||||
print("✅ 企业微信菜单测试完成")
|
||||
print("测试结果:", result.get("results"))
|
||||
else:
|
||||
error = result.get("error", "未知错误")
|
||||
print(f"❌ 企业微信菜单操作失败: {error}")
|
||||
sys.exit(1)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
logger.info("收到中断信号,正在退出...")
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user