mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-01-19 01:21:01 +08:00
72 lines
1.7 KiB
Python
72 lines
1.7 KiB
Python
# encoding:utf-8
|
|
|
|
import os
|
|
import signal
|
|
import sys
|
|
import time
|
|
|
|
from channel import channel_factory
|
|
from common import const
|
|
from config import load_config
|
|
from plugins import *
|
|
import threading
|
|
|
|
|
|
def sigterm_handler_wrap(_signo):
|
|
old_handler = signal.getsignal(_signo)
|
|
|
|
def func(_signo, _stack_frame):
|
|
logger.info("signal {} received, exiting...".format(_signo))
|
|
conf().save_user_datas()
|
|
if callable(old_handler): # check old_handler
|
|
return old_handler(_signo, _stack_frame)
|
|
sys.exit(0)
|
|
|
|
signal.signal(_signo, func)
|
|
|
|
|
|
def start_channel(channel_name: str):
|
|
channel = channel_factory.create_channel(channel_name)
|
|
if channel_name in ["wx", "wxy", "terminal", "wechatmp", "web", "wechatmp_service", "wechatcom_app", "wework",
|
|
const.FEISHU, const.DINGTALK]:
|
|
PluginManager().load_plugins()
|
|
|
|
if conf().get("use_linkai"):
|
|
try:
|
|
from common import linkai_client
|
|
threading.Thread(target=linkai_client.start, args=(channel,)).start()
|
|
except Exception as e:
|
|
pass
|
|
channel.startup()
|
|
|
|
|
|
def run():
|
|
try:
|
|
# load config
|
|
load_config()
|
|
# ctrl + c
|
|
sigterm_handler_wrap(signal.SIGINT)
|
|
# kill signal
|
|
sigterm_handler_wrap(signal.SIGTERM)
|
|
|
|
# create channel
|
|
channel_name = conf().get("channel_type", "wx")
|
|
|
|
if "--cmd" in sys.argv:
|
|
channel_name = "terminal"
|
|
|
|
if channel_name == "wxy":
|
|
os.environ["WECHATY_LOG"] = "warn"
|
|
|
|
start_channel(channel_name)
|
|
|
|
while True:
|
|
time.sleep(1)
|
|
except Exception as e:
|
|
logger.error("App startup failed!")
|
|
logger.exception(e)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run()
|