@@ -11,28 +11,29 @@ import (
1111 "github.com/FloatTech/AnimeAPI/tts"
1212 "github.com/FloatTech/AnimeAPI/tts/baidutts"
1313 "github.com/FloatTech/AnimeAPI/tts/genshin"
14+ "github.com/FloatTech/AnimeAPI/tts/lolimi"
1415 "github.com/FloatTech/AnimeAPI/tts/ttscn"
1516 ctrl "github.com/FloatTech/zbpctrl"
1617 "github.com/FloatTech/zbputils/control"
1718)
1819
19- // 数据结构: [4 bits] [4 bits] [8 bits] [8 bits]
20- // [ttscn模式] [百度模式 ] [tts模式] [回复模式]
20+ // 数据结构: [8 bits] [8 bits] [8 bits]
21+ // [具体人物 ] [tts模式] [回复模式]
2122
2223// defaultttsindexkey
23- // 数据结构: [4 bits] [4 bits] [8 bits]
24- // [ttscn模式] [百度模式 ] [tts模式]
24+ // 数据结构: [8 bits] [8 bits]
25+ // [具体人物 ] [tts模式]
2526
26- // [tts模式]: 0~200 genshin 201 baidu 202 ttscn
27+ // [tts模式]: 0~200 genshin 201 baidu 202 ttscn 203 lolimi
2728
2829const (
29- lastgsttsindex = 200 + iota
30- baiduttsindex
30+ baiduttsindex = 201 + iota
3131 ttscnttsindex
32+ lolimittsindex
3233)
3334
3435// extrattsname is the tts other than genshin vits
35- var extrattsname = []string {"百度" , "TTSCN" }
36+ var extrattsname = []string {"百度" , "TTSCN" , "桑帛云" }
3637
3738var ttscnspeakers = [... ]string {
3839 "晓晓(女 - 年轻人)" ,
@@ -84,7 +85,7 @@ func (r replymode) setReplyMode(ctx *zero.Ctx, name string) error {
8485 if ! ok {
8586 return errors .New ("no such plugin" )
8687 }
87- return m .SetData (gid , (m .GetData (index )&^0xff )| (index & 0xff ))
88+ return m .SetData (gid , (m .GetData (gid )&^0xff )| (index & 0xff ))
8889}
8990
9091func (r replymode ) getReplyMode (ctx * zero.Ctx ) aireply.AIReply {
@@ -96,18 +97,22 @@ func (r replymode) getReplyMode(ctx *zero.Ctx) aireply.AIReply {
9697 if ok {
9798 switch m .GetData (gid ) & 0xff {
9899 case 0 :
99- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
100+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
100101 case 1 :
101- return aireply .NewXiaoAi (aireply .XiaoAiURL , aireply .XiaoAiBotName )
102+ return aireply .NewLolimiAi (aireply .MomoURL , aireply .MomoBotName )
102103 case 2 :
104+ return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
105+ case 3 :
106+ return aireply .NewXiaoAi (aireply .XiaoAiURL , aireply .XiaoAiBotName )
107+ case 4 :
103108 k := ཆཏ .k
104109 if k != "" {
105110 return aireply .NewChatGPT (aireply .ChatGPTURL , k )
106111 }
107- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
112+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
108113 }
109114 }
110- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
115+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
111116}
112117
113118var ttsins = func () map [string ]tts.TTS {
@@ -119,8 +124,8 @@ var ttsins = func() map[string]tts.TTS {
119124}()
120125
121126var ttsModes = func () []string {
122- s := append (genshin .SoundList [:], make ([]string , lastgsttsindex - len (genshin .SoundList ))... ) // 0-200
123- s = append (s , extrattsname ... ) // 201 202 ...
127+ s := append (genshin .SoundList [:], make ([]string , baiduttsindex - len (genshin .SoundList ))... ) // 0-200
128+ s = append (s , extrattsname ... ) // 201 202 ...
124129 return s
125130}()
126131
@@ -146,14 +151,14 @@ func newttsmode() *ttsmode {
146151 if ok {
147152 index := m .GetData (defaultttsindexkey )
148153 msk := index & 0xff
149- if msk >= 0 && (msk < int64 (len (genshin . SoundList )) || msk == baiduttsindex || msk == ttscnttsindex ) {
154+ if msk >= 0 && (msk < int64 (len (ttsModes )) ) {
150155 (* syncx.Map [int64 , int64 ])(t ).Store (defaultttsindexkey , index )
151156 }
152157 }
153158 return t
154159}
155160
156- func (t * ttsmode ) setSoundMode (ctx * zero.Ctx , name string , baiduper , mockingsynt int ) error {
161+ func (t * ttsmode ) setSoundMode (ctx * zero.Ctx , name string , character int ) error {
157162 gid := ctx .Event .GroupID
158163 if gid == 0 {
159164 gid = - ctx .Event .UserID
@@ -165,7 +170,7 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt
165170 var index = int64 (- 1 )
166171 for i , s := range genshin .SoundList {
167172 if s == name {
168- index = int64 (i )
173+ index = int64 (i + 1 )
169174 break
170175 }
171176 }
@@ -175,13 +180,17 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt
175180 index = baiduttsindex
176181 case extrattsname [1 ]:
177182 index = ttscnttsindex
183+ case extrattsname [2 ]:
184+ index = lolimittsindex
178185 default :
179186 return errors .New ("语音人物" + name + "未注册index" )
180187 }
181188 }
182189 m := ctx .State ["manager" ].(* ctrl.Control [* zero.Ctx ])
183- (* syncx.Map [int64 , int64 ])(t ).Store (gid , index )
184- return m .SetData (gid , (m .GetData (gid )&^0xffff00 )| ((index << 8 )& 0xff00 )| ((int64 (baiduper )<< 16 )& 0x0f0000 )| ((int64 (mockingsynt )<< 20 )& 0xf00000 ))
190+ //按原来的逻辑map存的是前16位
191+ storeIndex := (m .GetData (gid ) &^ 0xffff00 ) | ((index << 8 ) & 0xff00 ) | ((int64 (character ) << 16 ) & 0xff0000 )
192+ (* syncx.Map [int64 , int64 ])(t ).Store (gid , (storeIndex >> 8 )& 0xffff )
193+ return m .SetData (gid , storeIndex )
185194}
186195
187196func (t * ttsmode ) getSoundMode (ctx * zero.Ctx ) (tts.TTS , error ) {
@@ -195,8 +204,12 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) {
195204 i = m .GetData (gid ) >> 8
196205 }
197206 m := i & 0xff
198- if m < 0 || (m >= int64 (len (genshin . SoundList )) && m != baiduttsindex && m != ttscnttsindex ) {
207+ if m <= 0 || (m >= int64 (len (ttsModes )) ) {
199208 i , _ = (* syncx.Map [int64 , int64 ])(t ).Load (defaultttsindexkey )
209+ if i == 0 {
210+ i = ctx .State ["manager" ].(* ctrl.Control [* zero.Ctx ]).GetData (defaultttsindexkey )
211+ (* syncx.Map [int64 , int64 ])(t ).Store (defaultttsindexkey , i )
212+ }
200213 m = i & 0xff
201214 }
202215 mode := ttsModes [m ]
@@ -205,20 +218,22 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) {
205218 switch mode {
206219 case extrattsname [0 ]:
207220 id , sec , _ := strings .Cut (百 .k , "," )
208- ins = baidutts .NewBaiduTTS (int (i & 0x0f00 )>> 8 , id , sec )
221+ ins = baidutts .NewBaiduTTS (int (i & 0xff00 )>> 8 , id , sec )
209222 case extrattsname [1 ]:
210223 var err error
211- ins , err = ttscn .NewTTSCN ("中文(普通话,简体)" , ttscnspeakers [int (i & 0xf000 )>> 12 ], ttscn .KBRates [0 ])
224+ ins , err = ttscn .NewTTSCN ("中文(普通话,简体)" , ttscnspeakers [int (i & 0xff00 )>> 8 ], ttscn .KBRates [0 ])
212225 if err != nil {
213226 return nil , err
214227 }
228+ case extrattsname [2 ]:
229+ ins = lolimi .NewLolimi (int (i & 0xff00 ) >> 8 )
215230 default : // 原神
216231 k := 原 .k
217232 if k != "" {
218- ins = genshin .NewGenshin (int (m ), 原 .k )
233+ ins = genshin .NewGenshin (int (m - 1 ), 原 .k )
219234 ttsins [mode ] = ins
220235 } else {
221- return nil , errors . New ( "no valid speaker" )
236+ ins = lolimi . NewLolimi ( int ( i & 0xff00 ) >> 8 )
222237 }
223238 }
224239 }
@@ -231,19 +246,20 @@ func (t *ttsmode) resetSoundMode(ctx *zero.Ctx) error {
231246 gid = - ctx .Event .UserID
232247 }
233248 m := ctx .State ["manager" ].(* ctrl.Control [* zero.Ctx ])
234- index := m .GetData (defaultttsindexkey )
235- return m .SetData (gid , (m .GetData (gid )& 0xff )| ((index &^0xff )<< 8 )) // 重置数据
249+ // 只保留后面8位
250+ (* syncx.Map [int64 , int64 ])(t ).Delete (gid )
251+ return m .SetData (gid , (m .GetData (gid ) & 0xff )) // 重置数据
236252}
237253
238- func (t * ttsmode ) setDefaultSoundMode (name string , baiduper , mockingsynt int ) error {
254+ func (t * ttsmode ) setDefaultSoundMode (name string , character int ) error {
239255 _ , ok := ttsins [name ]
240256 if ! ok {
241257 return errors .New ("不支持设置语音人物" + name )
242258 }
243259 index := int64 (- 1 )
244260 for i , s := range genshin .SoundList {
245261 if s == name {
246- index = int64 (i )
262+ index = int64 (i + 1 )
247263 break
248264 }
249265 }
@@ -253,6 +269,8 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er
253269 index = baiduttsindex
254270 case extrattsname [1 ]:
255271 index = ttscnttsindex
272+ case extrattsname [2 ]:
273+ index = lolimittsindex
256274 default :
257275 return errors .New ("语音人物" + name + "未注册index" )
258276 }
@@ -261,6 +279,7 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er
261279 if ! ok {
262280 return errors .New ("[tts] service not found" )
263281 }
264- (* syncx.Map [int64 , int64 ])(t ).Store (defaultttsindexkey , index )
265- return m .SetData (defaultttsindexkey , (index & 0xff )| ((int64 (baiduper )<< 8 )& 0x0f00 )| ((int64 (mockingsynt )<< 12 )& 0xf000 ))
282+ storeIndex := (index & 0xff ) | ((int64 (character ) << 8 ) & 0xff00 )
283+ (* syncx.Map [int64 , int64 ])(t ).Store (defaultttsindexkey , storeIndex )
284+ return m .SetData (defaultttsindexkey , storeIndex )
266285}
0 commit comments