mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
修改tts指令使用权限,防止泛用滥用 (#400)
* 修改指令权限,防止泛用 * Update ai_tts.go * Update ai_tts.go * Update ai_tts.go
This commit is contained in:
parent
1a424ebcd0
commit
a5ecb4bf7d
@ -1,6 +1,7 @@
|
|||||||
package aireply
|
package aireply
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
@ -125,8 +126,15 @@ func init() {
|
|||||||
"- @Bot 任意文本(任意一句话回复)\n" +
|
"- @Bot 任意文本(任意一句话回复)\n" +
|
||||||
"- 设置语音模式[原神人物]\n" +
|
"- 设置语音模式[原神人物]\n" +
|
||||||
"- 设置默认语音模式[原神人物]\n" +
|
"- 设置默认语音模式[原神人物]\n" +
|
||||||
|
"- 恢复成默认语音模式\n" +
|
||||||
"当前适用的原神人物含有以下:\n" + list(soundList[:], 5),
|
"当前适用的原神人物含有以下:\n" + list(soundList[:], 5),
|
||||||
})
|
})
|
||||||
|
tts.RLock()
|
||||||
|
defer tts.RUnlock()
|
||||||
|
m, ok := control.Lookup(ttsServiceName)
|
||||||
|
if ok {
|
||||||
|
tts.defaultSoundMode = soundList[m.GetData(-2905)]
|
||||||
|
}
|
||||||
engine.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser).
|
engine.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||||
Handle(func(ctx *zero.Ctx) {
|
Handle(func(ctx *zero.Ctx) {
|
||||||
msg := ctx.ExtractPlainText()
|
msg := ctx.ExtractPlainText()
|
||||||
@ -154,13 +162,14 @@ func init() {
|
|||||||
))).Add("cache", 0)
|
))).Add("cache", 0)
|
||||||
if record.Data == nil {
|
if record.Data == nil {
|
||||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply))
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
// 发送语音
|
// 发送语音
|
||||||
if ID := ctx.SendChain(record); ID.ID() == 0 {
|
if ID := ctx.SendChain(record); ID.ID() == 0 {
|
||||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply))
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
engine.OnRegex(`^设置语音模式(.*)$`, func(ctx *zero.Ctx) bool {
|
engine.OnRegex(`^设置语音模式(.*)$`, zero.AdminPermission, func(ctx *zero.Ctx) bool {
|
||||||
param := ctx.State["regex_matched"].([]string)[1]
|
param := ctx.State["regex_matched"].([]string)[1]
|
||||||
if _, ok := testRecord[param]; !ok {
|
if _, ok := testRecord[param]; !ok {
|
||||||
return false
|
return false
|
||||||
@ -188,7 +197,7 @@ func init() {
|
|||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,默认模式为", name))
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,默认模式为", name))
|
||||||
})
|
})
|
||||||
engine.OnRegex(`^设置默认语音模式(.*)$`, func(ctx *zero.Ctx) bool {
|
engine.OnRegex(`^设置默认语音模式(.*)$`, zero.SuperUserPermission, func(ctx *zero.Ctx) bool {
|
||||||
param := ctx.State["regex_matched"].([]string)[1]
|
param := ctx.State["regex_matched"].([]string)[1]
|
||||||
if _, ok := testRecord[param]; !ok {
|
if _, ok := testRecord[param]; !ok {
|
||||||
return false
|
return false
|
||||||
@ -197,7 +206,11 @@ func init() {
|
|||||||
}).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
}).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||||
param := ctx.State["regex_matched"].([]string)[1]
|
param := ctx.State["regex_matched"].([]string)[1]
|
||||||
// 保存设置
|
// 保存设置
|
||||||
tts.setDefaultSoundMode(param)
|
err := tts.setDefaultSoundMode(param)
|
||||||
|
if err != nil {
|
||||||
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
// 设置验证
|
// 设置验证
|
||||||
name := tts.defaultSoundMode
|
name := tts.defaultSoundMode
|
||||||
record := message.Record(fmt.Sprintf(cnapi, url.QueryEscape(name), url.QueryEscape(testRecord[name]))).Add("cache", 0)
|
record := message.Record(fmt.Sprintf(cnapi, url.QueryEscape(name), url.QueryEscape(testRecord[name]))).Add("cache", 0)
|
||||||
@ -208,6 +221,36 @@ func init() {
|
|||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,默认模式为", name))
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,默认模式为", name))
|
||||||
})
|
})
|
||||||
|
engine.OnFullMatch("恢复成默认语音模式", zero.AdminPermission, func(ctx *zero.Ctx) bool {
|
||||||
|
gid := ctx.Event.GroupID
|
||||||
|
if gid == 0 {
|
||||||
|
gid = -ctx.Event.UserID
|
||||||
|
}
|
||||||
|
m, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||||
|
if ok {
|
||||||
|
tts.RLock()
|
||||||
|
defer tts.RUnlock()
|
||||||
|
index := m.GetData(gid)
|
||||||
|
if int(index) < len(tts.soundMode) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||||
|
gid := ctx.Event.GroupID
|
||||||
|
if gid == 0 {
|
||||||
|
gid = -ctx.Event.UserID
|
||||||
|
}
|
||||||
|
m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx])
|
||||||
|
err := m.SetData(gid, 255)
|
||||||
|
if err != nil {
|
||||||
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 设置验证
|
||||||
|
name := tts.getSoundMode(ctx)
|
||||||
|
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,当前默认语音模式为", name))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tts *ttsInstances) setSoundMode(ctx *zero.Ctx, name string) error {
|
func (tts *ttsInstances) setSoundMode(ctx *zero.Ctx, name string) error {
|
||||||
@ -245,7 +288,7 @@ func (tts *ttsInstances) getSoundMode(ctx *zero.Ctx) (name string) {
|
|||||||
return tts.defaultSoundMode
|
return tts.defaultSoundMode
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tts *ttsInstances) setDefaultSoundMode(name string) {
|
func (tts *ttsInstances) setDefaultSoundMode(name string) error {
|
||||||
var index int64
|
var index int64
|
||||||
tts.RLock()
|
tts.RLock()
|
||||||
for i, s := range tts.soundMode {
|
for i, s := range tts.soundMode {
|
||||||
@ -254,6 +297,18 @@ func (tts *ttsInstances) setDefaultSoundMode(name string) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tts.defaultSoundMode = tts.soundMode[index]
|
|
||||||
tts.RUnlock()
|
tts.RUnlock()
|
||||||
|
m, ok := control.Lookup(ttsServiceName)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("[tts]service no fund ")
|
||||||
|
}
|
||||||
|
err := m.SetData(-2905, index)
|
||||||
|
if err == nil {
|
||||||
|
soundMode := tts.soundMode[m.GetData(-2905)]
|
||||||
|
if soundMode != tts.soundMode[index] {
|
||||||
|
return errors.New("[tts]检验数据失败,当前写入的数据为" + soundMode)
|
||||||
|
}
|
||||||
|
tts.defaultSoundMode = soundMode
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user