| |
|
|
| 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() |
|
|