@@ -11,28 +11,29 @@ import (
11
11
"github.com/FloatTech/AnimeAPI/tts"
12
12
"github.com/FloatTech/AnimeAPI/tts/baidutts"
13
13
"github.com/FloatTech/AnimeAPI/tts/genshin"
14
+ "github.com/FloatTech/AnimeAPI/tts/lolimi"
14
15
"github.com/FloatTech/AnimeAPI/tts/ttscn"
15
16
ctrl "github.com/FloatTech/zbpctrl"
16
17
"github.com/FloatTech/zbputils/control"
17
18
)
18
19
19
- // 数据结构: [4 bits] [4 bits] [8 bits] [8 bits]
20
- // [ttscn模式] [百度模式 ] [tts模式] [回复模式]
20
+ // 数据结构: [8 bits] [8 bits] [8 bits]
21
+ // [具体人物 ] [tts模式] [回复模式]
21
22
22
23
// defaultttsindexkey
23
- // 数据结构: [4 bits] [4 bits] [8 bits]
24
- // [ttscn模式] [百度模式 ] [tts模式]
24
+ // 数据结构: [8 bits] [8 bits]
25
+ // [具体人物 ] [tts模式]
25
26
26
- // [tts模式]: 0~200 genshin 201 baidu 202 ttscn
27
+ // [tts模式]: 0~200 genshin 201 baidu 202 ttscn 203 lolimi
27
28
28
29
const (
29
- lastgsttsindex = 200 + iota
30
- baiduttsindex
30
+ baiduttsindex = 201 + iota
31
31
ttscnttsindex
32
+ lolimittsindex
32
33
)
33
34
34
35
// extrattsname is the tts other than genshin vits
35
- var extrattsname = []string {"百度" , "TTSCN" }
36
+ var extrattsname = []string {"百度" , "TTSCN" , "桑帛云" }
36
37
37
38
var ttscnspeakers = [... ]string {
38
39
"晓晓(女 - 年轻人)" ,
@@ -84,7 +85,7 @@ func (r replymode) setReplyMode(ctx *zero.Ctx, name string) error {
84
85
if ! ok {
85
86
return errors .New ("no such plugin" )
86
87
}
87
- return m .SetData (gid , (m .GetData (index )&^0xff )| (index & 0xff ))
88
+ return m .SetData (gid , (m .GetData (gid )&^0xff )| (index & 0xff ))
88
89
}
89
90
90
91
func (r replymode ) getReplyMode (ctx * zero.Ctx ) aireply.AIReply {
@@ -96,18 +97,22 @@ func (r replymode) getReplyMode(ctx *zero.Ctx) aireply.AIReply {
96
97
if ok {
97
98
switch m .GetData (gid ) & 0xff {
98
99
case 0 :
99
- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
100
+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
100
101
case 1 :
101
- return aireply .NewXiaoAi (aireply .XiaoAiURL , aireply .XiaoAiBotName )
102
+ return aireply .NewLolimiAi (aireply .MomoURL , aireply .MomoBotName )
102
103
case 2 :
104
+ return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
105
+ case 3 :
106
+ return aireply .NewXiaoAi (aireply .XiaoAiURL , aireply .XiaoAiBotName )
107
+ case 4 :
103
108
k := ཆཏ .k
104
109
if k != "" {
105
110
return aireply .NewChatGPT (aireply .ChatGPTURL , k )
106
111
}
107
- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
112
+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
108
113
}
109
114
}
110
- return aireply .NewQYK (aireply .QYKURL , aireply .QYKBotName )
115
+ return aireply .NewLolimiAi (aireply .JingfengURL , aireply .JingfengBotName )
111
116
}
112
117
113
118
var ttsins = func () map [string ]tts.TTS {
@@ -119,8 +124,8 @@ var ttsins = func() map[string]tts.TTS {
119
124
}()
120
125
121
126
var 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 ...
124
129
return s
125
130
}()
126
131
@@ -146,14 +151,14 @@ func newttsmode() *ttsmode {
146
151
if ok {
147
152
index := m .GetData (defaultttsindexkey )
148
153
msk := index & 0xff
149
- if msk >= 0 && (msk < int64 (len (genshin . SoundList )) || msk == baiduttsindex || msk == ttscnttsindex ) {
154
+ if msk >= 0 && (msk < int64 (len (ttsModes )) ) {
150
155
(* syncx.Map [int64 , int64 ])(t ).Store (defaultttsindexkey , index )
151
156
}
152
157
}
153
158
return t
154
159
}
155
160
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 {
157
162
gid := ctx .Event .GroupID
158
163
if gid == 0 {
159
164
gid = - ctx .Event .UserID
@@ -165,7 +170,7 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt
165
170
var index = int64 (- 1 )
166
171
for i , s := range genshin .SoundList {
167
172
if s == name {
168
- index = int64 (i )
173
+ index = int64 (i + 1 )
169
174
break
170
175
}
171
176
}
@@ -175,13 +180,17 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt
175
180
index = baiduttsindex
176
181
case extrattsname [1 ]:
177
182
index = ttscnttsindex
183
+ case extrattsname [2 ]:
184
+ index = lolimittsindex
178
185
default :
179
186
return errors .New ("语音人物" + name + "未注册index" )
180
187
}
181
188
}
182
189
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 )
185
194
}
186
195
187
196
func (t * ttsmode ) getSoundMode (ctx * zero.Ctx ) (tts.TTS , error ) {
@@ -195,8 +204,12 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) {
195
204
i = m .GetData (gid ) >> 8
196
205
}
197
206
m := i & 0xff
198
- if m < 0 || (m >= int64 (len (genshin . SoundList )) && m != baiduttsindex && m != ttscnttsindex ) {
207
+ if m <= 0 || (m >= int64 (len (ttsModes )) ) {
199
208
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
+ }
200
213
m = i & 0xff
201
214
}
202
215
mode := ttsModes [m ]
@@ -205,20 +218,22 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) {
205
218
switch mode {
206
219
case extrattsname [0 ]:
207
220
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 )
209
222
case extrattsname [1 ]:
210
223
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 ])
212
225
if err != nil {
213
226
return nil , err
214
227
}
228
+ case extrattsname [2 ]:
229
+ ins = lolimi .NewLolimi (int (i & 0xff00 ) >> 8 )
215
230
default : // 原神
216
231
k := 原 .k
217
232
if k != "" {
218
- ins = genshin .NewGenshin (int (m ), 原 .k )
233
+ ins = genshin .NewGenshin (int (m - 1 ), 原 .k )
219
234
ttsins [mode ] = ins
220
235
} else {
221
- return nil , errors . New ( "no valid speaker" )
236
+ ins = lolimi . NewLolimi ( int ( i & 0xff00 ) >> 8 )
222
237
}
223
238
}
224
239
}
@@ -231,19 +246,20 @@ func (t *ttsmode) resetSoundMode(ctx *zero.Ctx) error {
231
246
gid = - ctx .Event .UserID
232
247
}
233
248
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 )) // 重置数据
236
252
}
237
253
238
- func (t * ttsmode ) setDefaultSoundMode (name string , baiduper , mockingsynt int ) error {
254
+ func (t * ttsmode ) setDefaultSoundMode (name string , character int ) error {
239
255
_ , ok := ttsins [name ]
240
256
if ! ok {
241
257
return errors .New ("不支持设置语音人物" + name )
242
258
}
243
259
index := int64 (- 1 )
244
260
for i , s := range genshin .SoundList {
245
261
if s == name {
246
- index = int64 (i )
262
+ index = int64 (i + 1 )
247
263
break
248
264
}
249
265
}
@@ -253,6 +269,8 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er
253
269
index = baiduttsindex
254
270
case extrattsname [1 ]:
255
271
index = ttscnttsindex
272
+ case extrattsname [2 ]:
273
+ index = lolimittsindex
256
274
default :
257
275
return errors .New ("语音人物" + name + "未注册index" )
258
276
}
@@ -261,6 +279,7 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er
261
279
if ! ok {
262
280
return errors .New ("[tts] service not found" )
263
281
}
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 )
266
285
}
0 commit comments