Skip to content

Commit f28e746

Browse files
committed
aireply add chatgpt
1 parent 3c905d9 commit f28e746

File tree

4 files changed

+80
-36
lines changed

4 files changed

+80
-36
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ go 1.19
44

55
require (
66
github.com/Baidu-AIP/golang-sdk v1.1.1
7-
github.com/FloatTech/AnimeAPI v1.6.1-0.20230207081411-573533b18194
7+
github.com/FloatTech/AnimeAPI v1.6.1-0.20230225045520-b537bd7dfbfe
88
github.com/FloatTech/floatbox v0.0.0-20230207075003-0f70b30c320d
99
github.com/FloatTech/gg v1.1.2
1010
github.com/FloatTech/imgfactory v0.2.2-0.20230215052637-9f7b05520ca9
1111
github.com/FloatTech/rendercard v0.0.10-0.20230215092509-ff0745852f23
1212
github.com/FloatTech/sqlite v1.5.7
1313
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b
1414
github.com/FloatTech/zbpctrl v1.5.3-0.20230130095145-714ad318cd52
15-
github.com/FloatTech/zbputils v1.6.2-0.20230215092613-4a7ebf458f16
15+
github.com/FloatTech/zbputils v1.6.2-0.20230217063720-e64cc4bde7c6
1616
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
1717
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
1818
github.com/antchfx/htmlquery v1.2.5

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ github.com/Baidu-AIP/golang-sdk v1.1.1 h1:RQsAmgDSAkiq22I6n7XJ2t3afgzFeqjY46FGhv
22
github.com/Baidu-AIP/golang-sdk v1.1.1/go.mod h1:bXnGw7xPeKt8aF7UCELKrV6UZ/46spItONK1RQBQj1Y=
33
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
44
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
5-
github.com/FloatTech/AnimeAPI v1.6.1-0.20230207081411-573533b18194 h1:+p85V0fdZNt3UoKreBeI6S3IOPvNmU5/Fnn39ipSkVk=
6-
github.com/FloatTech/AnimeAPI v1.6.1-0.20230207081411-573533b18194/go.mod h1:LCiKZivPVazRRCnnADQfIBFZiIPHHCFqaCpwZWsFehI=
5+
github.com/FloatTech/AnimeAPI v1.6.1-0.20230225045520-b537bd7dfbfe h1:C2PXT21kloAiOfnkg+AHH66CZZrgccz30YjHmKdmVTw=
6+
github.com/FloatTech/AnimeAPI v1.6.1-0.20230225045520-b537bd7dfbfe/go.mod h1:LCiKZivPVazRRCnnADQfIBFZiIPHHCFqaCpwZWsFehI=
77
github.com/FloatTech/floatbox v0.0.0-20230207075003-0f70b30c320d h1:vVqMO5Kejt5pueuZvBxfX+psa7UwE110TpITf5eV7Zw=
88
github.com/FloatTech/floatbox v0.0.0-20230207075003-0f70b30c320d/go.mod h1:OoZE4Ra7olpFaJSrlD6mcyT4chPLg9QBRE1pzTC8R84=
99
github.com/FloatTech/gg v1.1.2 h1:YolgOYg3uDHc1+g0bLtt6QuRA/pvLn+b9IBCIhOOX88=
@@ -18,8 +18,8 @@ github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJG
1818
github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs=
1919
github.com/FloatTech/zbpctrl v1.5.3-0.20230130095145-714ad318cd52 h1:BrStRXeosWh8L0iA/EjPd8w6xNexDkqki39ITZko/9Q=
2020
github.com/FloatTech/zbpctrl v1.5.3-0.20230130095145-714ad318cd52/go.mod h1:qqMLUwR7tKpqnAqsgI7aZbn0hbs2FEVF4ylMXqIpBdY=
21-
github.com/FloatTech/zbputils v1.6.2-0.20230215092613-4a7ebf458f16 h1:fOnI0V//DOW62vAhnC1a+qDMnlbJIAIiUHVX7CaUk5s=
22-
github.com/FloatTech/zbputils v1.6.2-0.20230215092613-4a7ebf458f16/go.mod h1:Lo7y67u9EGt7l3ZBavc5bbryEIaeRYfbVy9KWIw6qk4=
21+
github.com/FloatTech/zbputils v1.6.2-0.20230217063720-e64cc4bde7c6 h1:iHfqarofWkwwPfOG/5XbsvY7JutoEQmhxKvLxrFbiZw=
22+
github.com/FloatTech/zbputils v1.6.2-0.20230217063720-e64cc4bde7c6/go.mod h1:Lo7y67u9EGt7l3ZBavc5bbryEIaeRYfbVy9KWIw6qk4=
2323
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
2424
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e h1:wR3MXQ3VbUlPKOOUwLOYgh/QaJThBTYtsl673O3lqSA=
2525
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w=

plugin/ai_reply/ai_tts.go

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,28 @@ const (
3232
mockingbirdttsindex
3333
)
3434

35+
// extrattsname is the tts other than genshin vits
36+
var extrattsname = []string{"百度", "拟声鸟"}
37+
3538
const (
36-
defaultttsindexkey = -2905
39+
defaultttsindexkey = -2905
40+
gsapikeyextragrp = -1
41+
chatgptapikeyextragrp = -2
3742
)
3843

39-
var replyModes = [...]string{"青云客", "小爱"}
44+
type replymode struct {
45+
APIKey string // APIKey is for chatgpt
46+
replyModes []string `json:"-"`
47+
}
4048

41-
func setReplyMode(ctx *zero.Ctx, name string) error {
49+
func (r *replymode) setReplyMode(ctx *zero.Ctx, name string) error {
4250
gid := ctx.Event.GroupID
4351
if gid == 0 {
4452
gid = -ctx.Event.UserID
4553
}
4654
var ok bool
4755
var index int64
48-
for i, s := range replyModes {
56+
for i, s := range r.replyModes {
4957
if s == name {
5058
ok = true
5159
index = int64(i)
@@ -62,32 +70,55 @@ func setReplyMode(ctx *zero.Ctx, name string) error {
6270
return m.SetData(gid, (m.GetData(index)&^0xff)|(index&0xff))
6371
}
6472

65-
func getReplyMode(ctx *zero.Ctx) aireply.AIReply {
73+
func (r *replymode) getReplyMode(ctx *zero.Ctx) aireply.AIReply {
6674
gid := ctx.Event.GroupID
6775
if gid == 0 {
6876
gid = -ctx.Event.UserID
6977
}
7078
m, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
7179
if ok {
72-
if m.GetData(gid)&0xff == 1 {
80+
switch m.GetData(gid) & 0xff {
81+
case 0:
82+
return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName)
83+
case 1:
7384
return aireply.NewXiaoAi(aireply.XiaoAiURL, aireply.XiaoAiBotName)
85+
case 2:
86+
k := r.getAPIKey(ctx)
87+
if k != "" {
88+
return aireply.NewChatGPT(aireply.ChatGPTURL, k)
89+
}
90+
return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName)
7491
}
75-
return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName)
7692
}
7793
return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName)
7894
}
7995

96+
func (r *replymode) getAPIKey(ctx *zero.Ctx) string {
97+
if r.APIKey == "" {
98+
m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
99+
_ = m.Manager.GetExtra(chatgptapikeyextragrp, &r)
100+
logrus.Debugln("[tts] get api key:", r.APIKey)
101+
}
102+
return r.APIKey
103+
}
104+
105+
func (r *replymode) setAPIKey(m *ctrl.Control[*zero.Ctx], key string) error {
106+
r.APIKey = key
107+
_ = m.Manager.Response(chatgptapikeyextragrp)
108+
return m.Manager.SetExtra(chatgptapikeyextragrp, r)
109+
}
110+
80111
var ttsins = func() map[string]tts.TTS {
81112
m := make(map[string]tts.TTS, 128)
82-
for _, mode := range append(genshin.SoundList[:], "百度", "拟声鸟") {
113+
for _, mode := range append(genshin.SoundList[:], extrattsname...) {
83114
m[mode] = nil
84115
}
85116
return m
86117
}()
87118

88119
var ttsModes = func() []string {
89120
s := append(genshin.SoundList[:], make([]string, 64-len(genshin.SoundList))...) // 0-63
90-
s = append(s, "百度", "拟声鸟") // 64 65
121+
s = append(s, extrattsname...) // 64 65 ...
91122
return s
92123
}()
93124

@@ -127,16 +158,16 @@ func newttsmode() *ttsmode {
127158
func (t *ttsmode) getAPIKey(ctx *zero.Ctx) string {
128159
if t.APIKey == "" {
129160
m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
130-
_ = m.Manager.GetExtra(-1, &t)
161+
_ = m.Manager.GetExtra(gsapikeyextragrp, &t)
131162
logrus.Debugln("[tts] get api key:", t.APIKey)
132163
}
133164
return url.QueryEscape(t.APIKey)
134165
}
135166

136167
func (t *ttsmode) setAPIKey(m *ctrl.Control[*zero.Ctx], key string) error {
137168
t.APIKey = key
138-
_ = m.Manager.Response(-1)
139-
return m.Manager.SetExtra(-1, t)
169+
_ = m.Manager.Response(gsapikeyextragrp)
170+
return m.Manager.SetExtra(gsapikeyextragrp, t)
140171
}
141172

142173
func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt int) error {
@@ -157,9 +188,9 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt
157188
}
158189
if index == -1 {
159190
switch name {
160-
case "百度":
191+
case extrattsname[0]:
161192
index = baiduttsindex
162-
case "拟声鸟":
193+
case extrattsname[1]:
163194
index = mockingbirdttsindex
164195
default:
165196
return errors.New("语音人物" + name + "未注册index")
@@ -189,9 +220,9 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) {
189220
ins, ok := ttsins[mode]
190221
if !ok || ins == nil {
191222
switch mode {
192-
case "百度":
223+
case extrattsname[0]:
193224
ins = baidutts.NewBaiduTTS(int(i&0x0f00) >> 8)
194-
case "拟声鸟":
225+
case extrattsname[1]:
195226
var err error
196227
ins, err = mockingbird.NewMockingBirdTTS(int(i&0xf000) >> 12)
197228
if err != nil {
@@ -234,9 +265,9 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er
234265
}
235266
if index == -1 {
236267
switch name {
237-
case "百度":
268+
case extrattsname[0]:
238269
index = baiduttsindex
239-
case "拟声鸟":
270+
case extrattsname[1]:
240271
index = mockingbirdttsindex
241272
default:
242273
return errors.New("语音人物" + name + "未注册index")

plugin/ai_reply/main.go

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import (
1515
"github.com/wdvxdr1123/ZeroBot/message"
1616
)
1717

18-
var t = newttsmode()
18+
var replmd = replymode{
19+
replyModes: []string{"青云客", "小爱", "ChatGPT"},
20+
}
21+
22+
var ttsmd = newttsmode()
1923

2024
func init() { // 插件主体
2125
ent := control.Register("tts", &ctrl.Options[*zero.Ctx]{
@@ -32,13 +36,13 @@ func init() { // 插件主体
3236
enr := control.Register("aireply", &ctrl.Options[*zero.Ctx]{
3337
DisableOnDefault: false,
3438
Brief: "人工智能回复",
35-
Help: "- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客|小爱]",
39+
Help: "- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客|小爱|ChatGPT]\n- 设置 ChatGPT api key xxx",
3640
PrivateDataFolder: "aireply",
3741
})
3842

3943
enr.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser).
4044
Handle(func(ctx *zero.Ctx) {
41-
aireply := getReplyMode(ctx)
45+
aireply := replmd.getReplyMode(ctx)
4246
reply := message.ParseMessageFromString(aireply.Talk(ctx.Event.UserID, ctx.ExtractPlainText(), zero.BotConfig.NickName[0]))
4347
// 回复
4448
time.Sleep(time.Second * 1)
@@ -52,24 +56,33 @@ func init() { // 插件主体
5256

5357
enr.OnPrefix("设置回复模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
5458
param := ctx.State["args"].(string)
55-
err := setReplyMode(ctx, param)
59+
err := replmd.setReplyMode(ctx, param)
5660
if err != nil {
5761
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
5862
return
5963
}
6064
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功"))
6165
})
6266

67+
ent.OnRegex(`^设置\s*ChatGPT\s*api\s*key\s*(.*)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
68+
err := replmd.setAPIKey(ctx.State["manager"].(*ctrl.Control[*zero.Ctx]), ctx.State["regex_matched"].([]string)[1])
69+
if err != nil {
70+
ctx.SendChain(message.Text("ERROR: ", err))
71+
return
72+
}
73+
ctx.SendChain(message.Text("设置成功"))
74+
})
75+
6376
endpre := regexp.MustCompile(`\pP$`)
6477
ent.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser).
6578
Handle(func(ctx *zero.Ctx) {
6679
msg := ctx.ExtractPlainText()
6780
// 获取回复模式
68-
r := getReplyMode(ctx)
81+
r := replmd.getReplyMode(ctx)
6982
// 获取回复的文本
7083
reply := r.TalkPlain(ctx.Event.UserID, msg, zero.BotConfig.NickName[0])
7184
// 获取语音
72-
speaker, err := t.getSoundMode(ctx)
85+
speaker, err := ttsmd.getSoundMode(ctx)
7386
if err != nil {
7487
ctx.SendChain(message.Text("ERROR: ", err))
7588
return
@@ -104,15 +117,15 @@ func init() { // 插件主体
104117
}
105118
// 保存设置
106119
logrus.Debugln("[tts] t.setSoundMode( ctx", param, n, n, ")")
107-
err = t.setSoundMode(ctx, param, n, n)
120+
err = ttsmd.setSoundMode(ctx, param, n, n)
108121
if err != nil {
109122
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
110123
return
111124
}
112125
if banner, ok := genshin.TestRecord[param]; ok {
113126
logrus.Debugln("[tts] banner:", banner, "get sound mode...")
114127
// 设置验证
115-
speaker, err := t.getSoundMode(ctx)
128+
speaker, err := ttsmd.getSoundMode(ctx)
116129
if err != nil {
117130
ctx.SendChain(message.Text("ERROR: ", err))
118131
return
@@ -146,7 +159,7 @@ func init() { // 插件主体
146159
}
147160
}
148161
// 保存设置
149-
err = t.setDefaultSoundMode(param, n, n)
162+
err = ttsmd.setDefaultSoundMode(param, n, n)
150163
if err != nil {
151164
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
152165
return
@@ -155,13 +168,13 @@ func init() { // 插件主体
155168
})
156169

157170
ent.OnFullMatch("恢复成默认语音模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
158-
err := t.resetSoundMode(ctx)
171+
err := ttsmd.resetSoundMode(ctx)
159172
if err != nil {
160173
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
161174
return
162175
}
163176
// 设置验证
164-
speaker, err := t.getSoundMode(ctx)
177+
speaker, err := ttsmd.getSoundMode(ctx)
165178
if err != nil {
166179
ctx.SendChain(message.Text("ERROR: ", err))
167180
return
@@ -170,7 +183,7 @@ func init() { // 插件主体
170183
})
171184

172185
ent.OnRegex(`^设置原神语音\s*api\s*key\s*([0-9a-zA-Z-_]{54}==)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
173-
err := t.setAPIKey(ctx.State["manager"].(*ctrl.Control[*zero.Ctx]), ctx.State["regex_matched"].([]string)[1])
186+
err := ttsmd.setAPIKey(ctx.State["manager"].(*ctrl.Control[*zero.Ctx]), ctx.State["regex_matched"].([]string)[1])
174187
if err != nil {
175188
ctx.SendChain(message.Text("ERROR: ", err))
176189
return

0 commit comments

Comments
 (0)