|
|
|
|
|
import os |
|
import signal |
|
import sys |
|
|
|
from channel import channel_factory |
|
from common import const |
|
from config import load_config |
|
from plugins import * |
|
|
|
|
|
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): |
|
return old_handler(_signo, _stack_frame) |
|
sys.exit(0) |
|
|
|
signal.signal(_signo, func) |
|
|
|
|
|
def run(): |
|
try: |
|
|
|
load_config() |
|
|
|
sigterm_handler_wrap(signal.SIGINT) |
|
|
|
sigterm_handler_wrap(signal.SIGTERM) |
|
|
|
|
|
channel_name = conf().get("channel_type", "wx") |
|
|
|
if "--cmd" in sys.argv: |
|
channel_name = "terminal" |
|
|
|
if channel_name == "wxy": |
|
os.environ["WECHATY_LOG"] = "warn" |
|
|
|
|
|
channel = channel_factory.create_channel(channel_name) |
|
if channel_name in ["wx", "wxy", "terminal", "wechatmp", "wechatmp_service", "wechatcom_app", "wework", const.FEISHU]: |
|
PluginManager().load_plugins() |
|
|
|
|
|
channel.startup() |
|
except Exception as e: |
|
logger.error("App startup failed!") |
|
logger.exception(e) |
|
|
|
|
|
if __name__ == "__main__": |
|
run() |
|
|