mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-19 19:06:07 +00:00
feat: 支持设置回复时引用原消息 #73
This commit is contained in:
@@ -84,6 +84,12 @@ image_api_params = {
|
|||||||
"size": "256x256", # 图片尺寸,支持256x256, 512x512, 1024x1024
|
"size": "256x256", # 图片尺寸,支持256x256, 512x512, 1024x1024
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 回复消息时是否引用原消息
|
||||||
|
quote_origin = True
|
||||||
|
|
||||||
|
# 回复绘图时是否包含图片描述
|
||||||
|
include_image_description = True
|
||||||
|
|
||||||
# 消息处理的超时时间,单位为秒
|
# 消息处理的超时时间,单位为秒
|
||||||
process_message_timeout = 15
|
process_message_timeout = 15
|
||||||
|
|
||||||
|
|||||||
+12
-5
@@ -7,6 +7,8 @@ import openai.error
|
|||||||
from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, HTTPAdapter, \
|
from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, HTTPAdapter, \
|
||||||
FriendMessage, Image
|
FriendMessage, Image
|
||||||
|
|
||||||
|
from mirai.models.message import Quote
|
||||||
|
|
||||||
import config
|
import config
|
||||||
import pkg.openai.session
|
import pkg.openai.session
|
||||||
import pkg.openai.manager
|
import pkg.openai.manager
|
||||||
@@ -108,8 +110,9 @@ class QQBotManager:
|
|||||||
global inst
|
global inst
|
||||||
inst = self
|
inst = self
|
||||||
|
|
||||||
def send(self, event, msg):
|
def send(self, event, msg, check_quote=True):
|
||||||
asyncio.run(self.bot.send(event, msg))
|
asyncio.run(
|
||||||
|
self.bot.send(event, msg, quote=True if hasattr(config, "quote_origin") and config.quote_origin and check_quote else False))
|
||||||
|
|
||||||
# 私聊消息处理
|
# 私聊消息处理
|
||||||
def on_person_message(self, event: MessageEvent):
|
def on_person_message(self, event: MessageEvent):
|
||||||
@@ -126,7 +129,9 @@ class QQBotManager:
|
|||||||
failed = 0
|
failed = 0
|
||||||
for i in range(self.retry):
|
for i in range(self.retry):
|
||||||
try:
|
try:
|
||||||
reply = processor.process_message('person', event.sender.id, str(event.message_chain))
|
reply = processor.process_message('person', event.sender.id, str(event.message_chain),
|
||||||
|
event.message_chain,
|
||||||
|
event.sender.id)
|
||||||
break
|
break
|
||||||
except FunctionTimedOut:
|
except FunctionTimedOut:
|
||||||
pkg.openai.session.get_session('person_{}'.format(event.sender.id)).release_response_lock()
|
pkg.openai.session.get_session('person_{}'.format(event.sender.id)).release_response_lock()
|
||||||
@@ -139,7 +144,7 @@ class QQBotManager:
|
|||||||
reply = ["[bot]err:请求超时"]
|
reply = ["[bot]err:请求超时"]
|
||||||
|
|
||||||
if reply:
|
if reply:
|
||||||
return self.send(event, reply)
|
return self.send(event, reply, check_quote=False)
|
||||||
|
|
||||||
# 群消息处理
|
# 群消息处理
|
||||||
def on_group_message(self, event: GroupMessage):
|
def on_group_message(self, event: GroupMessage):
|
||||||
@@ -156,7 +161,9 @@ class QQBotManager:
|
|||||||
for i in range(self.retry):
|
for i in range(self.retry):
|
||||||
try:
|
try:
|
||||||
replys = processor.process_message('group', event.group.id,
|
replys = processor.process_message('group', event.group.id,
|
||||||
str(event.message_chain).strip() if text is None else text)
|
str(event.message_chain).strip() if text is None else text,
|
||||||
|
event.message_chain,
|
||||||
|
event.sender.id)
|
||||||
break
|
break
|
||||||
except FunctionTimedOut:
|
except FunctionTimedOut:
|
||||||
failed += 1
|
failed += 1
|
||||||
|
|||||||
+19
-12
@@ -6,7 +6,8 @@ from func_timeout import func_set_timeout
|
|||||||
import logging
|
import logging
|
||||||
import openai
|
import openai
|
||||||
|
|
||||||
from mirai import Image
|
from mirai import Image, MessageChain
|
||||||
|
from mirai.models.message import Quote
|
||||||
|
|
||||||
import config
|
import config
|
||||||
|
|
||||||
@@ -17,7 +18,8 @@ processing = []
|
|||||||
|
|
||||||
|
|
||||||
@func_set_timeout(config.process_message_timeout)
|
@func_set_timeout(config.process_message_timeout)
|
||||||
def process_message(launcher_type: str, launcher_id: int, text_message: str) -> []:
|
def process_message(launcher_type: str, launcher_id: int, text_message: str, message_chain: MessageChain,
|
||||||
|
sender_id: int) -> MessageChain:
|
||||||
global processing
|
global processing
|
||||||
|
|
||||||
mgr = pkg.qqbot.manager.get_inst()
|
mgr = pkg.qqbot.manager.get_inst()
|
||||||
@@ -118,13 +120,14 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str) ->
|
|||||||
using_key_name = ""
|
using_key_name = ""
|
||||||
for api_key in api_keys:
|
for api_key in api_keys:
|
||||||
reply_str += "{}:\n - {}美元 {}%\n".format(api_key,
|
reply_str += "{}:\n - {}美元 {}%\n".format(api_key,
|
||||||
round(pkg.openai.manager.get_inst().key_mgr.get_fee(
|
round(
|
||||||
api_keys[api_key]), 6),
|
pkg.openai.manager.get_inst().key_mgr.get_fee(
|
||||||
round(
|
api_keys[api_key]), 6),
|
||||||
pkg.openai.manager.get_inst().key_mgr.get_fee(
|
round(
|
||||||
api_keys[
|
pkg.openai.manager.get_inst().key_mgr.get_fee(
|
||||||
api_key]) / pkg.openai.manager.get_inst().key_mgr.api_key_fee_threshold * 100,
|
api_keys[
|
||||||
3))
|
api_key]) / pkg.openai.manager.get_inst().key_mgr.api_key_fee_threshold * 100,
|
||||||
|
3))
|
||||||
if api_keys[api_key] == pkg.openai.manager.get_inst().key_mgr.using_key:
|
if api_keys[api_key] == pkg.openai.manager.get_inst().key_mgr.using_key:
|
||||||
using_key_name = api_key
|
using_key_name = api_key
|
||||||
reply_str += "\n当前使用:{}".format(using_key_name)
|
reply_str += "\n当前使用:{}".format(using_key_name)
|
||||||
@@ -140,7 +143,10 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str) ->
|
|||||||
res = session.draw_image(" ".join(params))
|
res = session.draw_image(" ".join(params))
|
||||||
|
|
||||||
logging.debug("draw_image result:{}".format(res))
|
logging.debug("draw_image result:{}".format(res))
|
||||||
reply = [Image(url=res['data'][0]['url']), " ".join(params)]
|
reply = [Image(url=res['data'][0]['url'])]
|
||||||
|
if not (hasattr(config, 'include_image_description')
|
||||||
|
and not config.include_image_description):
|
||||||
|
reply.append(" ".join(params))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
mgr.notify_admin("{}指令执行失败:{}".format(session_name, e))
|
mgr.notify_admin("{}指令执行失败:{}".format(session_name, e))
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
@@ -186,7 +192,8 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str) ->
|
|||||||
if reply is not None and type(reply[0]) == str:
|
if reply is not None and type(reply[0]) == str:
|
||||||
logging.info(
|
logging.info(
|
||||||
"回复[{}]文字消息:{}".format(session_name,
|
"回复[{}]文字消息:{}".format(session_name,
|
||||||
reply[0][:min(100, len(reply[0]))] + ("..." if len(reply[0]) > 100 else "")))
|
reply[0][:min(100, len(reply[0]))] + (
|
||||||
|
"..." if len(reply[0]) > 100 else "")))
|
||||||
reply = [mgr.reply_filter.process(reply[0])]
|
reply = [mgr.reply_filter.process(reply[0])]
|
||||||
else:
|
else:
|
||||||
logging.info("回复[{}]图片消息:{}".format(session_name, reply))
|
logging.info("回复[{}]图片消息:{}".format(session_name, reply))
|
||||||
@@ -196,4 +203,4 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str) ->
|
|||||||
finally:
|
finally:
|
||||||
pkg.openai.session.get_session(session_name).release_response_lock()
|
pkg.openai.session.get_session(session_name).release_response_lock()
|
||||||
|
|
||||||
return reply
|
return MessageChain(reply)
|
||||||
|
|||||||
Reference in New Issue
Block a user