From b2096debf4cd6dd87045f649545d07d636e3ba29 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sat, 15 Mar 2025 12:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BE=93=E5=87=BA=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9Eeula,=20=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EULA.md | 69 ++++++++++++++++++++++++++++++ bot.py | 25 ++++++++++- config/auto_update.py | 12 +++++- elua.confirmed | 0 src/plugins/chat/message_sender.py | 20 ++++----- webui_conda.bat | 28 ++++++++++++ 6 files changed, 141 insertions(+), 13 deletions(-) create mode 100644 EULA.md create mode 100644 elua.confirmed create mode 100644 webui_conda.bat diff --git a/EULA.md b/EULA.md new file mode 100644 index 000000000..c878ff81d --- /dev/null +++ b/EULA.md @@ -0,0 +1,69 @@ + +--- +# **MaimBot用户协议** +**生效日期:** 2025.3.14 + +--- + +### **特别声明** +1. **MaimBot为遵循GPLv3协议的开源项目** + - 代码托管于GitHub,**开发者不持有任何法律实体**,项目由社区共同维护; + - 用户可自由使用、修改、分发代码,但**必须遵守GPLv3许可证要求**(详见项目仓库)。 + +2. **无责任声明** + - 本项目**不提供任何形式的担保**,开发者及贡献者均不对使用后果负责; + - 所有功能依赖第三方API,**生成内容不受我方控制**。 + +--- + +### **一、基础说明** +1. **MaimBot是什么** + - MaimBot是基于第三方AI技术(如ChatGPT等)的自动回复机器人,**所有输出内容均由AI自动生成,不代表我方观点**。 + - 用户可提交自定义指令(Prompt),经我方内容过滤后调用第三方API生成结果,**输出可能存在错误、偏见或不适宜内容**。 + +--- + +### **二、用户责任** +1. **禁止内容** + 您承诺**不提交或生成以下内容**,否则我方有权永久封禁账号: + - 违法、暴力、色情、歧视性内容; + - 诈骗、谣言、恶意代码等危害他人或社会的内容; + - 侵犯他人隐私、肖像权、知识产权的内容。 + +2. **后果自负** + - 您需对**输入的指令(Prompt)和生成内容的使用负全责**; + - **禁止将结果用于医疗、法律、投资等专业领域**,否则风险自行承担。 + +--- + +### **三、我们不负责什么** +1. **技术问题** + - 因第三方API故障、网络延迟、内容过滤误判导致的服务异常; + - AI生成内容的不准确、冒犯性、时效性错误。 + +2. **用户行为** + - 因您违反本协议或滥用MaimBot导致的任何纠纷、损失; + - 他人通过您的账号生成的违规内容。 + +--- + +### **四、其他重要条款** +1. **隐私与数据** + - 您提交的指令和生成内容可能被匿名化后用于优化服务,**敏感信息请勿输入**; + - **我方会收集部分统计信息(如使用频率、基础指令类型)以改进服务,您可在[bot_config.toml]随时关闭此功能**。 + +2. **精神健康风险** + ⚠️ **MaimBot仅为工具型机器人,不具备情感交互能力。建议用户:** + - 避免过度依赖AI回复处理现实问题或情绪困扰; + - 如感到心理不适,请及时寻求专业心理咨询服务。 + - 如遇心理困扰,请寻求专业帮助(全国心理援助热线:12355)。 + +3. **封禁权利** + - 我方有权不经通知**删除违规内容、暂停或终止您的访问权限**。 + +4. **争议解决** + - 本协议适用中国法律,争议提交相关地区法院管辖; + - 若因GPLv3许可产生纠纷,以许可证官方解释为准。 + + +--- diff --git a/bot.py b/bot.py index 7a97f485e..69cb54710 100644 --- a/bot.py +++ b/bot.py @@ -2,6 +2,7 @@ import asyncio import os import shutil import sys +from pathlib import Path import nonebot import time @@ -168,13 +169,35 @@ async def uvicorn_main(): uvicorn_server = server await server.serve() +def check_eula(): + eula_file = Path("elua.confirmed") + + # 如果已经确认过EULA,直接返回 + if eula_file.exists(): + return + + print("使用MaiMBot前请先阅读ELUA协议,继续运行视为同意协议") + print("协议内容:https://github.com/SengokuCola/MaiMBot/blob/main/EULA.md") + print('输入"同意"或"confirmed"继续运行') + + while True: + user_input = input().strip().lower() # 转换为小写以忽略大小写 + if user_input in ['同意', 'confirmed']: + # 创建确认文件 + eula_file.touch() + break + else: + print('请输入"同意"或"confirmed"以继续运行') + def raw_main(): # 利用 TZ 环境变量设定程序工作的时区 # 仅保证行为一致,不依赖 localtime(),实际对生产环境几乎没有作用 if platform.system().lower() != "windows": time.tzset() - + + check_eula() + easter_egg() init_config() init_env() diff --git a/config/auto_update.py b/config/auto_update.py index 28ab108da..d87b7c129 100644 --- a/config/auto_update.py +++ b/config/auto_update.py @@ -42,8 +42,16 @@ def update_config(): update_dict(target[key], value) else: try: - # 直接使用tomlkit的item方法创建新值 - target[key] = tomlkit.item(value) + # 对数组类型进行特殊处理 + if isinstance(value, list): + # 如果是空数组,确保它保持为空数组 + if not value: + target[key] = tomlkit.array() + else: + target[key] = tomlkit.array(value) + else: + # 其他类型使用item方法创建新值 + target[key] = tomlkit.item(value) except (TypeError, ValueError): # 如果转换失败,直接赋值 target[key] = value diff --git a/elua.confirmed b/elua.confirmed new file mode 100644 index 000000000..e69de29bb diff --git a/src/plugins/chat/message_sender.py b/src/plugins/chat/message_sender.py index b138af3b6..2debbb522 100644 --- a/src/plugins/chat/message_sender.py +++ b/src/plugins/chat/message_sender.py @@ -50,7 +50,6 @@ class Message_Sender: if not is_recalled: message_json = message.to_dict() message_send = MessageSendCQ(data=message_json) - # logger.debug(message_send.message_info,message_send.raw_message) message_preview = truncate_message(message.processed_plain_text) if message_send.message_info.group_info and message_send.message_info.group_info.group_id: try: @@ -188,16 +187,17 @@ class MessageManager: else: if ( message_earliest.is_head - and message_earliest.update_thinking_time() > 30 + and message_earliest.update_thinking_time() > 10 and not message_earliest.is_private_message() # 避免在私聊时插入reply ): message_earliest.set_reply() - await message_sender.send_message(message_earliest) + await message_earliest.process() + + await message_sender.send_message(message_earliest) + + - print( - f"\033[1;34m[调试]\033[0m 消息“{truncate_message(message_earliest.processed_plain_text)}”正在发送中" - ) await self.storage.store_message(message_earliest, message_earliest.chat_stream, None) @@ -217,11 +217,11 @@ class MessageManager: and not message_earliest.is_private_message() # 避免在私聊时插入reply ): msg.set_reply() + + await msg.process() + await message_sender.send_message(msg) - - # if msg.is_emoji: - # msg.processed_plain_text = "[表情包]" - await msg.process() + await self.storage.store_message(msg, msg.chat_stream, None) if not container.remove_message(msg): diff --git a/webui_conda.bat b/webui_conda.bat new file mode 100644 index 000000000..02a11327f --- /dev/null +++ b/webui_conda.bat @@ -0,0 +1,28 @@ +@echo on +echo Starting script... +echo Activating conda environment: maimbot +call conda activate maimbot +if errorlevel 1 ( + echo Failed to activate conda environment + pause + exit /b 1 +) +echo Conda environment activated successfully +echo Changing directory to C:\GitHub\MaiMBot +cd /d C:\GitHub\MaiMBot +if errorlevel 1 ( + echo Failed to change directory + pause + exit /b 1 +) +echo Current directory is: +cd + +python webui.py +if errorlevel 1 ( + echo Command failed with error code %errorlevel% + pause + exit /b 1 +) +echo Script completed successfully +pause \ No newline at end of file