diff --git a/astrbot/__main__.py b/astrbot/__main__.py index 5404ed11f..854d3901a 100644 --- a/astrbot/__main__.py +++ b/astrbot/__main__.py @@ -46,11 +46,6 @@ logo_tmpl = r""" def check_env() -> None: # Python version check: require 3.12 or 3.13 if not (sys.version_info.major == 3 and sys.version_info.minor in (12, 13)): - print( - f"❌ Python 版本错误: 当前使用 Python {sys.version_info.major}.{sys.version_info.minor}\n" - "请使用 uv tool install -e . --force -p 3.12 重新安装", - file=sys.stderr, - ) sys.exit(1) astrbot_root = get_astrbot_root() diff --git a/astrbot/cli/commands/cmd_run.py b/astrbot/cli/commands/cmd_run.py index b4d9e1632..f0180396b 100644 --- a/astrbot/cli/commands/cmd_run.py +++ b/astrbot/cli/commands/cmd_run.py @@ -59,11 +59,6 @@ from astrbot.runtime_bootstrap import initialize_runtime_bootstrap # Python version check: require 3.12 or 3.13 if not (sys.version_info.major == 3 and sys.version_info.minor in (12, 13)): - print( - f"❌ Python 版本错误: 当前使用 Python {sys.version_info.major}.{sys.version_info.minor}\n" - "请使用 uv tool install -e . --force -p 3.12 重新安装", - file=sys.stderr, - ) sys.exit(1) initialize_runtime_bootstrap() diff --git a/astrbot/core/agent/context/compressor.py b/astrbot/core/agent/context/compressor.py index bff40a4de..fa8fff925 100644 --- a/astrbot/core/agent/context/compressor.py +++ b/astrbot/core/agent/context/compressor.py @@ -212,7 +212,7 @@ class LLMSummaryCompressor: # build payload instruction_message = Message(role="user", content=self.instruction_text) - llm_payload = messages_to_summarize + [instruction_message] + llm_payload = [*messages_to_summarize, instruction_message] # generate summary try: diff --git a/astrbot/core/agent/runners/coze/coze_api_client.py b/astrbot/core/agent/runners/coze/coze_api_client.py index ce1de24d4..dbdb6d532 100644 --- a/astrbot/core/agent/runners/coze/coze_api_client.py +++ b/astrbot/core/agent/runners/coze/coze_api_client.py @@ -299,7 +299,6 @@ if __name__ == "__main__": async with await anyio.open_file("README.md", "rb") as f: file_data = await f.read() file_id = await client.upload_file(file_data) - print(f"Uploaded file_id: {file_id}") async for event in client.chat_messages( bot_id=bot_id, user_id="test_user", @@ -318,7 +317,7 @@ if __name__ == "__main__": ], stream=True, ): - print(f"Event: {event}") + pass finally: await client.close() diff --git a/astrbot/core/agent/runners/deerflow/deerflow_api_client.py b/astrbot/core/agent/runners/deerflow/deerflow_api_client.py index 37a23f243..e63eab3b2 100644 --- a/astrbot/core/agent/runners/deerflow/deerflow_api_client.py +++ b/astrbot/core/agent/runners/deerflow/deerflow_api_client.py @@ -4,6 +4,7 @@ from collections.abc import AsyncGenerator from typing import Any from aiohttp import ClientResponse, ClientSession, ClientTimeout +from typing_extensions import Self from astrbot.core import logger @@ -128,7 +129,7 @@ class DeerFlowAPIClient: self._session = ClientSession(trust_env=True) return self._session - async def __aenter__(self) -> "DeerFlowAPIClient": + async def __aenter__(self) -> Self: return self async def __aexit__( diff --git a/astrbot/core/agent/tool_image_cache.py b/astrbot/core/agent/tool_image_cache.py index 72e22dd52..f494beafb 100644 --- a/astrbot/core/agent/tool_image_cache.py +++ b/astrbot/core/agent/tool_image_cache.py @@ -9,6 +9,8 @@ import time from dataclasses import dataclass, field from typing import ClassVar +from typing_extensions import Self + from astrbot import logger from astrbot.core.utils.astrbot_path import get_astrbot_temp_path @@ -40,7 +42,7 @@ class ToolImageCache: # Cache expiry time in seconds (1 hour) CACHE_EXPIRY: ClassVar[int] = 3600 - def __new__(cls) -> "ToolImageCache": + def __new__(cls) -> Self: if cls._instance is None: cls._instance = super().__new__(cls) cls._instance._initialized = False diff --git a/astrbot/core/astr_agent_tool_exec.py b/astrbot/core/astr_agent_tool_exec.py index 3021a495e..e43b9447b 100644 --- a/astrbot/core/astr_agent_tool_exec.py +++ b/astrbot/core/astr_agent_tool_exec.py @@ -3,7 +3,8 @@ import inspect import json import traceback import uuid -from collections.abc import AsyncGenerator, Awaitable, Callable, Sequence, Set +from collections.abc import AsyncGenerator, Awaitable, Callable, Sequence +from collections.abc import Set as AbstractSet from typing import Any import mcp @@ -47,7 +48,7 @@ class FunctionToolExecutor(BaseFunctionToolExecutor[AstrAgentContext]): if isinstance(image_urls_raw, str): return [image_urls_raw] - if isinstance(image_urls_raw, (Sequence, Set)) and not isinstance( + if isinstance(image_urls_raw, (Sequence, AbstractSet)) and not isinstance( image_urls_raw, (str, bytes, bytearray) ): return [item for item in image_urls_raw if isinstance(item, str)] diff --git a/astrbot/core/astr_main_agent_resources.py b/astrbot/core/astr_main_agent_resources.py index 3ea3ba3a5..20a960e42 100644 --- a/astrbot/core/astr_main_agent_resources.py +++ b/astrbot/core/astr_main_agent_resources.py @@ -246,7 +246,7 @@ class SendMessageToUserTool(FunctionTool[AstrAgentContext]): if path: ( local_path, - file_from_sandbox, + _file_from_sandbox, ) = await self._resolve_path_from_sandbox(context, path) components.append(Comp.File(name=name, file=local_path)) elif url: diff --git a/astrbot/core/db/migration/sqlite_v3.py b/astrbot/core/db/migration/sqlite_v3.py index eb4b9f486..ba9abf990 100644 --- a/astrbot/core/db/migration/sqlite_v3.py +++ b/astrbot/core/db/migration/sqlite_v3.py @@ -467,7 +467,7 @@ class SQLiteDatabase: ORDER BY updated_at DESC LIMIT ? OFFSET ? """ - query_params = params + [page_size, offset] + query_params = [*params, page_size, offset] # 获取分页数据 c.execute(data_sql, query_params) diff --git a/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py b/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py index 4f9e5c58b..3ec1a6851 100644 --- a/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py +++ b/astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py @@ -37,13 +37,6 @@ from .dingtalk_event import DingtalkMessageEvent class MyEventHandler(dingtalk_stream.EventHandler): async def process(self, event: dingtalk_stream.EventMessage): - print( - "2", - event.headers.event_type, - event.headers.event_id, - event.headers.event_born_time, - event.data, - ) return AckMessage.STATUS_OK, "OK" diff --git a/astrbot/core/platform/sources/misskey/misskey_adapter.py b/astrbot/core/platform/sources/misskey/misskey_adapter.py index 0adc967e9..b482777e1 100644 --- a/astrbot/core/platform/sources/misskey/misskey_adapter.py +++ b/astrbot/core/platform/sources/misskey/misskey_adapter.py @@ -655,7 +655,7 @@ class MisskeyPlatformAdapter(Platform): raw_text = raw_data.get("text", "") if raw_text: - text_parts, processed_text = process_at_mention( + text_parts, _processed_text = process_at_mention( message, raw_text, self._bot_username, @@ -735,7 +735,7 @@ class MisskeyPlatformAdapter(Platform): if raw_text: if self._bot_username and f"@{self._bot_username}" in raw_text: - text_parts, processed_text = process_at_mention( + text_parts, _processed_text = process_at_mention( message, raw_text, self._bot_username, 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 ced55b5da..5009c854b 100644 --- a/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py +++ b/astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py @@ -107,7 +107,6 @@ class QQOfficialWebhook: if opcode == 13: # validation signed = await self.webhook_validation(cast(dict, data)) - print(signed) return signed event_id = msg.get("id") diff --git a/astrbot/core/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py b/astrbot/core/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py index d4e7a063c..b48fecb48 100644 --- a/astrbot/core/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py +++ b/astrbot/core/platform/sources/wecom_ai_bot/WXBizJsonMsgCrypt.py @@ -58,8 +58,7 @@ class SHA1: sha.update("".join(sortlist).encode("utf-8")) return ierror.WXBizMsgCrypt_OK, sha.hexdigest() - except Exception as e: - print(e) + except Exception: return ierror.WXBizMsgCrypt_ComputeSignature_Error, None @@ -82,8 +81,7 @@ class JsonParse: try: json_dict = json.loads(jsontext) return ierror.WXBizMsgCrypt_OK, json_dict["encrypt"] - except Exception as e: - print(e) + except Exception: return ierror.WXBizMsgCrypt_ParseJson_Error, None def generate(self, encrypt, signature, timestamp, nonce): @@ -189,8 +187,7 @@ class Prpcrypt: cryptor = AES.new(self.key, self.mode, self.key[:16]) # 使用BASE64对密文进行解码,然后AES-CBC解密 plain_text = cryptor.decrypt(base64.b64decode(text)) - except Exception as e: - print(e) + except Exception: return ierror.WXBizMsgCrypt_DecryptAES_Error, None try: pad = plain_text[-1] @@ -202,11 +199,9 @@ class Prpcrypt: json_len = socket.ntohl(struct.unpack("I", content[:4])[0]) json_content = content[4 : json_len + 4].decode("utf-8") from_receiveid = content[json_len + 4 :].decode("utf-8") - except Exception as e: - print(e) + except Exception: return ierror.WXBizMsgCrypt_IllegalBuffer, None if from_receiveid != receiveid: - print("receiveid not match", receiveid, from_receiveid) return ierror.WXBizMsgCrypt_ValidateCorpid_Error, None return 0, json_content @@ -290,8 +285,6 @@ class WXBizJsonMsgCrypt: if ret != 0: return ret, None if not signature == sMsgSignature: - print("signature not match") - print(signature) return ierror.WXBizMsgCrypt_ValidateSignature_Error, None pc = Prpcrypt(self.key) ret, json_content = pc.decrypt(encrypt, self.m_sReceiveId) diff --git a/astrbot/core/provider/manager.py b/astrbot/core/provider/manager.py index 51a307185..87205e437 100644 --- a/astrbot/core/provider/manager.py +++ b/astrbot/core/provider/manager.py @@ -8,9 +8,9 @@ from typing import Protocol, runtime_checkable from astrbot.core import astrbot_config, logger, sp from astrbot.core.astrbot_config_mgr import AstrBotConfigManager from astrbot.core.db import BaseDatabase +from astrbot.core.persona_mgr import PersonaManager from astrbot.core.utils.error_redaction import safe_error -from ..persona_mgr import PersonaManager from .entities import ProviderType from .provider import ( EmbeddingProvider, diff --git a/astrbot/core/star/star_handler.py b/astrbot/core/star/star_handler.py index 2265ba8b5..593159dc6 100644 --- a/astrbot/core/star/star_handler.py +++ b/astrbot/core/star/star_handler.py @@ -27,7 +27,7 @@ class StarHandlerRegistry(Generic[T]): def _print_handlers(self) -> None: for handler in self._handlers: - print(handler.handler_full_name) + pass @overload def get_handlers_by_event_type(