1
1
from nonebot import get_driver , on_command , on_regex
2
2
from nonebot .adapters import Message
3
+ from nonebot .params import RegexDict
3
4
from nonebot .rule import to_me
4
- from nonebot_plugin_alconna import Reply , Text , UniMessage , UniMsg
5
+ from nonebot_plugin_alconna import Reply , UniMessage , UniMsg
5
6
6
7
from .config import config
7
8
from .exception import APIException
26
27
config .tts_chunk_length , ChunkLength .NORMAL
27
28
) # 请求语音长度
28
29
29
-
30
- tts_handler = on_regex (rf"^{ prefix } (.+?)说([\s\S]*)" , block = False )
30
+ # "xxx说xxx -s int"
31
+ tts_handler = on_regex (
32
+ rf"^{ prefix } (?P<speaker>.+?)说(?P<text>.+)?(?:\s+-s\s+(?P<speed>.+))?$" ,
33
+ priority = 15 ,
34
+ )
31
35
speaker_list = on_command (
32
36
"语音列表" , aliases = {"语音角色列表" }, block = True , rule = to_me ()
33
37
)
34
38
balance = on_command ("语音余额" , block = True , rule = to_me ())
35
39
36
40
37
41
@tts_handler .handle ()
38
- async def tts_handle (message : UniMsg ):
42
+ async def tts_handle (message : UniMsg , regex_group : dict = RegexDict ()): # noqa: B008
39
43
if message .has (Reply ):
40
44
front_reply = message [Reply , 0 ].msg
41
45
if isinstance (front_reply , Message ):
@@ -44,11 +48,12 @@ async def tts_handle(message: UniMsg):
44
48
text = front_reply
45
49
else :
46
50
text = str (front_reply )
47
- reply_msg = message [ Text , 0 ]. text
48
- speaker = reply_msg . split ( "说" , 1 )[ 0 ]
51
+ speaker = regex_group [ "speaker" ]
52
+ # TODO: speed = regex_group["speed" ]
49
53
else :
50
- speaker , text = (message [Text , 0 ].text ).split ("说" , 1 )
51
- speaker = speaker .replace (prefix , "" ).strip () # 去除前缀
54
+ text = regex_group ["text" ]
55
+ speaker = regex_group ["speaker" ]
56
+ # TODO: speed = regex_group["speed"]
52
57
53
58
try :
54
59
fish_audio_api = FishAudioAPI ()
@@ -58,12 +63,14 @@ async def tts_handle(message: UniMsg):
58
63
request = await fish_audio_api .generate_servettsrequest (
59
64
text , speaker , chunk_length
60
65
)
66
+ # TODO: request = await fish_audio_api.generate_ttsrequest(text, speaker, speed)
61
67
audio = await fish_audio_api .generate_tts (request )
62
68
else :
63
69
await tts_handler .send ("正在通过本地api合成语音, 请稍等" )
64
70
request = await fish_speech_api .generate_servettsrequest (
65
71
text , speaker , chunk_length
66
72
)
73
+ # TODO: request = await fish_speech_api.generate_ttsrequest(text, speaker, speed)
67
74
audio = await fish_speech_api .generate_tts (request )
68
75
await UniMessage .voice (raw = audio ).finish ()
69
76
0 commit comments