From 65bb6f54437aba267fc7376bf533fe4977736f78 Mon Sep 17 00:00:00 2001 From: UnCLAS-Prommer Date: Sun, 27 Apr 2025 19:59:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=AD=E9=9F=B3=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.py | 3 ++- src/recv_handler.py | 11 ++++++++--- src/send_handler.py | 17 ++++++++++++++++- template/template_config.toml | 3 +++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/config.py b/src/config.py index 522ae6b..920b6d6 100644 --- a/src/config.py +++ b/src/config.py @@ -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("正在创建配置文件...") diff --git a/src/recv_handler.py b/src/recv_handler.py index e8b2646..911d9e9 100644 --- a/src/recv_handler.py +++ b/src/recv_handler.py @@ -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: diff --git a/src/send_handler.py b/src/send_handler.py index a179df0..247b512 100644 --- a/src/send_handler.py +++ b/src/send_handler.py @@ -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}) diff --git a/template/template_config.toml b/template/template_config.toml index 19df38f..f03a12c 100644 --- a/template/template_config.toml +++ b/template/template_config.toml @@ -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)