fix(qq): disable botpy file log to fix read-only filesystem error

When nanobot is run as a systemd service with ProtectSystem=strict,
the process cwd defaults to the read-only root filesystem (/). botpy's
default Client configuration includes a TimedRotatingFileHandler that
writes 'botpy.log' to os.getcwd(), which raises [Errno 30] Read-only
file system.

Pass ext_handlers=False when constructing the botpy Client subclass to
suppress the file handler. nanobot already routes all log output through
loguru, so botpy's file handler is redundant.

Fixes #1343

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zerone0x
2026-02-28 17:35:07 +01:00
parent a422c606d8
commit cfe33ff7cd

View File

@@ -31,7 +31,13 @@ def _make_bot_class(channel: "QQChannel") -> "type[botpy.Client]":
class _Bot(botpy.Client):
def __init__(self):
super().__init__(intents=intents)
# Disable botpy's default file handler (TimedRotatingFileHandler).
# By default botpy writes "botpy.log" to the process cwd, which
# fails under systemd with ProtectSystem=strict (read-only root fs).
# nanobot already handles logging via loguru, so the file handler is
# redundant. ext_handlers=False keeps console output but suppresses
# the file log. See: https://github.com/HKUDS/nanobot/issues/1343
super().__init__(intents=intents, ext_handlers=False)
async def on_ready(self):
logger.info("QQ bot ready: {}", self.robot.name)