mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
优化qqwife代码,增加代码可读性 (#508)
This commit is contained in:
parent
ac18d3df96
commit
f4b41efc75
@ -1066,6 +1066,8 @@ print("run[CQ:image,file="+j["img"]+"]")
|
||||
|
||||
- [x] 群老婆列表
|
||||
|
||||
- [x] 查好感度[对方Q号|@对方QQ]
|
||||
|
||||
- [x] 好感度列表
|
||||
|
||||
- [x] 重置花名册
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
"math/rand"
|
||||
"sort"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/FloatTech/floatbox/math"
|
||||
@ -24,46 +25,45 @@ 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
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
type 婚姻登记 struct {
|
||||
db *sql.Sqlite
|
||||
sync.RWMutex
|
||||
}
|
||||
|
||||
// 群设置
|
||||
type updateinfo struct {
|
||||
GID int64
|
||||
Updatetime string // 登记时间
|
||||
CanMatch int // 嫁婚开关
|
||||
CanNtr int // Ntr开关
|
||||
CDtime float64 // CD时间
|
||||
}
|
||||
|
||||
// 结婚证信息
|
||||
type userinfo struct {
|
||||
User int64 // 用户身份证
|
||||
Target int64 // 对象身份证号
|
||||
Username string // 户主名称
|
||||
Targetname string // 对象名称
|
||||
Updatetime string // 登记时间
|
||||
|
||||
}
|
||||
|
||||
var (
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
民政局 = &婚姻登记{
|
||||
db: &sql.Sqlite{},
|
||||
}
|
||||
sendtext = [...][]string{
|
||||
{ // 表白成功
|
||||
"是个勇敢的孩子(*/ω\*) 今天的运气都降临在你的身边~\n\n",
|
||||
"(´・ω・`)对方答应了你 并表示愿意当今天的CP\n\n",
|
||||
},
|
||||
{ // 表白失败
|
||||
"今天的运气有一点背哦~明天再试试叭",
|
||||
"_(:з」∠)_下次还有机会 咱抱抱你w",
|
||||
"今天失败了惹. 摸摸头~咱明天还有机会",
|
||||
},
|
||||
{ // ntr成功
|
||||
"因为你的个人魅力~~今天他就是你的了w\n\n",
|
||||
},
|
||||
{ // 离婚失败
|
||||
"打是情,骂是爱,不打不亲不相爱。答应我不要分手。",
|
||||
"床头打架床尾和,夫妻没有隔夜仇。安啦安啦,不要闹变扭。",
|
||||
},
|
||||
{ // 离婚成功
|
||||
"离婚成功力\n话说你不考虑当个1?",
|
||||
"离婚成功力\n天涯何处无芳草,何必单恋一枝花?不如再摘一支(bushi",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine := control.Register("qqwife", &ctrl.Options[*zero.Ctx]{
|
||||
engine = control.Register("qqwife", &ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Brief: "一群一天一夫一妻制群老婆",
|
||||
Help: "- 娶群友\n- 群老婆列表\n- [允许|禁止]自由恋爱\n- [允许|禁止]牛头人\n- 设置CD为xx小时 →(默认12小时)\n- 重置花名册\n- 重置所有花名册(用于清除所有群数据及其设置)\n" +
|
||||
Help: "- 娶群友\n- 群老婆列表\n- [允许|禁止]自由恋爱\n- [允许|禁止]牛头人\n- 设置CD为xx小时 →(默认12小时)\n- 重置花名册\n- 重置所有花名册(用于清除所有群数据及其设置)\n- 查好感度[对方Q号|@对方QQ]\n- 好感度列表\n" +
|
||||
"--------------------------------\n以下指令存在CD,不跨天刷新,前两个受指令开关\n--------------------------------\n" +
|
||||
"- (娶|嫁)@对方QQ\n自由选择对象, 自由恋爱(好感度越高成功率越高,保底30%概率)\n" +
|
||||
"- 当[对方Q号|@对方QQ]的小三\n我和你才是真爱, 为了你我愿意付出一切(好感度越高成功率越高,保底10%概率)\n" +
|
||||
@ -84,106 +84,71 @@ func init() {
|
||||
)
|
||||
}),
|
||||
))
|
||||
getdb := fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
getdb = fcext.DoOnceOnSuccess(func(ctx *zero.Ctx) bool {
|
||||
民政局.db.DBPath = engine.DataFolder() + "结婚登记表.db"
|
||||
err := 民政局.db.Open(time.Hour * 24)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
return false
|
||||
if err == nil {
|
||||
// 创建群配置表
|
||||
err = 民政局.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return false
|
||||
}
|
||||
// 创建CD表
|
||||
err = 民政局.db.Create("cdsheet", &cdsheet{})
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return false
|
||||
}
|
||||
// 创建好感度表
|
||||
err = 民政局.db.Create("favorability", &favorability{})
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return true
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return false
|
||||
})
|
||||
// 技能CD设置
|
||||
engine.OnRegex(`^设置CD为(\d+)小时`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
cdTime, err := strconv.ParseFloat(ctx.State["regex_matched"].([]string)[1], 64)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]请设置纯数字\n", err))
|
||||
return
|
||||
}
|
||||
gid := ctx.Event.GroupID
|
||||
err = 民政局.setCDtime(gid, cdTime)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]设置CD时长失败\n", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("设置成功"))
|
||||
})
|
||||
engine.OnRegex(`^(允许|禁止)(自由恋爱|牛头人)$`, zero.OnlyGroup, zero.AdminPermission, getdb).SetBlock(true).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
status := ctx.State["regex_matched"].([]string)[1]
|
||||
mode := ctx.State["regex_matched"].([]string)[2]
|
||||
gid := ctx.Event.GroupID
|
||||
statusBool := 1
|
||||
if status == "禁止" {
|
||||
statusBool = 0
|
||||
}
|
||||
err := 民政局.修改模式(gid, mode, statusBool)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]群状态查询失败\n", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("设置成功"))
|
||||
})
|
||||
// 好感度系统
|
||||
engine.OnRegex(`^查好感度\s?\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
fiancee, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]你对象好像不存在?\n", err))
|
||||
return
|
||||
}
|
||||
uid := ctx.Event.UserID
|
||||
favor, err := 民政局.getFavorability(uid, fiancee)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
// 输出结果
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("\n当前你们好感度为", favor),
|
||||
)
|
||||
})
|
||||
)
|
||||
|
||||
func init() {
|
||||
engine.OnFullMatch("娶群友", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
_, err := 民政局.开门时间(gid)
|
||||
err := 民政局.开门时间(gid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
uid := ctx.Event.UserID
|
||||
targetinfo, status, err := 民政局.查户口(gid, uid)
|
||||
userInfo, _ := 民政局.查户口(gid, uid)
|
||||
switch {
|
||||
case status == "错":
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
return
|
||||
case (status == "攻" && targetinfo.Target == 0) ||
|
||||
(status == "受" && targetinfo.User == 0): // 如果是单身贵族
|
||||
case userInfo != (userinfo{}) && (userInfo.Target == 0 || userInfo.User == 0): // 如果是单身贵族
|
||||
ctx.SendChain(message.Text("今天你是单身贵族噢"))
|
||||
return
|
||||
case status == "攻": // 娶过别人
|
||||
case userInfo.User == uid: // 娶过别人
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("\n今天你在", targetinfo.Updatetime, "娶了群友"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(targetinfo.Target, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text("\n今天你在", userInfo.Updatetime, "娶了群友"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userInfo.Target, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
"[", targetinfo.Targetname, "]",
|
||||
"(", targetinfo.Target, ")哒",
|
||||
"[", userInfo.Targetname, "]",
|
||||
"(", userInfo.Target, ")哒",
|
||||
),
|
||||
)
|
||||
return
|
||||
case status == "受": // 嫁给别人
|
||||
case userInfo.Target == uid: // 嫁给别人
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("\n今天你在", targetinfo.Updatetime, "被群友"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(targetinfo.User, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text("\n今天你在", userInfo.Updatetime, "被群友"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(userInfo.User, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
"[", targetinfo.Username, "]",
|
||||
"(", targetinfo.User, ")娶了",
|
||||
"[", userInfo.Username, "]",
|
||||
"(", userInfo.User, ")娶了",
|
||||
),
|
||||
)
|
||||
return
|
||||
@ -198,12 +163,8 @@ func init() {
|
||||
qqgrouplist := make([]int64, 0, len(temp))
|
||||
for k := 0; k < len(temp); k++ {
|
||||
usr := temp[k].Get("user_id").Int()
|
||||
_, status, err := 民政局.查户口(gid, usr)
|
||||
if status == "错" {
|
||||
ctx.SendChain(message.Text("[qqwife]花名册数据读取有误,请重试\n", err))
|
||||
return
|
||||
}
|
||||
if status != "单" {
|
||||
usrInfo, _ := 民政局.查户口(gid, usr)
|
||||
if usrInfo != (userinfo{}) {
|
||||
continue
|
||||
}
|
||||
qqgrouplist = append(qqgrouplist, usr)
|
||||
@ -216,181 +177,33 @@ func init() {
|
||||
// 随机抽娶
|
||||
fiancee := qqgrouplist[rand.Intn(len(qqgrouplist))]
|
||||
if fiancee == uid { // 如果是自己
|
||||
ctx.SendChain(message.Text("呜...没娶到,你可以再尝试一次"))
|
||||
return
|
||||
}
|
||||
// 去民政局办证
|
||||
err = 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
favor, err := 民政局.setFavorability(uid, fiancee, 1+rand.Intn(5))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
// 请大家吃席
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("今天你的群老婆是"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
"[", ctx.CardOrNickName(fiancee), "]",
|
||||
"(", fiancee, ")哒\n当前你们好感度为", favor,
|
||||
),
|
||||
)
|
||||
})
|
||||
// 单身技能
|
||||
engine.OnRegex(`^(娶|嫁)\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, getdb, checkdog).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
uid := ctx.Event.UserID
|
||||
choice := ctx.State["regex_matched"].([]string)[1]
|
||||
fiancee, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64)
|
||||
// 写入CD
|
||||
err := 民政局.writeCDtime(gid, uid, 1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
if uid == fiancee { // 如果是自己
|
||||
switch rand.Intn(3) {
|
||||
switch rand.Intn(10) {
|
||||
case 1:
|
||||
err := 民政局.登记(gid, uid, 0, "", "")
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("今日获得成就:单身贵族"))
|
||||
default:
|
||||
ctx.SendChain(message.Text("今日获得成就:自恋狂"))
|
||||
ctx.SendChain(message.Text("呜...没娶到,你可以再尝试一次"))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
favor, err := 民政局.getFavorability(uid, fiancee)
|
||||
// 去民政局办证
|
||||
err = 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
if favor < 30 {
|
||||
favor = 30 // 保底30%概率
|
||||
}
|
||||
if rand.Intn(101) >= favor {
|
||||
ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))]))
|
||||
return
|
||||
}
|
||||
// 去民政局登记
|
||||
var choicetext string
|
||||
switch choice {
|
||||
case "娶":
|
||||
err := 民政局.登记(gid, uid, fiancee, ctx.CardOrNickName(uid), ctx.CardOrNickName(fiancee))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err))
|
||||
return
|
||||
}
|
||||
choicetext = "\n今天你的群老婆是"
|
||||
default:
|
||||
err := 民政局.登记(gid, fiancee, uid, ctx.CardOrNickName(fiancee), ctx.CardOrNickName(uid))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err))
|
||||
return
|
||||
}
|
||||
choicetext = "\n今天你的群老公是"
|
||||
favor, err := 民政局.更新好感度(uid, fiancee, 1+rand.Intn(5))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
}
|
||||
// 请大家吃席
|
||||
ctx.SendChain(
|
||||
message.Text(sendtext[0][rand.Intn(len(sendtext[0]))]),
|
||||
message.At(uid),
|
||||
message.Text(choicetext),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
"[", ctx.CardOrNickName(fiancee), "]",
|
||||
"(", fiancee, ")哒",
|
||||
),
|
||||
)
|
||||
})
|
||||
// NTR技能
|
||||
engine.OnRegex(`^当(\[CQ:at,qq=(\d+)\]\s?|(\d+))的小三`, zero.OnlyGroup, getdb, checkcp).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
uid := ctx.Event.UserID
|
||||
fid := ctx.State["regex_matched"].([]string)
|
||||
fiancee, _ := strconv.ParseInt(fid[2]+fid[3], 10, 64)
|
||||
// 写入CD
|
||||
err := 民政局.writeCDtime(gid, uid, 2)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
if fiancee == uid {
|
||||
ctx.SendChain(message.Text("今日获得成就:自我攻略"))
|
||||
return
|
||||
}
|
||||
favor, err := 民政局.getFavorability(uid, fiancee)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
if favor < 30 {
|
||||
favor = 30 // 保底10%概率
|
||||
}
|
||||
if rand.Intn(101) >= favor/3 {
|
||||
ctx.SendChain(message.Text("失败了!可惜"))
|
||||
return
|
||||
}
|
||||
// 判断target是老公还是老婆
|
||||
var choicetext string
|
||||
userAID := uid //攻的
|
||||
var userBID int64 //被牛的
|
||||
userCID := fiancee //受的
|
||||
fianceeinfo, gender, err := 民政局.查户口(gid, userCID)
|
||||
switch gender {
|
||||
case "单":
|
||||
ctx.SendChain(message.Text("ta现在还是单身哦,快向ta表白吧!"))
|
||||
return
|
||||
case "错":
|
||||
ctx.SendChain(message.Text("[qqwife]对象状态查询失败\n", err))
|
||||
return
|
||||
case "攻":
|
||||
err = 民政局.离婚休妻(gid, fianceeinfo.Target)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err))
|
||||
return
|
||||
}
|
||||
userAID = fiancee
|
||||
userCID = uid
|
||||
userBID = fianceeinfo.Target
|
||||
choicetext = "老公"
|
||||
case "受":
|
||||
err = 民政局.离婚休夫(gid, fianceeinfo.User)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ta不想和原来的对象分手...\n[error]", err))
|
||||
return
|
||||
}
|
||||
userBID = fianceeinfo.User
|
||||
choicetext = "老婆"
|
||||
default:
|
||||
ctx.SendChain(message.Text("数据库发生问题力"))
|
||||
return
|
||||
}
|
||||
err = 民政局.登记(gid, userAID, userCID, ctx.CardOrNickName(userAID), ctx.CardOrNickName(userCID))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]复婚登记失败力\n", err))
|
||||
return
|
||||
}
|
||||
favor, err = 民政局.setFavorability(userAID, userCID, -5)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
_, err = 民政局.setFavorability(userAID, userBID, 5)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
// 输出结果
|
||||
ctx.SendChain(
|
||||
message.Text(sendtext[2][rand.Intn(len(sendtext[2]))]),
|
||||
message.At(uid),
|
||||
message.Text("今天你的群"+choicetext+"是"),
|
||||
message.Text("今天你的群老婆是"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(fiancee, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
@ -399,210 +212,20 @@ func init() {
|
||||
),
|
||||
)
|
||||
})
|
||||
// 做媒技能
|
||||
engine.OnRegex(`^做媒\s?\[CQ:at,qq=(\d+)\]\s?\[CQ:at,qq=(\d+)\]`, zero.OnlyGroup, zero.AdminPermission, getdb, checkCondition).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
uid := ctx.Event.UserID
|
||||
gayOne, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
|
||||
gayZero, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64)
|
||||
// 写入CD
|
||||
err := 民政局.writeCDtime(gid, uid, 3)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
favor, err := 民政局.getFavorability(gayOne, gayZero)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
if favor < 30 {
|
||||
favor = 30 // 保底30%概率
|
||||
}
|
||||
if rand.Intn(101) >= favor {
|
||||
_, err = 民政局.setFavorability(uid, gayOne, -1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
_, err = 民政局.setFavorability(uid, gayZero, -1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
ctx.SendChain(message.Text(sendtext[1][rand.Intn(len(sendtext[1]))]))
|
||||
return
|
||||
}
|
||||
// 去民政局登记
|
||||
err = 民政局.登记(gid, gayOne, gayZero, ctx.CardOrNickName(gayOne), ctx.CardOrNickName(gayZero))
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]结婚登记失败力\n", err))
|
||||
return
|
||||
}
|
||||
_, err = 民政局.setFavorability(uid, gayOne, 1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
_, err = 民政局.setFavorability(uid, gayZero, 1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
_, err = 民政局.setFavorability(gayOne, gayZero, 1)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
}
|
||||
// 请大家吃席
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("恭喜你成功撮合了一对CP\n\n"),
|
||||
message.At(gayOne),
|
||||
message.Text("今天你的群老婆是"),
|
||||
message.Image("http://q4.qlogo.cn/g?b=qq&nk="+strconv.FormatInt(gayZero, 10)+"&s=640").Add("cache", 0),
|
||||
message.Text(
|
||||
"\n",
|
||||
"[", ctx.CardOrNickName(gayZero), "]",
|
||||
"(", gayZero, ")哒",
|
||||
),
|
||||
)
|
||||
})
|
||||
// 礼物系统
|
||||
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)
|
||||
if gay == uid {
|
||||
ctx.Send(message.ReplyWithMessage(ctx.Event.MessageID, message.At(uid), message.Text("[qqwife]你想给自己买什么礼物呢?")))
|
||||
return
|
||||
}
|
||||
// 获取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
|
||||
}
|
||||
// 获取好感度
|
||||
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(2)
|
||||
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
|
||||
}
|
||||
// 写入CD
|
||||
err = 民政局.writeCDtime(gid, uid, 5)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
// 输出结果
|
||||
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
|
||||
uid := ctx.Event.UserID
|
||||
// 写入CD
|
||||
err := 民政局.writeCDtime(gid, uid, 4)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[qqwife]你的技能CD记录失败\n", err))
|
||||
}
|
||||
info, uidstatus, err := 民政局.查户口(gid, uid)
|
||||
mun := 2
|
||||
var fiancee int64
|
||||
switch uidstatus {
|
||||
case "错":
|
||||
ctx.SendChain(message.Text("[qqwife]用户状态查询失败\n", err))
|
||||
return
|
||||
case "攻":
|
||||
mun = 1
|
||||
fiancee = info.Target
|
||||
case "受":
|
||||
mun = 0
|
||||
fiancee = info.User
|
||||
}
|
||||
favor, err := 民政局.getFavorability(uid, fiancee)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
if favor < 20 {
|
||||
favor = 10
|
||||
}
|
||||
if rand.Intn(101) > 100-favor {
|
||||
ctx.SendChain(message.Text(sendtext[3][rand.Intn(len(sendtext[3]))]))
|
||||
return
|
||||
}
|
||||
switch mun {
|
||||
case 1:
|
||||
err = 民政局.离婚休妻(gid, fiancee)
|
||||
case 0:
|
||||
err = 民政局.离婚休夫(gid, fiancee)
|
||||
default:
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text(sendtext[4][mun]))
|
||||
})
|
||||
engine.OnFullMatch("群老婆列表", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
gid := ctx.Event.GroupID
|
||||
ok, err := 民政局.开门时间(gid)
|
||||
err := 民政局.开门时间(gid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
if ok {
|
||||
ctx.SendChain(message.Text("今天还没有人结婚哦"))
|
||||
return
|
||||
}
|
||||
list, number, err := 民政局.花名册(gid)
|
||||
list, err := 民政局.花名册(gid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
number := len(list)
|
||||
if number <= 0 {
|
||||
ctx.SendChain(message.Text("今天还没有人结婚哦"))
|
||||
return
|
||||
@ -648,103 +271,193 @@ func init() {
|
||||
ctx.SendChain(message.ImageBytes(data))
|
||||
cl()
|
||||
})
|
||||
engine.OnFullMatch("好感度列表", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
uid := ctx.Event.UserID
|
||||
fianceeInfo, err := 民政局.getGroupFavorability(uid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]ERROR: ", err))
|
||||
return
|
||||
}
|
||||
/***********设置图片的大小和底色***********/
|
||||
number := len(fianceeInfo)
|
||||
if number > 10 {
|
||||
number = 10
|
||||
}
|
||||
fontSize := 50.0
|
||||
canvas := gg.NewContext(1150, int(170+(50+70)*float64(number)))
|
||||
canvas.SetRGB(1, 1, 1) // 白色
|
||||
canvas.Clear()
|
||||
/***********下载字体***********/
|
||||
_, err = file.GetLazyData(text.BoldFontFile, control.Md5File, true)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]ERROR: ", err))
|
||||
}
|
||||
/***********设置字体颜色为黑色***********/
|
||||
canvas.SetRGB(0, 0, 0)
|
||||
/***********设置字体大小,并获取字体高度用来定位***********/
|
||||
if err = canvas.LoadFontFace(text.BoldFontFile, fontSize*2); err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]ERROR: ", err))
|
||||
return
|
||||
}
|
||||
sl, h := canvas.MeasureString("你的好感度排行列表")
|
||||
/***********绘制标题***********/
|
||||
canvas.DrawString("你的好感度排行列表", (1100-sl)/2, 100) // 放置在中间位置
|
||||
canvas.DrawString("————————————————————", 0, 160)
|
||||
/***********设置字体大小,并获取字体高度用来定位***********/
|
||||
if err = canvas.LoadFontFace(text.BoldFontFile, fontSize); err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]ERROR: ", err))
|
||||
return
|
||||
}
|
||||
i := 0
|
||||
for _, info := range fianceeInfo {
|
||||
if i > 9 {
|
||||
break
|
||||
}
|
||||
if info.Userinfo == "" {
|
||||
continue
|
||||
}
|
||||
fianceID, err := strconv.ParseInt(info.Userinfo, 10, 64)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]ERROR: ", err))
|
||||
return
|
||||
}
|
||||
if fianceID == 0 {
|
||||
continue
|
||||
}
|
||||
userName := ctx.CardOrNickName(fianceID)
|
||||
canvas.SetRGB255(0, 0, 0)
|
||||
canvas.DrawString(userName+"("+info.Userinfo+")", 10, float64(180+(50+70)*i))
|
||||
canvas.DrawString(strconv.Itoa(info.Favor), 1020, float64(180+60+(50+70)*i))
|
||||
canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, 1000, 50)
|
||||
canvas.SetRGB255(150, 150, 150)
|
||||
canvas.Fill()
|
||||
canvas.SetRGB255(0, 0, 0)
|
||||
canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, float64(info.Favor)*10, 50)
|
||||
canvas.SetRGB255(231, 27, 100)
|
||||
canvas.Fill()
|
||||
i++
|
||||
}
|
||||
data, cl := writer.ToBytes(canvas.Image())
|
||||
ctx.SendChain(message.ImageBytes(data))
|
||||
cl()
|
||||
})
|
||||
engine.OnRegex(`^重置(所有|本群|/d+)?花名册$`, zero.SuperUserPermission, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
cmd := "0"
|
||||
var err error
|
||||
switch ctx.State["regex_matched"].([]string)[1] {
|
||||
case "":
|
||||
if ctx.Event.GroupID == 0 {
|
||||
ctx.SendChain(message.Text("该功能只能在群组使用或者指定群组"))
|
||||
return
|
||||
}
|
||||
cmd = strconv.FormatInt(ctx.Event.GroupID, 10)
|
||||
case "所有":
|
||||
break
|
||||
case "本群":
|
||||
err = 民政局.清理花名册()
|
||||
case "本群", "":
|
||||
if ctx.Event.GroupID == 0 {
|
||||
ctx.SendChain(message.Text("该功能只能在群组使用或者指定群组"))
|
||||
return
|
||||
}
|
||||
cmd = strconv.FormatInt(ctx.Event.GroupID, 10)
|
||||
err = 民政局.清理花名册("group" + strconv.FormatInt(ctx.Event.GroupID, 10))
|
||||
default:
|
||||
cmd = ctx.State["regex_matched"].([]string)[1]
|
||||
cmd := ctx.State["regex_matched"].([]string)[1]
|
||||
gid, _ := strconv.ParseInt(cmd, 10, 64) //判断是否为群号
|
||||
if gid == 0 {
|
||||
ctx.SendChain(message.Text("请输入正确的群号"))
|
||||
return
|
||||
}
|
||||
err = 民政局.清理花名册("group" + cmd)
|
||||
}
|
||||
err := 民政局.清理花名册(cmd)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[qqwife]数据库发生问题力\n", err))
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
ctx.SendChain(message.Text("重置成功"))
|
||||
})
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 查看设置(gid int64) (dbinfo updateinfo, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
// 创建群表哥
|
||||
err = sql.db.Create("updateinfo", &updateinfo{})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if !sql.db.CanFind("updateinfo", "where gid is "+strconv.FormatInt(gid, 10)) {
|
||||
// 没有记录
|
||||
return updateinfo{
|
||||
GID: gid,
|
||||
CanMatch: 1,
|
||||
CanNtr: 1,
|
||||
CDtime: 12,
|
||||
}, nil
|
||||
}
|
||||
_ = sql.db.Find("updateinfo", &dbinfo, "where gid is "+strconv.FormatInt(gid, 10))
|
||||
return
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 更新设置(dbinfo updateinfo) error {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
return sql.db.Insert("updateinfo", &dbinfo)
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 开门时间(gid int64) error {
|
||||
grouInfo, err := sql.查看设置(gid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
dbinfo := updateinfo{}
|
||||
_ = sql.db.Find("updateinfo", &dbinfo, "where gid is "+strconv.FormatInt(gid, 10))
|
||||
if time.Now().Format("2006/01/02") != dbinfo.Updatetime {
|
||||
// 如果跨天了就删除
|
||||
_ = sql.db.Drop("group" + strconv.FormatInt(gid, 10))
|
||||
// 更新数据时间
|
||||
grouInfo.Updatetime = time.Now().Format("2006/01/02")
|
||||
return sql.db.Insert("updateinfo", &grouInfo)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 查户口(gid, uid int64) (info userinfo, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
// 创建群表哥
|
||||
err = sql.db.Create(gidstr, &userinfo{})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
uidstr := strconv.FormatInt(uid, 10)
|
||||
err = sql.db.Find(gidstr, &info, "where user = "+uidstr)
|
||||
if err != nil {
|
||||
err = sql.db.Find(gidstr, &info, "where target = "+uidstr)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
// 民政局登记数据
|
||||
func (sql *婚姻登记) 登记(gid, uid, target int64, username, targetname string) error {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
uidinfo := userinfo{
|
||||
User: uid,
|
||||
Username: username,
|
||||
Target: target,
|
||||
Targetname: targetname,
|
||||
Updatetime: time.Now().Format("15:04:05"),
|
||||
}
|
||||
return sql.db.Insert(gidstr, &uidinfo)
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 花名册(gid int64) (list [][4]string, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
gidstr := "group" + strconv.FormatInt(gid, 10)
|
||||
number, _ := sql.db.Count(gidstr)
|
||||
if number <= 0 {
|
||||
return
|
||||
}
|
||||
var info userinfo
|
||||
err = sql.db.FindFor(gidstr, &info, "GROUP BY user", func() error {
|
||||
if info.Target == 0 {
|
||||
return nil
|
||||
}
|
||||
dbinfo := [4]string{
|
||||
info.Username,
|
||||
strconv.FormatInt(info.User, 10),
|
||||
info.Targetname,
|
||||
strconv.FormatInt(info.Target, 10),
|
||||
}
|
||||
list = append(list, dbinfo)
|
||||
return nil
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func slicename(name string, canvas *gg.Context) (resultname string) {
|
||||
usermane := []rune(name) // 将每个字符单独放置
|
||||
widthlen := 0
|
||||
numberlen := 0
|
||||
for i, v := range usermane {
|
||||
width, _ := canvas.MeasureString(string(v)) // 获取单个字符的宽度
|
||||
widthlen += int(width)
|
||||
if widthlen > 350 {
|
||||
break // 总宽度不能超过350
|
||||
}
|
||||
numberlen = i
|
||||
}
|
||||
if widthlen > 350 {
|
||||
resultname = string(usermane[:numberlen-1]) + "......" // 名字切片
|
||||
} else {
|
||||
resultname = name
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 清理花名册(gid ...string) error {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
switch gid {
|
||||
case nil:
|
||||
grouplist, err := sql.db.ListTables()
|
||||
if err == nil {
|
||||
for _, listName := range grouplist {
|
||||
if listName == "favorability" {
|
||||
continue
|
||||
|
||||
}
|
||||
err = sql.db.Drop(listName)
|
||||
}
|
||||
}
|
||||
return err
|
||||
default:
|
||||
err := sql.db.Drop(gid[0])
|
||||
if err == nil {
|
||||
err = sql.db.Del("cdsheet", "where GroupID is "+gid[0])
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
272
plugin/qqwife/favorSystem.go
Normal file
272
plugin/qqwife/favorSystem.go
Normal file
@ -0,0 +1,272 @@
|
||||
package qqwife
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math/rand"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/FloatTech/floatbox/math"
|
||||
control "github.com/FloatTech/zbputils/control"
|
||||
"github.com/FloatTech/zbputils/ctxext"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
// 画图
|
||||
"github.com/Coloured-glaze/gg"
|
||||
"github.com/FloatTech/floatbox/file"
|
||||
"github.com/FloatTech/floatbox/img/writer"
|
||||
"github.com/FloatTech/zbputils/img/text"
|
||||
|
||||
// 货币系统
|
||||
"github.com/FloatTech/AnimeAPI/wallet"
|
||||
)
|
||||
|
||||
// 好感度系统
|
||||
type favorability struct {
|
||||
Userinfo string // 记录用户
|
||||
Favor int // 好感度
|
||||
}
|
||||
|
||||
func init() {
|
||||
// 好感度系统
|
||||
engine.OnRegex(`^查好感度\s*(\[CQ:at,qq=)?(\d+)`, zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
fiancee, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[2], 10, 64)
|
||||
uid := ctx.Event.UserID
|
||||
favor, err := 民政局.查好感度(uid, fiancee)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
// 输出结果
|
||||
ctx.SendChain(
|
||||
message.At(uid),
|
||||
message.Text("\n当前你们好感度为", favor),
|
||||
)
|
||||
})
|
||||
// 礼物系统
|
||||
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)
|
||||
if gay == uid {
|
||||
ctx.Send(message.ReplyWithMessage(ctx.Event.MessageID, message.At(uid), message.Text("你想给自己买什么礼物呢?")))
|
||||
return
|
||||
}
|
||||
// 获取CD
|
||||
groupInfo, err := 民政局.查看设置(gid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
ok, err := 民政局.判断CD(gid, uid, "买礼物", groupInfo.CDtime)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:", err))
|
||||
return
|
||||
}
|
||||
if !ok {
|
||||
ctx.SendChain(message.Text("舔狗,今天你已经送过礼物了。"))
|
||||
return
|
||||
}
|
||||
// 获取好感度
|
||||
favor, err := 民政局.查好感度(uid, gay)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:好感度库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
// 对接小熊饼干
|
||||
walletinfo := wallet.GetWalletOf(uid)
|
||||
if walletinfo < 1 {
|
||||
ctx.SendChain(message.Text("你钱包没钱啦!"))
|
||||
return
|
||||
}
|
||||
moneyToFavor := rand.Intn(math.Min(walletinfo, 100))
|
||||
// 计算钱对应的好感值
|
||||
newFavor := 1
|
||||
if favor > 50 {
|
||||
newFavor = moneyToFavor % 10 // 礼物厌倦
|
||||
} else {
|
||||
newFavor += rand.Intn(moneyToFavor)
|
||||
}
|
||||
// 随机对方心情
|
||||
mood := rand.Intn(2)
|
||||
if mood == 0 {
|
||||
newFavor = -newFavor
|
||||
}
|
||||
// 记录结果
|
||||
err = wallet.InsertWalletOf(uid, -moneyToFavor)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:钱包坏掉力:\n", err))
|
||||
return
|
||||
}
|
||||
lastfavor, err := 民政局.更新好感度(uid, gay, newFavor)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:好感度数据库发生问题力\n", err))
|
||||
return
|
||||
}
|
||||
// 写入CD
|
||||
err = 民政局.记录CD(gid, uid, "买礼物")
|
||||
if err != nil {
|
||||
ctx.SendChain(message.At(uid), message.Text("[ERROR]:你的技能CD记录失败\n", err))
|
||||
}
|
||||
// 输出结果
|
||||
if mood == 0 {
|
||||
ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很不喜欢,你们的好感度降低至", lastfavor))
|
||||
} else {
|
||||
ctx.SendChain(message.Text("你花了", moneyToFavor, "ATRI币买了一件女装送给了ta,ta很喜欢,你们的好感度升至", lastfavor))
|
||||
}
|
||||
})
|
||||
engine.OnFullMatch("好感度列表", zero.OnlyGroup, getdb).SetBlock(true).Limit(ctxext.LimitByUser).
|
||||
Handle(func(ctx *zero.Ctx) {
|
||||
uid := ctx.Event.UserID
|
||||
fianceeInfo, err := 民政局.getGroupFavorability(uid)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:ERROR: ", err))
|
||||
return
|
||||
}
|
||||
/***********设置图片的大小和底色***********/
|
||||
number := len(fianceeInfo)
|
||||
if number > 10 {
|
||||
number = 10
|
||||
}
|
||||
fontSize := 50.0
|
||||
canvas := gg.NewContext(1150, int(170+(50+70)*float64(number)))
|
||||
canvas.SetRGB(1, 1, 1) // 白色
|
||||
canvas.Clear()
|
||||
/***********下载字体***********/
|
||||
_, err = file.GetLazyData(text.BoldFontFile, control.Md5File, true)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:ERROR: ", err))
|
||||
}
|
||||
/***********设置字体颜色为黑色***********/
|
||||
canvas.SetRGB(0, 0, 0)
|
||||
/***********设置字体大小,并获取字体高度用来定位***********/
|
||||
if err = canvas.LoadFontFace(text.BoldFontFile, fontSize*2); err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:ERROR: ", err))
|
||||
return
|
||||
}
|
||||
sl, h := canvas.MeasureString("你的好感度排行列表")
|
||||
/***********绘制标题***********/
|
||||
canvas.DrawString("你的好感度排行列表", (1100-sl)/2, 100) // 放置在中间位置
|
||||
canvas.DrawString("————————————————————", 0, 160)
|
||||
/***********设置字体大小,并获取字体高度用来定位***********/
|
||||
if err = canvas.LoadFontFace(text.BoldFontFile, fontSize); err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:ERROR: ", err))
|
||||
return
|
||||
}
|
||||
i := 0
|
||||
for _, info := range fianceeInfo {
|
||||
if i > 9 {
|
||||
break
|
||||
}
|
||||
if info.Userinfo == "" {
|
||||
continue
|
||||
}
|
||||
fianceID, err := strconv.ParseInt(info.Userinfo, 10, 64)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("[ERROR]:ERROR: ", err))
|
||||
return
|
||||
}
|
||||
if fianceID == 0 {
|
||||
continue
|
||||
}
|
||||
userName := ctx.CardOrNickName(fianceID)
|
||||
canvas.SetRGB255(0, 0, 0)
|
||||
canvas.DrawString(userName+"("+info.Userinfo+")", 10, float64(180+(50+70)*i))
|
||||
canvas.DrawString(strconv.Itoa(info.Favor), 1020, float64(180+60+(50+70)*i))
|
||||
canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, 1000, 50)
|
||||
canvas.SetRGB255(150, 150, 150)
|
||||
canvas.Fill()
|
||||
canvas.SetRGB255(0, 0, 0)
|
||||
canvas.DrawRectangle(10, float64(180+60+(50+70)*i)-h/2, float64(info.Favor)*10, 50)
|
||||
canvas.SetRGB255(231, 27, 100)
|
||||
canvas.Fill()
|
||||
i++
|
||||
}
|
||||
data, cl := writer.ToBytes(canvas.Image())
|
||||
ctx.SendChain(message.ImageBytes(data))
|
||||
cl()
|
||||
})
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
func (sql *婚姻登记) 查好感度(uid, target int64) (int, error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err := sql.db.Create("favorability", &favorability{})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
info := favorability{}
|
||||
uidstr := strconv.FormatInt(uid, 10)
|
||||
targstr := strconv.FormatInt(target, 10)
|
||||
_ = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'")
|
||||
return info.Favor, nil
|
||||
}
|
||||
|
||||
// 获取好感度数据组
|
||||
type favorList []favorability
|
||||
|
||||
func (s favorList) Len() int {
|
||||
return len(s)
|
||||
}
|
||||
func (s favorList) Swap(i, j int) {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
func (s favorList) Less(i, j int) bool {
|
||||
return s[i].Favor > s[j].Favor
|
||||
}
|
||||
func (sql *婚姻登记) getGroupFavorability(uid int64) (list favorList, err error) {
|
||||
uidStr := strconv.FormatInt(uid, 10)
|
||||
sql.RLock()
|
||||
defer sql.RUnlock()
|
||||
info := favorability{}
|
||||
err = sql.db.FindFor("favorability", &info, "where Userinfo glob '*"+uidStr+"*'", func() error {
|
||||
var target string
|
||||
userList := strings.Split(info.Userinfo, "+")
|
||||
switch {
|
||||
case len(userList) == 0:
|
||||
return errors.New("好感度系统数据存在错误")
|
||||
case userList[0] == uidStr:
|
||||
target = userList[1]
|
||||
default:
|
||||
target = userList[0]
|
||||
}
|
||||
list = append(list, favorability{
|
||||
Userinfo: target,
|
||||
Favor: info.Favor,
|
||||
})
|
||||
return nil
|
||||
})
|
||||
sort.Sort(list)
|
||||
return
|
||||
}
|
||||
|
||||
// nolint: asciicheck
|
||||
//nolint: asciicheck
|
||||
// 设置好感度 正增负减
|
||||
func (sql *婚姻登记) 更新好感度(uid, target int64, score int) (favor int, err error) {
|
||||
sql.Lock()
|
||||
defer sql.Unlock()
|
||||
err = sql.db.Create("favorability", &favorability{})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
info := favorability{}
|
||||
uidstr := strconv.FormatInt(uid, 10)
|
||||
targstr := strconv.FormatInt(target, 10)
|
||||
_ = sql.db.Find("favorability", &info, "where Userinfo glob '*"+uidstr+"+"+targstr+"*'")
|
||||
info.Userinfo = uidstr + "+" + targstr + "+" + uidstr
|
||||
info.Favor += score
|
||||
if info.Favor > 100 {
|
||||
info.Favor = 100
|
||||
} else if info.Favor < 0 {
|
||||
info.Favor = 0
|
||||
}
|
||||
err = sql.db.Insert("favorability", &info)
|
||||
return info.Favor, err
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user