From 38bc2f7639cd5f5a0bfe77286ec0c4fe9f2fa6c5 Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 9 Oct 2018 23:45:45 +0800 Subject: [PATCH] add get more lottery func, chenge lottery act --- model/lottery.go | 15 +++++++++++++-- module/message-command/line-group.go | 28 ++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/model/lottery.go b/model/lottery.go index 557377d..da008f2 100644 --- a/model/lottery.go +++ b/model/lottery.go @@ -17,9 +17,20 @@ type Lottery struct { // GetRandomLotteryByType - func GetRandomLotteryByType(t string) (p *Lottery, err error) { - p = &Lottery{} + parr, err := GetRandomLotteryByTypeAndLimit(t, 1) + if err != nil { + return nil, err + } + if parr == nil { + return nil, nil + } + return parr[0], err +} + +// GetRandomLotteryByTypeAndLimit - +func GetRandomLotteryByTypeAndLimit(t string, limit int) (p []*Lottery, err error) { offset := rand.Intn(10) - err = x.Get(p, `select * from "public"."lottery" where "type" = $1 order by random() offset $2 limit 1`, t, offset) + err = x.Select(p, `select * from "public"."lottery" where "type" = $1 order by random() offset $2 limit $3`, t, offset, limit) if err == sql.ErrNoRows { return nil, nil } diff --git a/module/message-command/line-group.go b/module/message-command/line-group.go index e13e986..3eb3980 100644 --- a/module/message-command/line-group.go +++ b/module/message-command/line-group.go @@ -2,6 +2,7 @@ package msgcmd import ( "fmt" + "math/rand" "strconv" "strings" @@ -338,10 +339,29 @@ func lottery(sub, txt string, s *lineobj.SourceObject) (res string) { if len(sub) == 0 { return "" } - data, err := model.GetRandomLotteryByType(sub) - if err != nil || data == nil { - return + arr, err := model.GetRandomLotteryByTypeAndLimit(sub, 100) + if err != nil || arr == nil { + return "" } + + // shuffle array + dest := make([]*model.Lottery, len(arr)) + perm := rand.Perm(len(arr)) + for idx, val := range perm { + dest[val] = arr[idx] + arr[idx] = nil + } + + data := dest[0] + + // set arr to nil + for i := range dest { + dest[i] = nil + } + arr = nil + dest = nil + perm = nil + conf := config.GetConf() u := conf.URL if last := len(u); last > 0 && u[last-1] == '/' { @@ -350,7 +370,7 @@ func lottery(sub, txt string, s *lineobj.SourceObject) (res string) { oriURL := "/image/origin" thumbURL := "/image/thumbnail" if len(data.Message) == 0 { - return + return "" } o := u + oriURL + "/" + data.Message + "?d=" + sub t := u + thumbURL + "/" + data.Message + "?d=" + sub