去除广告
This commit is contained in:
@@ -14,6 +14,7 @@ from utils.decorator.plugin_decorators import plugin_stats_decorator
|
|||||||
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
|
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
|
||||||
from utils.decorator.points_decorator import plugin_points_cost
|
from utils.decorator.points_decorator import plugin_points_cost
|
||||||
from utils.media_downloader import MediaDownloader
|
from utils.media_downloader import MediaDownloader
|
||||||
|
from utils.string_utils import remove_trailing_content
|
||||||
|
|
||||||
|
|
||||||
class DifyPlugin(MessagePluginInterface):
|
class DifyPlugin(MessagePluginInterface):
|
||||||
@@ -104,7 +105,7 @@ class DifyPlugin(MessagePluginInterface):
|
|||||||
return command in self._commands
|
return command in self._commands
|
||||||
|
|
||||||
@plugin_stats_decorator(plugin_name="Dify聊天")
|
@plugin_stats_decorator(plugin_name="Dify聊天")
|
||||||
@plugin_points_cost(2, "AI聊天消耗积分",Feature.AI_CAPABILITY)
|
@plugin_points_cost(2, "AI聊天消耗积分", Feature.AI_CAPABILITY)
|
||||||
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理消息"""
|
"""处理消息"""
|
||||||
content = str(message.get("content", "")).strip()
|
content = str(message.get("content", "")).strip()
|
||||||
@@ -126,7 +127,8 @@ class DifyPlugin(MessagePluginInterface):
|
|||||||
if roomid and gbm.get_group_permission(roomid, Feature.AI_CAPABILITY) == PermissionStatus.DISABLED:
|
if roomid and gbm.get_group_permission(roomid, Feature.AI_CAPABILITY) == PermissionStatus.DISABLED:
|
||||||
return False, "没有权限"
|
return False, "没有权限"
|
||||||
|
|
||||||
self.message_util.send_text_msg("⏳AI 正在加油,请稍候… 😊", (roomid if roomid else sender), sender if roomid else "")
|
self.message_util.send_text_msg("⏳AI 正在加油,请稍候… 😊", (roomid if roomid else sender),
|
||||||
|
sender if roomid else "")
|
||||||
# 获取查询内容
|
# 获取查询内容
|
||||||
query = parts[1].strip()
|
query = parts[1].strip()
|
||||||
|
|
||||||
@@ -139,7 +141,8 @@ class DifyPlugin(MessagePluginInterface):
|
|||||||
try:
|
try:
|
||||||
# 调用Dify API获取回复
|
# 调用Dify API获取回复
|
||||||
response = self._chat_with_dify(session_id, user_id, query)
|
response = self._chat_with_dify(session_id, user_id, query)
|
||||||
|
# 去除广告内容
|
||||||
|
response = remove_trailing_content(response)
|
||||||
# 发送回复
|
# 发送回复
|
||||||
if response:
|
if response:
|
||||||
# 判断是否为本地文件路径
|
# 判断是否为本地文件路径
|
||||||
@@ -159,6 +162,7 @@ class DifyPlugin(MessagePluginInterface):
|
|||||||
wcf.send_text(f"❌请求出错:{str(e)}", (roomid if roomid else sender), sender if roomid else "")
|
wcf.send_text(f"❌请求出错:{str(e)}", (roomid if roomid else sender), sender if roomid else "")
|
||||||
return True, f"处理出错: {e}"
|
return True, f"处理出错: {e}"
|
||||||
|
|
||||||
|
|
||||||
def _chat_with_dify(self, session_id: str, user_id: str, query: str) -> Optional[str]:
|
def _chat_with_dify(self, session_id: str, user_id: str, query: str) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
与Dify API交互获取回复
|
与Dify API交互获取回复
|
||||||
@@ -235,7 +239,7 @@ class DifyPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# 使用普通请求(非流式)
|
# 使用普通请求(非流式)
|
||||||
response = requests.post(url, headers=headers, json=data, proxies=proxies,timeout=20)
|
response = requests.post(url, headers=headers, json=data, proxies=proxies, timeout=20)
|
||||||
|
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
self.LOG.error(f"Dify API请求失败: {response.status_code} {response.text}")
|
self.LOG.error(f"Dify API请求失败: {response.status_code} {response.text}")
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from typing import Dict, Any, Tuple, Optional, List
|
|||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
from utils.string_utils import remove_trailing_content
|
||||||
from utils.wechat.message_to_db import MessageStorage
|
from utils.wechat.message_to_db import MessageStorage
|
||||||
from utils.compress_chat_data import compress_chat_data
|
from utils.compress_chat_data import compress_chat_data
|
||||||
from plugin_common.message_plugin_interface import MessagePluginInterface
|
from plugin_common.message_plugin_interface import MessagePluginInterface
|
||||||
@@ -75,7 +76,7 @@ class MessageSummaryPlugin(MessagePluginInterface):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
@plugin_stats_decorator(plugin_name="群聊总结")
|
@plugin_stats_decorator(plugin_name="群聊总结")
|
||||||
@plugin_points_cost(10, "群聊总结消耗积分",Feature.SUMMARY_CAPABILITY)
|
@plugin_points_cost(10, "群聊总结消耗积分", Feature.SUMMARY_CAPABILITY)
|
||||||
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
def process_message(self, message: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
|
||||||
"""处理消息"""
|
"""处理消息"""
|
||||||
try:
|
try:
|
||||||
@@ -111,7 +112,7 @@ class MessageSummaryPlugin(MessagePluginInterface):
|
|||||||
group_name = self._sanitize_group_name(group_name)
|
group_name = self._sanitize_group_name(group_name)
|
||||||
if wcf:
|
if wcf:
|
||||||
wcf.send_text("⏳群消息总结中… 😊", group_id)
|
wcf.send_text("⏳群消息总结中… 😊", group_id)
|
||||||
|
|
||||||
# 创建线程异步处理总结生成和发送
|
# 创建线程异步处理总结生成和发送
|
||||||
summary_thread = threading.Thread(
|
summary_thread = threading.Thread(
|
||||||
target=self._async_generate_and_send_summary,
|
target=self._async_generate_and_send_summary,
|
||||||
@@ -119,19 +120,20 @@ class MessageSummaryPlugin(MessagePluginInterface):
|
|||||||
)
|
)
|
||||||
summary_thread.daemon = True # 设置为守护线程,主程序退出时线程也会退出
|
summary_thread.daemon = True # 设置为守护线程,主程序退出时线程也会退出
|
||||||
summary_thread.start()
|
summary_thread.start()
|
||||||
|
|
||||||
return True, "异步总结已启动"
|
return True, "异步总结已启动"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.LOG.error(f"处理消息总结命令失败: {e}")
|
self.LOG.error(f"处理消息总结命令失败: {e}")
|
||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
def _async_generate_and_send_summary(self, chat_content: str, group_name: str, group_id: str, message: Dict[str, Any]):
|
def _async_generate_and_send_summary(self, chat_content: str, group_name: str, group_id: str,
|
||||||
|
message: Dict[str, Any]):
|
||||||
"""异步生成并发送总结"""
|
"""异步生成并发送总结"""
|
||||||
try:
|
try:
|
||||||
# 生成总结
|
# 生成总结
|
||||||
summary, image_path = self._generate_summary(chat_content, group_name)
|
summary, image_path = self._generate_summary(chat_content, group_name)
|
||||||
|
|
||||||
# 发送总结结果
|
# 发送总结结果
|
||||||
wcf = message.get("wcf")
|
wcf = message.get("wcf")
|
||||||
if wcf:
|
if wcf:
|
||||||
@@ -199,6 +201,8 @@ class MessageSummaryPlugin(MessagePluginInterface):
|
|||||||
|
|
||||||
# 提取回答内容
|
# 提取回答内容
|
||||||
answer = response_data.get("answer", "")
|
answer = response_data.get("answer", "")
|
||||||
|
# 去除广告内容pollinations.ai 的广告
|
||||||
|
answer = remove_trailing_content(answer)
|
||||||
spath = ""
|
spath = ""
|
||||||
# 提取token使用情况
|
# 提取token使用情况
|
||||||
metadata = response_data.get("metadata", {})
|
metadata = response_data.get("metadata", {})
|
||||||
|
|||||||
15
utils/string_utils.py
Normal file
15
utils/string_utils.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
def remove_trailing_content(text, delimiter='---'):
|
||||||
|
"""
|
||||||
|
剔除文本中最后一个指定分隔符及其后面的内容。
|
||||||
|
|
||||||
|
参数:
|
||||||
|
text (str): 输入的文本
|
||||||
|
delimiter (str): 要查找的分隔符,默认为 '---'
|
||||||
|
|
||||||
|
返回:
|
||||||
|
str: 剔除分隔符及其后面内容后的文本
|
||||||
|
"""
|
||||||
|
index = text.rfind(delimiter)
|
||||||
|
if index != -1:
|
||||||
|
return text[:index].strip()
|
||||||
|
return text
|
||||||
Reference in New Issue
Block a user