✏️ 优化 vtbquotation

This commit is contained in:
fumiama
2021-11-22 18:56:52 +08:00
parent dafcf7049b
commit f37daa5ca6
7 changed files with 327 additions and 324 deletions

View File

@@ -1,16 +1,14 @@
package plugin_vtb_quotation
package vtbquotation
import (
"fmt"
"net/url"
"regexp"
"strconv"
"strings"
"time"
"github.com/jinzhu/gorm"
_ "github.com/logoove/sqlite"
log "github.com/sirupsen/logrus"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
@@ -18,14 +16,12 @@ import (
"github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation/model"
)
var (
regStr = ".*/(.*)"
)
const regStr = ".*/(.*)"
const dbpath = "data/VtbQuotation/vtb.db"
var engine = control.Register("vtbquotation", &control.Options{
DisableOnDefault: false,
Help: "vtb语录\n" +
"随机vtb\n",
Help: "vtbquotation\n- vtb语录\n- 随机vtb\n",
})
func init() {
@@ -37,97 +33,99 @@ func init() {
echo, cancel := ctx.FutureEvent("message",
ctx.CheckSession()). // 只复读开启复读模式的人的消息
Repeat() // 不断监听复读
db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db")
db, err := model.Open(dbpath)
if err != nil {
panic("failed to connect database")
logrus.Errorln(err)
return
}
defer db.Close()
firstStepMessage := model.GetAllFirstCategoryMessage(db)
defer cancel()
firstStepMessage := db.GetAllFirstCategoryMessage()
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(firstStepMessage))
//步骤123依次选择3个类别
step := 1
//错误次数
// 步骤012依次选择3个类别
step := 0
// 错误次数
errorCount := 0
for {
select {
case e := <-echo: // 接收到需要复读的消息
//错误次数达到3次结束命令
if errorCount == 3 {
// 错误次数达到3次结束命令
if errorCount >= 3 {
ctx.SendChain(message.Reply(e.MessageID), message.Text("输入错误太多,请重新发指令"))
cancel()
return
}
if step == 1 {
switch step {
case 0:
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))
// 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)
SecondStepMessage := db.GetAllSecondCategoryMessageByFirstIndex(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)))
ctx.SendChain(message.Reply(e.MessageID), message.Text(db.GetAllFirstCategoryMessage()))
errorCount++
} else {
ctx.SendChain(message.Reply(e.MessageID), message.Text(SecondStepMessage))
step++
}
}
} else if step == 2 {
case 1:
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))
// 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)
ThirdStepMessage := db.GetAllThirdCategoryMessageByFirstIndexAndSecondIndex(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)))
ctx.SendChain(message.Reply(e.MessageID), message.Text(db.GetAllSecondCategoryMessageByFirstIndex(firstIndex)))
errorCount++
} else {
ctx.SendChain(message.Reply(e.MessageID), message.Text(ThirdStepMessage))
step++
}
}
} else if step == 3 {
case 2:
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))
// 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)
tc := db.GetThirdCategory(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)))
ctx.SendChain(message.Reply(e.MessageID), message.Text(db.GetAllFirstCategoryMessage()))
errorCount++
step = 1
} else {
if reg.MatchString(recordUrl) {
log.Println(reg.FindStringSubmatch(recordUrl)[1])
log.Println(url.QueryEscape(reg.FindStringSubmatch(recordUrl)[1]))
// 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)
// log.Println(recordUrl)
}
ctx.SendChain(message.Reply(e.MessageID), message.Text("请欣赏《"+tc.ThirdCategoryName+"》"))
ctx.SendChain(message.Record(recordUrl))
cancel()
return
}
}
default:
return
}
case <-time.After(time.Second * 60):
cancel()
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("vtb语录指令过期"))
return
}
@@ -135,25 +133,26 @@ func init() {
})
engine.OnFullMatch("随机vtb").SetBlock(true).
Handle(func(ctx *zero.Ctx) {
db, err := gorm.Open("sqlite3", "data/VtbQuotation/vtb.db")
db, err := model.Open(dbpath)
if err != nil {
panic("failed to connect database")
logrus.Errorln(err)
return
}
defer db.Close()
tc := model.RandomVtb(db)
fc := model.GetFirstCategoryByFirstUid(db, tc.FirstCategoryUid)
tc := db.RandomVtb()
fc := db.GetFirstCategoryByFirstUid(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]))
// 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)
// log.Println(recordUrl)
}
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("请欣赏"+fc.FirstCategoryName+"的《"+tc.ThirdCategoryName+"》"))
ctx.SendChain(message.Record(recordUrl))
}
db.Close()
})
}