From fe7ef7d7315bb02fa4f885e782ca107837f3b264 Mon Sep 17 00:00:00 2001
From: AL76 <735756072@qq.com>
Date: Thu, 13 Mar 2025 02:51:53 +0800
Subject: [PATCH 1/4] =?UTF-8?q?chore:=20=E7=94=A8=E6=88=B7=E4=BD=93?=
=?UTF-8?q?=E9=AA=8C=E4=BC=98=E5=8C=96=EF=BC=88=E6=8A=A5=E9=94=99=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF&log=EF=BC=89+=20ruff=E7=9A=84=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bot.py | 96 ++++++++++++++++---------------
src/plugins/models/utils_model.py | 2 +-
template.env | 2 +-
3 files changed, 53 insertions(+), 47 deletions(-)
diff --git a/bot.py b/bot.py
index 48517fe24..b78cd0e03 100644
--- a/bot.py
+++ b/bot.py
@@ -17,19 +17,6 @@ env_mask = {key: os.getenv(key) for key in os.environ}
uvicorn_server = None
-# 配置日志
-log_path = os.path.join(os.getcwd(), "logs")
-if not os.path.exists(log_path):
- os.makedirs(log_path)
-
-# 添加文件日志,启用rotation和retention
-logger.add(
- os.path.join(log_path, "maimbot_{time:YYYY-MM-DD}.log"),
- rotation="00:00", # 每天0点创建新文件
- retention="30 days", # 保留30天的日志
- level="INFO",
- encoding="utf-8"
-)
def easter_egg():
# 彩蛋
@@ -76,7 +63,7 @@ def init_env():
# 首先加载基础环境变量.env
if os.path.exists(".env"):
- load_dotenv(".env",override=True)
+ load_dotenv(".env", override=True)
logger.success("成功加载基础环境变量配置")
@@ -90,10 +77,7 @@ def load_env():
logger.success("加载开发环境变量配置")
load_dotenv(".env.dev", override=True) # override=True 允许覆盖已存在的环境变量
- fn_map = {
- "prod": prod,
- "dev": dev
- }
+ fn_map = {"prod": prod, "dev": dev}
env = os.getenv("ENVIRONMENT")
logger.info(f"[load_env] 当前的 ENVIRONMENT 变量值:{env}")
@@ -109,28 +93,53 @@ def load_env():
logger.error(f"ENVIRONMENT 配置错误,请检查 .env 文件中的 ENVIRONMENT 变量及对应 .env.{env} 是否存在")
RuntimeError(f"ENVIRONMENT 配置错误,请检查 .env 文件中的 ENVIRONMENT 变量及对应 .env.{env} 是否存在")
-def load_logger():
- logger.remove() # 移除默认配置
- if os.getenv("ENVIRONMENT") == "dev":
- logger.add(
- sys.stderr,
- format="{time:YYYY-MM-DD HH:mm:ss.SSS} |> {level: <7} |> {name:.<8}:{function:.<8}:{line: >4} -> {message}",
- colorize=True,
- level=os.getenv("LOG_LEVEL", "DEBUG"), # 根据环境设置日志级别,默认为DEBUG
- )
- else:
- logger.add(
- sys.stderr,
- format="{time:YYYY-MM-DD HH:mm:ss.SSS} |> {level: <7} |> {name:.<8}:{function:.<8}:{line: >4} -> {message}",
- colorize=True,
- level=os.getenv("LOG_LEVEL", "INFO"), # 根据环境设置日志级别,默认为INFO
- filter=lambda record: "nonebot" not in record["name"]
- )
+def load_logger():
+ logger.remove()
+
+ # 配置日志基础路径
+ log_path = os.path.join(os.getcwd(), "logs")
+ if not os.path.exists(log_path):
+ os.makedirs(log_path)
+
+ current_env = os.getenv("ENV", "dev")
+
+ # 公共配置参数
+ log_level = os.getenv(
+ "LOG_LEVEL",
+ "INFO" if current_env == "prod" else "DEBUG"
+ )
+ log_filter = lambda record: (
+ ("nonebot" not in record["name"] or record["level"].no >= logger.level("ERROR").no
+ ) if current_env == "prod" else True
+ )
+ log_format = (
+ "{time:YYYY-MM-DD HH:mm:ss.SSS} "
+ "|> {level: <7} "
+ "|> {name:.<8}:{function:.<8}:{line: >4} "
+ "-> {message}"
+ )
+
+ # 日志文件储存至/logs
+ logger.add(
+ os.path.join(log_path, "maimbot_{time:YYYY-MM-DD}.log"),
+ rotation="00:00",
+ retention="30 days",
+ format=log_format,
+ colorize=False,
+ level=log_level,
+ filter=log_filter,
+ encoding="utf-8"
+ )
+
+ # 终端输出
+ logger.add(
+ sys.stderr,
+ format=log_format,
+ colorize=True,
+ level=log_level,
+ filter=log_filter
+ )
def scan_provider(env_config: dict):
@@ -160,10 +169,7 @@ def scan_provider(env_config: dict):
# 检查每个 provider 是否同时存在 url 和 key
for provider_name, config in provider.items():
if config["url"] is None or config["key"] is None:
- logger.error(
- f"provider 内容:{config}\n"
- f"env_config 内容:{env_config}"
- )
+ logger.error(f"provider 内容:{config}\nenv_config 内容:{env_config}")
raise ValueError(f"请检查 '{provider_name}' 提供商配置是否丢失 BASE_URL 或 KEY 环境变量")
@@ -192,7 +198,7 @@ async def uvicorn_main():
reload=os.getenv("ENVIRONMENT") == "dev",
timeout_graceful_shutdown=5,
log_config=None,
- access_log=False
+ access_log=False,
)
server = uvicorn.Server(config)
uvicorn_server = server
@@ -202,7 +208,7 @@ async def uvicorn_main():
def raw_main():
# 利用 TZ 环境变量设定程序工作的时区
# 仅保证行为一致,不依赖 localtime(),实际对生产环境几乎没有作用
- if platform.system().lower() != 'windows':
+ if platform.system().lower() != "windows":
time.tzset()
easter_egg()
diff --git a/src/plugins/models/utils_model.py b/src/plugins/models/utils_model.py
index afe4baeb5..0f5bb335c 100644
--- a/src/plugins/models/utils_model.py
+++ b/src/plugins/models/utils_model.py
@@ -132,7 +132,7 @@ class LLM_request:
# 常见Error Code Mapping
error_code_mapping = {
400: "参数不正确",
- 401: "API key 错误,认证失败",
+ 401: "API key 错误,认证失败,请检查/config/bot_config.toml和.env.prod中的配置是否正确哦~",
402: "账号余额不足",
403: "需要实名,或余额不足",
404: "Not Found",
diff --git a/template.env b/template.env
index d2a763112..322776ce7 100644
--- a/template.env
+++ b/template.env
@@ -23,7 +23,7 @@ CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1
SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/
DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1
-#定义你要用的api的base_url
+#定义你要用的api的key(需要去对应网站申请哦)
DEEP_SEEK_KEY=
CHAT_ANY_WHERE_KEY=
SILICONFLOW_KEY=
From 11e8b2fa5f00defaeb1ce2a770fb8afbd7b0d19b Mon Sep 17 00:00:00 2001
From: AL76 <735756072@qq.com>
Date: Thu, 13 Mar 2025 03:18:49 +0800
Subject: [PATCH 2/4] =?UTF-8?q?chore:=20ruff=E7=9A=84=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bot.py | 20 ++++++--------------
src/common/database.py | 4 +---
src/plugins/chat/__init__.py | 9 ++++-----
3 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/bot.py b/bot.py
index b78cd0e03..b5d210cc3 100644
--- a/bot.py
+++ b/bot.py
@@ -105,13 +105,11 @@ def load_logger():
current_env = os.getenv("ENV", "dev")
# 公共配置参数
- log_level = os.getenv(
- "LOG_LEVEL",
- "INFO" if current_env == "prod" else "DEBUG"
- )
+ log_level = os.getenv("LOG_LEVEL", "INFO" if current_env == "prod" else "DEBUG")
log_filter = lambda record: (
- ("nonebot" not in record["name"] or record["level"].no >= logger.level("ERROR").no
- ) if current_env == "prod" else True
+ ("nonebot" not in record["name"] or record["level"].no >= logger.level("ERROR").no)
+ if current_env == "prod"
+ else True
)
log_format = (
"{time:YYYY-MM-DD HH:mm:ss.SSS} "
@@ -129,17 +127,11 @@ def load_logger():
colorize=False,
level=log_level,
filter=log_filter,
- encoding="utf-8"
+ encoding="utf-8",
)
# 终端输出
- logger.add(
- sys.stderr,
- format=log_format,
- colorize=True,
- level=log_level,
- filter=log_filter
- )
+ logger.add(sys.stderr, format=log_format, colorize=True, level=log_level, filter=log_filter)
def scan_provider(env_config: dict):
diff --git a/src/common/database.py b/src/common/database.py
index ca73dc468..cd149e526 100644
--- a/src/common/database.py
+++ b/src/common/database.py
@@ -22,9 +22,7 @@ def __create_database_instance():
if username and password:
# 如果有用户名和密码,使用认证连接
- return MongoClient(
- host, port, username=username, password=password, authSource=auth_source
- )
+ return MongoClient(host, port, username=username, password=password, authSource=auth_source)
# 否则使用无认证连接
return MongoClient(host, port)
diff --git a/src/plugins/chat/__init__.py b/src/plugins/chat/__init__.py
index d7a7bd7e4..c4281d186 100644
--- a/src/plugins/chat/__init__.py
+++ b/src/plugins/chat/__init__.py
@@ -4,7 +4,7 @@ import os
from loguru import logger
from nonebot import get_driver, on_message, require
-from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageSegment,MessageEvent
+from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageSegment, MessageEvent
from nonebot.typing import T_State
from ..moods.moods import MoodManager # 导入情绪管理器
@@ -99,15 +99,14 @@ async def _(bot: Bot, event: MessageEvent, state: T_State):
@scheduler.scheduled_job("interval", seconds=global_config.build_memory_interval, id="build_memory")
async def build_memory_task():
"""每build_memory_interval秒执行一次记忆构建"""
- logger.debug(
- "[记忆构建]"
- "------------------------------------开始构建记忆--------------------------------------")
+ logger.debug("[记忆构建]------------------------------------开始构建记忆--------------------------------------")
start_time = time.time()
await hippocampus.operation_build_memory(chat_size=20)
end_time = time.time()
logger.success(
f"[记忆构建]--------------------------记忆构建完成:耗时: {end_time - start_time:.2f} "
- "秒-------------------------------------------")
+ "秒-------------------------------------------"
+ )
@scheduler.scheduled_job("interval", seconds=global_config.forget_memory_interval, id="forget_memory")
From 3b5523d7e2e1a27f65a648952fdc9648c511f046 Mon Sep 17 00:00:00 2001
From: AL76 <735756072@qq.com>
Date: Thu, 13 Mar 2025 03:21:54 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=85=B3=E6=8E=89ruff?=
=?UTF-8?q?=E7=9A=84checkout@v3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/ruff.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml
index 4adeffd74..812dac070 100644
--- a/.github/workflows/ruff.yml
+++ b/.github/workflows/ruff.yml
@@ -5,4 +5,3 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- - uses: astral-sh/ruff-action@v3
From 2c74a5dfb7a8d63a5d44be1f20eedecb5c59dc33 Mon Sep 17 00:00:00 2001
From: AL76 <735756072@qq.com>
Date: Thu, 13 Mar 2025 03:35:54 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E6=81=A2=E5=A4=8Druff=E8=AE=BE=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/ruff.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml
index 812dac070..0d1e50c5a 100644
--- a/.github/workflows/ruff.yml
+++ b/.github/workflows/ruff.yml
@@ -5,3 +5,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
+ - uses: astral-sh/ruff-action@v3
\ No newline at end of file