mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-13 02:30:26 +00:00
添加vtb语音包 (#74)
* fix:给msg进行url编码,解决青云客接口返回错误 * feat:增加一个vtbkeyboard.moe接口 * fix:id添加映射 * feat:优化逻辑 * feat:优化逻辑 * feat:优化逻辑 * feat:优化逻辑 * feat:增加一个随机vtb * feat:增加一个随机vtb * refactor:更改代码逻辑 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库 * feat:更新数据库驱动 * feat:增加定时更新数据脚本 * feat:更换驱动 * fix:更新zerobot * fix:修改全局变量 * fix:微调位置 * fix:解决modernc.org/sqlite版本冲突 * fix:解决go.sum冲突,更换cron库
This commit is contained in:
161
plugin_vtb_quotation/vtb_quotation.go
Normal file
161
plugin_vtb_quotation/vtb_quotation.go
Normal file
@@ -0,0 +1,161 @@
|
||||
package plugin_vtb_quotation
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/control"
|
||||
"github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model"
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/logoove/sqlite"
|
||||
log "github.com/sirupsen/logrus"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
regStr = ".*/(.*)"
|
||||
)
|
||||
|
||||
var engine = control.Register("vtbquotation", &control.Options{
|
||||
DisableOnDefault: false,
|
||||
Help: "vtb语录\n" +
|
||||
"随机vtb\n",
|
||||
})
|
||||
|
||||
func init() {
|
||||
engine.OnFullMatch("vtb语录").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
var firstIndex int
|
||||
var secondIndex int
|
||||
var thirdIndex int
|
||||
echo, cancel := ctx.FutureEvent("message",
|
||||
ctx.CheckSession()). // 只复读开启复读模式的人的消息
|
||||
Repeat() // 不断监听复读
|
||||
db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db")
|
||||
if err != nil {
|
||||
panic("failed to connect database")
|
||||
}
|
||||
defer db.Close()
|
||||
firstStepMessage := model.GetAllFirstCategoryMessage(db)
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(firstStepMessage))
|
||||
//步骤1,2,3,依次选择3个类别
|
||||
step := 1
|
||||
//错误次数
|
||||
errorCount := 0
|
||||
for {
|
||||
select {
|
||||
case e := <-echo: // 接收到需要复读的消息
|
||||
//错误次数达到3次,结束命令
|
||||
if errorCount == 3 {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("输入错误太多,请重新发指令"))
|
||||
cancel()
|
||||
return
|
||||
}
|
||||
if step == 1 {
|
||||
firstIndex, err = strconv.Atoi(e.RawMessage)
|
||||
log.Println(fmt.Sprintf("当前在第%d步", step))
|
||||
log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输"))
|
||||
errorCount++
|
||||
} else {
|
||||
SecondStepMessage := model.GetAllSecondCategoryMessageByFirstIndex(db, firstIndex)
|
||||
log.Println(SecondStepMessage)
|
||||
if SecondStepMessage == "" {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("你选择的序号没有内容,请重新选择,三次输入错误,指令可退出重输"))
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllFirstCategoryMessage(db)))
|
||||
errorCount++
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text(SecondStepMessage))
|
||||
step++
|
||||
}
|
||||
|
||||
}
|
||||
} else if step == 2 {
|
||||
secondIndex, err = strconv.Atoi(e.RawMessage)
|
||||
log.Println(fmt.Sprintf("当前在第%d步", step))
|
||||
log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输"))
|
||||
errorCount++
|
||||
} else {
|
||||
ThirdStepMessage := model.GetAllThirdCategoryMessageByFirstIndexAndSecondIndex(db, firstIndex, secondIndex)
|
||||
log.Println(ThirdStepMessage)
|
||||
if ThirdStepMessage == "" {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("你选择的序号没有内容,请重新选择,三次输入错误,指令可退出重输"))
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllSecondCategoryMessageByFirstIndex(db, firstIndex)))
|
||||
errorCount++
|
||||
} else {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text(ThirdStepMessage))
|
||||
step++
|
||||
}
|
||||
|
||||
}
|
||||
} else if step == 3 {
|
||||
thirdIndex, err = strconv.Atoi(e.RawMessage)
|
||||
log.Println(fmt.Sprintf("当前在第%d步", step))
|
||||
log.Println(fmt.Sprintf("firstIndex:%d,secondIndex:%d,thirdIndex:%d", firstIndex, secondIndex, thirdIndex))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("请输入正确的序号,三次输入错误,指令可退出重输"))
|
||||
errorCount++
|
||||
} else {
|
||||
tc := model.GetThirdCategory(db, firstIndex, secondIndex, thirdIndex)
|
||||
reg := regexp.MustCompile(regStr)
|
||||
recordUrl := tc.ThirdCategoryPath
|
||||
if recordUrl == "" {
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("没有内容请重新选择,三次输入错误,指令可退出重输"))
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text(model.GetAllFirstCategoryMessage(db)))
|
||||
errorCount++
|
||||
step = 1
|
||||
} else {
|
||||
if reg.MatchString(recordUrl) {
|
||||
log.Println(reg.FindStringSubmatch(recordUrl)[1])
|
||||
log.Println(url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]))
|
||||
recordUrl = strings.Replace(recordUrl, reg.FindStringSubmatch(recordUrl)[1], url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]), -1)
|
||||
recordUrl = strings.Replace(recordUrl, "+", "%20", -1)
|
||||
log.Println(recordUrl)
|
||||
}
|
||||
ctx.SendChain(message.Reply(e.MessageID), message.Text("请欣赏《"+tc.ThirdCategoryName+"》"))
|
||||
ctx.SendChain(message.Record(recordUrl))
|
||||
cancel()
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
case <-time.After(time.Second * 60):
|
||||
cancel()
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("vtb语录指令过期"))
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
engine.OnFullMatch("随机vtb").SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db")
|
||||
if err != nil {
|
||||
panic("failed to connect database")
|
||||
}
|
||||
defer db.Close()
|
||||
tc := model.RandomVtb(db)
|
||||
fc := model.GetFirstCategoryByFirstUid(db, tc.FirstCategoryUid)
|
||||
if (tc != model.ThirdCategory{}) && (fc != model.FirstCategory{}) {
|
||||
reg := regexp.MustCompile(regStr)
|
||||
recordUrl := tc.ThirdCategoryPath
|
||||
if reg.MatchString(recordUrl) {
|
||||
log.Println(reg.FindStringSubmatch(recordUrl)[1])
|
||||
log.Println(url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]))
|
||||
recordUrl = strings.Replace(recordUrl, reg.FindStringSubmatch(recordUrl)[1], url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]), -1)
|
||||
recordUrl = strings.Replace(recordUrl, "+", "%20", -1)
|
||||
log.Println(recordUrl)
|
||||
}
|
||||
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("请欣赏"+fc.FirstCategoryName+"的《"+tc.ThirdCategoryName+"》"))
|
||||
ctx.SendChain(message.Record(recordUrl))
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user