From f20fca0c01a1555c34e0a6674f55cee0fe79291e Mon Sep 17 00:00:00 2001 From: NepPure Date: Fri, 28 Feb 2025 20:41:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?mongodb=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E5=AF=86=E7=A0=81=EF=BC=8C=E5=90=91?= =?UTF-8?q?=E4=B8=8B=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- env.example | 3 +++ src/common/database.py | 16 +++++++++++----- src/plugins/chat/bot_config_toml | 3 +++ src/plugins/chat/config.py | 14 ++++++++++---- src/plugins/chat/image_utils.py | 5 ++++- src/plugins/schedule/schedule_generator.py | 9 ++++++--- 6 files changed, 37 insertions(+), 13 deletions(-) diff --git a/env.example b/env.example index 0ae1560a3..c8ed650d6 100644 --- a/env.example +++ b/env.example @@ -11,6 +11,9 @@ PLUGINS=["src2.plugins.chat"] MONGODB_HOST=127.0.0.1 MONGODB_PORT=27017 DATABASE_NAME=MegBot +MONGODB_USERNAME = "" # 默认空值 +MONGODB_PASSWORD = "" # 默认空值 +MONGODB_AUTH_SOURCE = "" # 默认空值 #key and url CHAT_ANY_WHERE_KEY= diff --git a/src/common/database.py b/src/common/database.py index ecf3bed1e..6a997c12a 100644 --- a/src/common/database.py +++ b/src/common/database.py @@ -4,18 +4,24 @@ from typing import Optional class Database: _instance: Optional["Database"] = None - def __init__(self, host: str, port: int, db_name: str): - self.client = MongoClient(host, port) + def __init__(self, host: str, port: int, db_name: str, username: Optional[str] = None, password: Optional[str] = None, auth_source: Optional[str] = None): + if username and password: + # 如果有用户名和密码,使用认证连接 + # TODO: 复杂情况直接支持URI吧 + self.client = MongoClient(host, port, username=username, password=password, authSource=auth_source) + else: + # 否则使用无认证连接 + self.client = MongoClient(host, port) self.db = self.client[db_name] @classmethod - def initialize(cls, host: str, port: int, db_name: str) -> "Database": + def initialize(cls, host: str, port: int, db_name: str, username: Optional[str] = None, password: Optional[str] = None, auth_source: Optional[str] = None) -> "Database": if cls._instance is None: - cls._instance = cls(host, port, db_name) + cls._instance = cls(host, port, db_name, username, password, auth_source) return cls._instance @classmethod def get_instance(cls) -> "Database": if cls._instance is None: raise RuntimeError("Database not initialized") - return cls._instance \ No newline at end of file + return cls._instance \ No newline at end of file diff --git a/src/plugins/chat/bot_config_toml b/src/plugins/chat/bot_config_toml index afda4230a..892cf9f19 100644 --- a/src/plugins/chat/bot_config_toml +++ b/src/plugins/chat/bot_config_toml @@ -2,6 +2,9 @@ host = "127.0.0.1" port = 27017 name = "MegBot" +username = "" # 默认空值 +password = "" # 默认空值 +auth_source = "" # 默认空值 [bot] qq = #填入你的机器人QQ diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index b7260bf01..2954f7f75 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -1,10 +1,10 @@ from dataclasses import dataclass -from typing import Dict, Any, Optional +from typing import Dict, Any, Optional, Set import os from nonebot.log import logger, default_format import logging -import configparser # 添加这行导入 -import tomli # 添加这行导入 +import configparser +import tomli # 禁用默认的日志输出 # logger.remove() @@ -24,6 +24,9 @@ class BotConfig: MONGODB_HOST: str = "127.0.0.1" MONGODB_PORT: int = 27017 DATABASE_NAME: str = "MegBot" + MONGODB_USERNAME: Optional[str] = None # 默认空值 + MONGODB_PASSWORD: Optional[str] = None # 默认空值 + MONGODB_AUTH_SOURCE: Optional[str] = None # 默认空值 BOT_QQ: Optional[int] = None BOT_NICKNAME: Optional[str] = None @@ -59,7 +62,10 @@ class BotConfig: config.MONGODB_HOST = db_config.get("host", config.MONGODB_HOST) config.MONGODB_PORT = db_config.get("port", config.MONGODB_PORT) config.DATABASE_NAME = db_config.get("name", config.DATABASE_NAME) - + config.MONGODB_USERNAME = db_config.get("username", config.MONGODB_USERNAME) or None # 空字符串转为 None + config.MONGODB_PASSWORD = db_config.get("password", config.MONGODB_PASSWORD) or None # 空字符串转为 None + config.MONGODB_AUTH_SOURCE = db_config.get("auth_source", config.MONGODB_AUTH_SOURCE) or None # 空字符串转为 None + if "emoji" in toml_dict: emoji_config = toml_dict["emoji"] config.EMOJI_CHECK_INTERVAL = emoji_config.get("check_interval", config.EMOJI_CHECK_INTERVAL) diff --git a/src/plugins/chat/image_utils.py b/src/plugins/chat/image_utils.py index e2fedf607..0857bfcdd 100644 --- a/src/plugins/chat/image_utils.py +++ b/src/plugins/chat/image_utils.py @@ -31,7 +31,10 @@ def storage_compress_image(image_data: bytes, max_size: int = 200) -> bytes: db = Database( host=bot_config.MONGODB_HOST, port=bot_config.MONGODB_PORT, - db_name=bot_config.DATABASE_NAME + db_name=bot_config.DATABASE_NAME, + username=bot_config.MONGODB_USERNAME, + password=bot_config.MONGODB_PASSWORD, + auth_source=bot_config.MONGODB_AUTH_SOURCE ) # 检查是否已存在相同哈希值的图片 diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index 415e278c0..eedc7dbf0 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -12,9 +12,12 @@ from ...common.database import Database # 使用正确的导入语法 # from src.common.database import Database # 使用正确的导入语法 Database.initialize( - os.getenv("MONGODB_HOST"), - int(os.getenv("MONGODB_PORT")), - os.getenv("DATABASE_NAME") + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) class ScheduleGenerator: From f5edefebb42fb4c3f4b477b5516040b5120cb5dc Mon Sep 17 00:00:00 2001 From: NepPure Date: Fri, 28 Feb 2025 21:13:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=8A=A0=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/schedule/schedule_generator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index eedc7dbf0..665871518 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -11,6 +11,12 @@ from ...common.database import Database # 使用正确的导入语法 # from src.plugins.schedule.schedule_llm_module import LLMModel # from src.common.database import Database # 使用正确的导入语法 +# 获取当前文件的绝对路径 +#TODO: 这个好几个地方用需要封装 +current_dir = os.path.dirname(os.path.abspath(__file__)) +root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) +load_dotenv(os.path.join(root_dir, '.env')) + Database.initialize( host= os.getenv("MONGODB_HOST"), port= int(os.getenv("MONGODB_PORT")), From 252f0f03f53e853c5b26d5adc48ce0eee16695ab Mon Sep 17 00:00:00 2001 From: NepPure Date: Fri, 28 Feb 2025 21:34:43 +0800 Subject: [PATCH 3/3] =?UTF-8?q?docker=E9=95=9C=E5=83=8F=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E4=BE=BF=E4=BA=8E=E5=A4=9A=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a9de9cf2a..9e1cf16b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,10 @@ FROM nonebot/nb-cli:latest WORKDIR / -RUN apt update && apt install -y git -RUN git clone https://github.com/SengokuCola/MaiMBot +COPY . /MaiMBot/ WORKDIR /MaiMBot RUN mkdir config -RUN mv /MaiMBot/env.example /MaiMBot/config/.env \ -&& mv /MaiMBot/src/plugins/chat/bot_config_toml /MaiMBot/config/bot_config.toml +RUN mv env.example config/.env \ +&& mv src/plugins/chat/bot_config_toml config/bot_config.toml RUN ln -s /MaiMBot/config/.env /MaiMBot/.env \ && ln -s /MaiMBot/config/bot_config.toml /MaiMBot/src/plugins/chat/bot_config.toml RUN pip install -r requirements.txt