mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-12 02:00:24 +00:00
优化签到插件,qqwife插件添加礼物系统 (#480)
This commit is contained in:
@@ -24,6 +24,9 @@ import (
|
||||
"github.com/FloatTech/floatbox/file"
|
||||
"github.com/FloatTech/floatbox/img/writer"
|
||||
"github.com/FloatTech/zbputils/img/text"
|
||||
|
||||
// 货币系统
|
||||
"github.com/FloatTech/AnimeAPI/wallet"
|
||||
)
|
||||
|
||||
// nolint: asciicheck
|
||||
@@ -66,6 +69,7 @@ func init() {
|
||||
"- (娶|嫁)@对方QQ\n自由选择对象,自由恋爱(好感度越高成功率越高,保底30%概率)\n" +
|
||||
"- 当[对方Q号|@对方QQ]的小三\n我和你才是真爱,为了你我愿意付出一切(好感度越高成功率越高,保底10%概率)\n" +
|
||||
"- 闹离婚\n你谁啊,给我滚(好感度越高成功率越低)\n" +
|
||||
"- 买礼物给[对方Q号|@对方QQ]\n使用小熊饼干获取好感度\n" +
|
||||
"- 做媒 @攻方QQ @受方QQ\n身为管理,群友的xing福是要搭把手的(攻受双方好感度越高成功率越高,保底30%概率)\n" +
|
||||
"--------------------------------\n好感度规则\n--------------------------------\n" +
|
||||
"‘娶群友’指令好感度随机增加1~5。\n‘A牛B的C’会导致C恨A,好感度-5;\nB为了报复A,好感度+5(什么柜子play)\nA为BC做媒,成功B、C对A好感度+1反之-1\n做媒成功BC好感度+1",
|
||||
@@ -458,6 +462,74 @@ func init() {
|
||||
),
|
||||
)
|
||||
})
|
||||
// 礼物系统
|
||||
engine.OnRegex(`^买礼物给\s?(\[CQ:at,qq=(\d+)\]|(\d+))`, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
uid := ctx.Event.UserID
|
||||
fiancee := ctx.State["regex_matched"].([]string)
|
||||
gay, _ := strconv.ParseInt(fiancee[2]+fiancee[3], 10, 64)
|
||||
// 获取CD
|
||||
cdTime, err := 民政局.getCDtime(gid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]获取该群技能CD错误(将以CD12H计算)\n", err))
|
||||
}
|
||||
ok, err := 民政局.compareCDtime(gid, uid, 5, cdTime)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]查询用户CD状态失败,请重试\n", err))
|
||||
return
|
||||
}
|
||||
if !ok {
|
||||
ctx.SendChain(message.Text("舔狗,今天你已经送过礼物了。"))
|
||||
return
|
||||
}
|
||||
// 写入CD
|
||||
err = 民政局.writeCDtime(gid, uid, 5)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
// 获取好感度
|
||||
favor, err := 民政局.getFavorability(uid, gay)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
// 对接小熊饼干
|
||||
walletinfo := wallet.GetWalletOf(uid)
|
||||
if walletinfo < 1 {
|
||||
ctx.SendChain(message.Text("你钱包没钱啦!"))
|
||||
return
|
||||
}
|
||||
moneyToFavor := rand.Intn(math.Min(walletinfo, 100)) + 1
|
||||
// 计算钱对应的好感值
|
||||
newFavor := 1
|
||||
if favor > 50 {
|
||||
newFavor += moneyToFavor % 10 // 礼物厌倦
|
||||
} else {
|
||||
newFavor += rand.Intn(moneyToFavor)
|
||||
}
|
||||
// 随机对方心情
|
||||
mood := rand.Intn(5)
|
||||
if mood == 0 {
|
||||
newFavor = -newFavor
|
||||
}
|
||||
// 记录结果
|
||||
err = wallet.InsertWalletOf(uid, -moneyToFavor)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]钱包坏掉力:\n", err))
|
||||
return
|
||||
}
|
||||
lastfavor, err := 民政局.setFavorability(uid, gay, newFavor)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度数据库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
if mood == 0 {
|
||||
ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很不喜欢,你们的好感度降低至", lastfavor))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很喜欢,你们的好感度升至", lastfavor))
|
||||
}
|
||||
})
|
||||
engine.OnFullMatchGroup([]string{"闹离婚", "办离婚"}, zero.OnlyGroup, getdb, checkdivorce).Limit(ctxext.LimitByUser).SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
|
||||
@@ -17,8 +17,8 @@ import (
|
||||
// nolint: asciicheck
|
||||
// nolint: asciicheck
|
||||
type 婚姻登记 struct {
|
||||
db *sql.Sqlite
|
||||
dbmu sync.RWMutex
|
||||
db *sql.Sqlite
|
||||
sync.RWMutex
|
||||
}
|
||||
|
||||
// 结婚证信息
|
||||
@@ -55,8 +55,8 @@ type cdsheet struct {
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 开门时间(gid int64) (ok bool, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
ok = false
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
@@ -99,8 +99,8 @@ func (sql *婚姻登记) 开门时间(gid int64) (ok bool, err error) {
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 营业模式(gid int64) (canMatch, canNtr int, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
if err = sql.db.Drop("updateinfo"); err == nil {
|
||||
@@ -130,8 +130,8 @@ func (sql *婚姻登记) 营业模式(gid int64) (canMatch, canNtr int, err erro
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 修改模式(gid int64, mode string, stauts int) (err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
if err = sql.db.Drop("updateinfo"); err == nil {
|
||||
@@ -169,8 +169,8 @@ func (sql *婚姻登记) 修改模式(gid int64, mode string, stauts int) (err e
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 清理花名册(gid string) error {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
grouplist, err := sql.db.ListTables()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -209,8 +209,8 @@ func (sql *婚姻登记) 清理花名册(gid string) error {
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 查户口(gid, uid int64) (info userinfo, status string, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
uidstr := strconv.FormatInt(uid, 10)
|
||||
status = "单"
|
||||
@@ -232,8 +232,8 @@ func (sql *婚姻登记) 查户口(gid, uid int64) (info userinfo, status string
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 登记(gid, uid, target int64, username, targetname string) error {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
err := sql.db.Create(gidstr, &userinfo{})
|
||||
if err != nil {
|
||||
@@ -254,24 +254,24 @@ func (sql *婚姻登记) 登记(gid, uid, target int64, username, targetname str
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 离婚休妻(gid, wife int64) error {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
wifestr := strconv.FormatInt(wife, 10)
|
||||
return sql.db.Del(gidstr, "where target = "+wifestr)
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 离婚休夫(gid, husband int64) error {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
husbandstr := strconv.FormatInt(husband, 10)
|
||||
return sql.db.Del(gidstr, "where user = "+husbandstr)
|
||||
}
|
||||
|
||||
func (sql *婚姻登记) 花名册(gid int64) (list [][4]string, number int, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
err = sql.db.Create(gidstr, &userinfo{})
|
||||
if err != nil {
|
||||
@@ -322,8 +322,8 @@ func slicename(name string, canvas *gg.Context) (resultname string) {
|
||||
|
||||
// 获取好感度
|
||||
func (sql *婚姻登记) getFavorability(uid, target int64) (favor int, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("favorability", &favorability{})
|
||||
if err != nil {
|
||||
return
|
||||
@@ -345,8 +345,8 @@ func (sql *婚姻登记) getFavorability(uid, target int64) (favor int, err erro
|
||||
|
||||
// 设置好感度 正增负减
|
||||
func (sql *婚姻登记) setFavorability(uid, target int64, score int) (favor int, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("favorability", &favorability{})
|
||||
if err != nil {
|
||||
return
|
||||
@@ -360,7 +360,10 @@ func (sql *婚姻登记) setFavorability(uid, target int64, score int) (favor in
|
||||
Userinfo: uidstr + "+" + targstr + "+" + uidstr,
|
||||
Favor: score,
|
||||
})
|
||||
return score, err
|
||||
if err == nil {
|
||||
err = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'")
|
||||
}
|
||||
return info.Favor, err
|
||||
}
|
||||
info.Favor += score
|
||||
if info.Favor > 100 {
|
||||
@@ -374,8 +377,8 @@ func (sql *婚姻登记) setFavorability(uid, target int64, score int) (favor in
|
||||
|
||||
// 获取技能时长
|
||||
func (sql *婚姻登记) getCDtime(gid int64) (skillCD float64, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
skillCD = 12
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
@@ -404,8 +407,8 @@ func (sql *婚姻登记) getCDtime(gid int64) (skillCD float64, err error) {
|
||||
|
||||
// 设置技能时长
|
||||
func (sql *婚姻登记) setCDtime(gid int64, cdTime float64) (err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
if err = sql.db.Drop("updateinfo"); err == nil {
|
||||
@@ -435,8 +438,8 @@ func (sql *婚姻登记) setCDtime(gid int64, cdTime float64) (err error) {
|
||||
|
||||
// 记录CD
|
||||
func (sql *婚姻登记) writeCDtime(gid, uid, mun int64) error {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err := sql.db.Create("cdsheet", &cdsheet{})
|
||||
if err != nil {
|
||||
if err = sql.db.Drop("cdsheet"); err == nil {
|
||||
@@ -457,8 +460,8 @@ func (sql *婚姻登记) writeCDtime(gid, uid, mun int64) error {
|
||||
|
||||
// 判断CD是否过时
|
||||
func (sql *婚姻登记) compareCDtime(gid, uid, mun int64, cdtime float64) (ok bool, err error) {
|
||||
sql.dbmu.Lock()
|
||||
defer sql.dbmu.Unlock()
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
ok = false
|
||||
err = sql.db.Create("cdsheet", &cdsheet{})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user