diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea782..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000..a4245d0a0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,47 @@
+name: Bug Report
+description: 提交 Bug
+labels: ["BUG"]
+body:
+- type: checkboxes
+ attributes:
+ label: "检查项"
+ description: "请检查下列项目,并勾选确认。"
+ options:
+ - label: "我确认此问题在所有分支的最新版本中依旧存在"
+ required: true
+ - label: "我确认在 Issues 列表中并无其他人已经提出过与此问题相同或相似的问题"
+ required: true
+ - label: "我使用了 Docker"
+- type: textarea
+ attributes:
+ label: 遇到的问题
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: 报错信息
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: 如何重现此问题?
+ placeholder: "若不知道请略过此问题"
+- type: textarea
+ attributes:
+ label: 可能造成问题的原因
+ placeholder: "若不知道请略过此问题"
+- type: textarea
+ attributes:
+ label: 系统环境
+ placeholder: "例如:Windows 11 专业版 64位 24H2 / Debian Bookworm"
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Python 版本
+ placeholder: "例如:Python 3.11"
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: 补充信息
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7d6..000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 000000000..659838829
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,20 @@
+name: Feature Request
+description: 新功能请求
+labels: ["Feature"]
+body:
+- type: checkboxes
+ attributes:
+ label: "检查项"
+ description: "请检查下列项目,并勾选确认。"
+ options:
+ - label: "我确认在Issues列表中并无其他人已经建议过相似的功能"
+ required: true
+ - label: "这个新功能可以解决目前存在的某个问题或BUG"
+- type: textarea
+ attributes:
+ label: 期望的功能描述
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: 补充信息
\ No newline at end of file
diff --git a/README.md b/README.md
index 7bfa465ae..73e1c3094 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,8 @@
- 💾 MongoDB 提供数据持久化支持
- 🐧 NapCat 作为QQ协议端支持
+**最新版本: v0.5.7**
+
@@ -31,6 +33,7 @@
> - 文档未完善,有问题可以提交 Issue 或者 Discussion
> - QQ机器人存在被限制风险,请自行了解,谨慎使用
> - 由于持续迭代,可能存在一些已知或未知的bug
+> - 由于开发中,可能消耗较多token
**交流群**: 766798517(仅用于开发和建议相关讨论)不建议在群内询问部署问题,我不一定有空回复,会优先写文档和代码
diff --git a/bot.py b/bot.py
index 50c8cfaa4..8ef087476 100644
--- a/bot.py
+++ b/bot.py
@@ -8,7 +8,7 @@ from loguru import logger
from colorama import init, Fore
init()
-text = "多年以后,面对行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午"
+text = "多年以后,面对AI行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午"
rainbow_colors = [Fore.RED, Fore.YELLOW, Fore.GREEN, Fore.CYAN, Fore.BLUE, Fore.MAGENTA]
rainbow_text = ""
for i, char in enumerate(text):
diff --git a/requirements.txt b/requirements.txt
index 49c102dc6..1d268ffa6 100644
Binary files a/requirements.txt and b/requirements.txt differ
diff --git a/run_windows.bat b/run_windows.bat
new file mode 100644
index 000000000..920069318
--- /dev/null
+++ b/run_windows.bat
@@ -0,0 +1,67 @@
+@echo off
+setlocal enabledelayedexpansion
+chcp 65001
+
+REM 修正路径获取逻辑
+cd /d "%~dp0" || (
+ echo 错误:切换目录失败
+ exit /b 1
+)
+
+if not exist "venv\" (
+ echo 正在初始化虚拟环境...
+
+ where python >nul 2>&1
+ if %errorlevel% neq 0 (
+ echo 未找到Python解释器
+ exit /b 1
+ )
+
+ for /f "tokens=2" %%a in ('python --version 2^>^&1') do set version=%%a
+ for /f "tokens=1,2 delims=." %%b in ("!version!") do (
+ set major=%%b
+ set minor=%%c
+ )
+
+ if !major! lss 3 (
+ echo 需要Python大于等于3.0,当前版本 !version!
+ exit /b 1
+ )
+
+ if !major! equ 3 if !minor! lss 9 (
+ echo 需要Python大于等于3.9,当前版本 !version!
+ exit /b 1
+ )
+
+ echo 正在安装virtualenv...
+ python -m pip install virtualenv || (
+ echo virtualenv安装失败
+ exit /b 1
+ )
+
+ echo 正在创建虚拟环境...
+ python -m virtualenv venv || (
+ echo 虚拟环境创建失败
+ exit /b 1
+ )
+
+ call venv\Scripts\activate.bat
+
+ echo 正在安装依赖...
+ pip install -r requirements.txt
+) else (
+ call venv\Scripts\activate.bat
+)
+
+echo 当前代理设置:
+echo HTTP_PROXY=%HTTP_PROXY%
+echo HTTPS_PROXY=%HTTPS_PROXY%
+
+set HTTP_PROXY=
+set HTTPS_PROXY=
+echo 代理已取消。
+
+set no_proxy=0.0.0.0/32
+
+call nb run
+pause
\ No newline at end of file
diff --git a/src/plugins/chat/__init__.py b/src/plugins/chat/__init__.py
index ab99f6477..22f3059b5 100644
--- a/src/plugins/chat/__init__.py
+++ b/src/plugins/chat/__init__.py
@@ -15,6 +15,8 @@ from .bot import chat_bot
from .emoji_manager import emoji_manager
import time
+# 添加标志变量
+_message_manager_started = False
# 获取驱动器
driver = get_driver()
@@ -70,18 +72,20 @@ async def init_relationships():
@driver.on_bot_connect
async def _(bot: Bot):
"""Bot连接成功时的处理"""
+ global _message_manager_started
print(f"\033[1;38;5;208m-----------{global_config.BOT_NICKNAME}成功连接!-----------\033[0m")
await willing_manager.ensure_started()
-
message_sender.set_bot(bot)
print("\033[1;38;5;208m-----------消息发送器已启动!-----------\033[0m")
- asyncio.create_task(message_manager.start_processor())
- print("\033[1;38;5;208m-----------消息处理器已启动!-----------\033[0m")
+
+ if not _message_manager_started:
+ asyncio.create_task(message_manager.start_processor())
+ _message_manager_started = True
+ print("\033[1;38;5;208m-----------消息处理器已启动!-----------\033[0m")
asyncio.create_task(emoji_manager._periodic_scan(interval_MINS=global_config.EMOJI_REGISTER_INTERVAL))
print("\033[1;38;5;208m-----------开始偷表情包!-----------\033[0m")
- # 启动消息发送控制任务
@group_msg.handle()
async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
@@ -90,7 +94,7 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
# 添加build_memory定时任务
@scheduler.scheduled_job("interval", seconds=global_config.build_memory_interval, id="build_memory")
async def build_memory_task():
- """每30秒执行一次记忆构建"""
+ """每build_memory_interval秒执行一次记忆构建"""
print("\033[1;32m[记忆构建]\033[0m -------------------------------------------开始构建记忆-------------------------------------------")
start_time = time.time()
await hippocampus.operation_build_memory(chat_size=20)
diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py
index 079b73c41..89c15b388 100644
--- a/src/plugins/chat/bot.py
+++ b/src/plugins/chat/bot.py
@@ -132,6 +132,7 @@ class ChatBot:
accu_typing_time = 0
# print(f"\033[1;32m[开始回复]\033[0m 开始将回复1载入发送容器")
+ mark_head = False
for msg in response:
# print(f"\033[1;32m[回复内容]\033[0m {msg}")
#通过时间改变时间戳
@@ -152,6 +153,9 @@ class ChatBot:
thinking_start_time=thinking_start_time, #记录了思考开始的时间
reply_message_id=message.message_id
)
+ if not mark_head:
+ bot_message.is_head = True
+ mark_head = True
message_set.add_message(bot_message)
#message_set 可以直接加入 message_manager
diff --git a/src/plugins/chat/message.py b/src/plugins/chat/message.py
index d6e400e15..539e07989 100644
--- a/src/plugins/chat/message.py
+++ b/src/plugins/chat/message.py
@@ -169,6 +169,8 @@ class Message_Sending(Message):
reply_message_id: int = None # 存储 回复的 源消息ID
+ is_head: bool = False # 是否是头部消息
+
def update_thinking_time(self):
self.thinking_time = round(time.time(), 2) - self.thinking_start_time
return self.thinking_time
diff --git a/src/plugins/chat/message_sender.py b/src/plugins/chat/message_sender.py
index c81dec1bb..3e30b3cbe 100644
--- a/src/plugins/chat/message_sender.py
+++ b/src/plugins/chat/message_sender.py
@@ -166,12 +166,11 @@ class MessageManager:
else:# 如果不是message_thinking就只能是message_sending
print(f"\033[1;34m[调试]\033[0m 消息'{message_earliest.processed_plain_text}'正在发送中")
#直接发,等什么呢
- if message_earliest.update_thinking_time() < 30:
- await message_sender.send_group_message(group_id, message_earliest.processed_plain_text, auto_escape=False)
- else:
+ if message_earliest.is_head and message_earliest.update_thinking_time() >30:
await message_sender.send_group_message(group_id, message_earliest.processed_plain_text, auto_escape=False, reply_message_id=message_earliest.reply_message_id)
-
- #移除消息
+ else:
+ await message_sender.send_group_message(group_id, message_earliest.processed_plain_text, auto_escape=False)
+ #移除消息
if message_earliest.is_emoji:
message_earliest.processed_plain_text = "[表情包]"
await self.storage.store_message(message_earliest, None)
@@ -188,10 +187,11 @@ class MessageManager:
try:
#发送
- if msg.update_thinking_time() < 30:
- await message_sender.send_group_message(group_id, msg.processed_plain_text, auto_escape=False)
- else:
+ if msg.is_head and msg.update_thinking_time() >30:
await message_sender.send_group_message(group_id, msg.processed_plain_text, auto_escape=False, reply_message_id=msg.reply_message_id)
+ else:
+ await message_sender.send_group_message(group_id, msg.processed_plain_text, auto_escape=False)
+
#如果是表情包,则替换为"[表情包]"
if msg.is_emoji:
diff --git a/src/plugins/chat/utils.py b/src/plugins/chat/utils.py
index ddc698bc7..63daf6680 100644
--- a/src/plugins/chat/utils.py
+++ b/src/plugins/chat/utils.py
@@ -395,13 +395,13 @@ def add_typos(text: str) -> str:
def process_llm_response(text: str) -> List[str]:
# processed_response = process_text_with_typos(content)
- if len(text) > 200:
+ if len(text) > 300:
print(f"回复过长 ({len(text)} 字符),返回默认回复")
return ['懒得说']
# 处理长消息
sentences = split_into_sentences_w_remove_punctuation(add_typos(text))
# 检查分割后的消息数量是否过多(超过3条)
- if len(sentences) > 3:
+ if len(sentences) > 4:
print(f"分割后消息数量过多 ({len(sentences)} 条),返回默认回复")
return [f'{global_config.BOT_NICKNAME}不知道哦']