增加语音发送支持

pull/20/head
UnCLAS-Prommer 2025-04-27 19:59:52 +08:00
parent 2785d6797d
commit 65bb6f5443
4 changed files with 29 additions and 5 deletions

View File

@ -23,7 +23,7 @@ class Config:
self.config_path = os.path.join(self.root_path, "config.toml")
def load_config(self):
include_configs = ["Nickname", "Napcat_Server", "MaiBot_Server", "Debug"]
include_configs = ["Nickname", "Napcat_Server", "MaiBot_Server", "Debug", "Voice"]
if os.path.exists(self.config_path):
with open(self.config_path, "rb") as f:
try:
@ -46,6 +46,7 @@ class Config:
self.mai_host = raw_config["MaiBot_Server"].get("host", "localhost")
self.mai_port = raw_config["MaiBot_Server"].get("port", 8000)
self.debug_level = raw_config["Debug"].get("level", "INFO")
self.use_tts = raw_config["Voice"].get("use_tts", False)
else:
logger.error("配置文件不存在!")
logger.info("正在创建配置文件...")

View File

@ -169,6 +169,10 @@ class RecvHandler:
logger.warning("群聊消息类型不支持")
return None
additional_config: dict = {}
if global_config.use_tts:
additional_config["allow_tts"] = True
# 消息信息
message_info: BaseMessageInfo = BaseMessageInfo(
platform=global_config.platform,
@ -178,6 +182,7 @@ class RecvHandler:
group_info=group_info,
template_info=template_info,
format_info=format_info,
additional_config=additional_config,
)
# 处理实际信息
@ -417,14 +422,14 @@ class RecvHandler:
seg_message: List[Seg] = []
if not sender_nickname:
logger.warning("无法获取被引用的人的昵称,返回默认值")
seg_message.append(Seg(type="text", data=f"[回复 QQ用户(未知id)"))
seg_message.append(Seg(type="text", data="[回复 QQ用户(未知id)"))
seg_message += reply_message
seg_message.append(Seg(type="text", data=f"],说:"))
seg_message.append(Seg(type="text", data="],说:"))
return seg_message
else:
seg_message.append(Seg(type="text", data=f"[回复 {sender_nickname}({sender_id})"))
seg_message += reply_message
seg_message.append(Seg(type="text", data=f"],说:"))
seg_message.append(Seg(type="text", data="],说:"))
return seg_message
async def handle_notice(self, raw_message: dict) -> None:

View File

@ -105,6 +105,9 @@ class SendHandler:
elif seg.type == "emoji":
emoji = seg.data
new_payload = self.build_payload(payload, self.handle_emoji_message(emoji), False)
elif seg.type == "voice":
voice = seg.data
new_payload = self.build_payload(payload, self.handle_voice_message(voice), False)
return new_payload
def build_payload(self, payload: list, addon: dict, is_reply: bool = False) -> list:
@ -132,7 +135,10 @@ class SendHandler:
"""处理图片消息"""
return {
"type": "image",
"data": {"file": f"base64://{encoded_image}", "subtype": 0},
"data": {
"file": f"base64://{encoded_image}",
"subtype": 0,
},
} # base64 编码的图片
def handle_emoji_message(self, encoded_emoji: str) -> dict:
@ -150,6 +156,15 @@ class SendHandler:
},
}
def handle_voice_message(self, encoded_voice: str) -> dict:
"""处理语音消息"""
if not encoded_voice:
return {}
return {
"type": "record",
"data": {"file": f"base64://{encoded_voice}"},
}
async def send_message_to_napcat(self, action: str, params: dict) -> dict:
request_uuid = str(uuid.uuid4())
payload = json.dumps({"action": action, "params": params, "echo": request_uuid})

View File

@ -16,5 +16,8 @@ group_list = []
private_list = []
enable_temp = false
[Voice] # 发送语音设置
use_tts = false # 是否使用tts语音请确保你配置了tts并有对应的adapter
[Debug]
level = "INFO" # 日志等级DEBUG, INFO, WARNING, ERROR