diff --git a/astrbot/core/config/default.py b/astrbot/core/config/default.py index ba87ba52..280c841d 100644 --- a/astrbot/core/config/default.py +++ b/astrbot/core/config/default.py @@ -85,6 +85,7 @@ DEFAULT_CONFIG = { "enable": True, "username": "astrbot", "password": "77b90590a8945a7d36c963981a307dc9", + "host": "127.0.0.1", "port": 6185, }, "platform": [], @@ -122,6 +123,7 @@ CONFIG_METADATA_2 = { "enable": False, "appid": "", "secret": "", + "callback_server_host": "0.0.0.0", "port": 6196, }, "aiocqhttp(OneBotv11)": { @@ -146,10 +148,11 @@ CONFIG_METADATA_2 = { "enable": False, "corpid": "", "secret": "", - "port": 6195, "token": "", "encoding_aes_key": "", "api_base_url": "https://qyapi.weixin.qq.com/cgi-bin/", + "callback_server_host": "0.0.0.0", + "port": 6195, }, "lark(飞书)": { "id": "lark", diff --git a/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py b/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py index 56257420..dcd160d2 100644 --- a/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +++ b/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py @@ -15,6 +15,7 @@ class QQOfficialWebhook: self.appid = config["appid"] self.secret = config["secret"] self.port = config.get("port", 6196) + self.callback_server_host = config.get("callback_server_host", "0.0.0.0") if isinstance(self.port, str): self.port = int(self.port) @@ -95,8 +96,9 @@ class QQOfficialWebhook: return {"opcode": 12} async def start_polling(self): + logger.info(f"将在 {self.callback_server_host}:{self.port} 端口启动 QQ 官方机器人 webhook 适配器。") await self.server.run_task( - host="0.0.0.0", + host=self.callback_server_host, port=self.port, shutdown_trigger=self.shutdown_trigger_placeholder, ) diff --git a/astrbot/core/platform/sources/wecom/wecom_adapter.py b/astrbot/core/platform/sources/wecom/wecom_adapter.py index 77eae03d..4237c2eb 100644 --- a/astrbot/core/platform/sources/wecom/wecom_adapter.py +++ b/astrbot/core/platform/sources/wecom/wecom_adapter.py @@ -34,6 +34,7 @@ class WecomServer: def __init__(self, event_queue: asyncio.Queue, config: dict): self.server = quart.Quart(__name__) self.port = int(config.get("port")) + self.callback_server_host = config.get("callback_server_host", "0.0.0.0") self.server.add_url_rule( "/callback/command", view_func=self.verify, methods=["GET"] ) @@ -86,9 +87,9 @@ class WecomServer: return "success" async def start_polling(self): - logger.info(f"将在 0.0.0.0:{self.port} 端口启动 企业微信 适配器。") + logger.info(f"将在 {self.callback_server_host}:{self.port} 端口启动 企业微信 适配器。") await self.server.run_task( - host="0.0.0.0", + host=self.callback_server_host, port=self.port, shutdown_trigger=self.shutdown_trigger_placeholder, ) diff --git a/astrbot/dashboard/server.py b/astrbot/dashboard/server.py index 42bbad31..c836ea57 100644 --- a/astrbot/dashboard/server.py +++ b/astrbot/dashboard/server.py @@ -120,12 +120,14 @@ class AstrBotDashboard: return f"获取进程信息失败: {str(e)}" def run(self): - try: - ip_addr = get_local_ip_addresses() - except Exception as _: - ip_addr = [] - + ip_addr = [] port = self.core_lifecycle.astrbot_config["dashboard"].get("port", 6185) + host = self.core_lifecycle.astrbot_config["dashboard"].get("host", "127.0.0.1") + if host not in ["localhost", "127.0.0.1"]: + try: + ip_addr = get_local_ip_addresses() + except Exception as _: + pass if isinstance(port, str): port = int(port) @@ -147,10 +149,14 @@ class AstrBotDashboard: for ip in ip_addr: display += f" ➜ 网络: http://{ip}:{port}\n" display += " ➜ 默认用户名和密码: astrbot\n ✨✨✨\n" + + if not ip_addr: + display += "可在 data/cmd_config.json 中配置 dashboard.host 以便远程访问。\n" + logger.info(display) return self.app.run_task( - host="0.0.0.0", + host=host, port=port, shutdown_trigger=self.shutdown_trigger_placeholder, )