123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package service
- import (
- "context"
- "encoding/json"
- accmdl "go-common/app/service/main/account/api"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- type spamMessage struct {
- Mid int64 `json:"mid"`
- IsUp bool `json:"is_up"`
- Tp int8 `json:"tp"`
- }
- func (s *Service) getLevel(c context.Context, mid int64) (cur int, err error) {
- arg := &accmdl.MidReq{Mid: mid}
- res, err := s.accSrv.Card3(c, arg)
- if err != nil {
- return
- }
- cur = int(res.Card.Level)
- return
- }
- func (s *Service) addRecReply(c context.Context, msg *consumerMsg) {
- var (
- d spamMessage
- exp int
- code = ecode.OK
- )
- if err := json.Unmarshal([]byte(msg.Data), &d); err != nil {
- log.Error("json.Unmarshal() error(%v)", err)
- return
- }
- count, err := s.spam.IncrReply(c, d.Mid, d.IsUp)
- if err != nil {
- log.Error("spam.IncrReply(%d) error(%v)", d.Mid, err)
- return
- }
- if d.IsUp && count >= 20 {
- exp = 5 * 60 // 5min
- code = ecode.ReplyDeniedAsCaptcha
- } else if count >= 5 {
- exp = 5 * 60 // 5min
- code = ecode.ReplyDeniedAsCaptcha
- }
- if code == ecode.OK {
- return
- }
- if err = s.spam.SetReplyRecSpam(c, d.Mid, code.Code(), exp); err == nil {
- log.Info("spam.SetReplyRecSpam(%d, %d, %d)", d.Mid, code, exp)
- } else {
- log.Error("spam.SetReplyRecSpam(%d, %d, %d), err (%v)", d.Mid, code, exp, err)
- }
- }
- func (s *Service) addDailyReply(c context.Context, msg *consumerMsg) {
- var d spamMessage
- if err := json.Unmarshal([]byte(msg.Data), &d); err != nil {
- log.Error("json.Unmarshal() error(%v)", err)
- return
- }
- ttl, err := s.spam.TTLDailyReply(c, d.Mid)
- if err != nil {
- log.Error("spam.TTLDailyReply(%d) error(%v)", d.Mid, err)
- return
- }
- count, err := s.spam.IncrDailyReply(c, d.Mid)
- if err != nil {
- log.Error("spam.IncrDailyReply(%d) error(%v)", d.Mid, err)
- return
- }
- if ttl == -2 || ttl == -1 {
- ttl = 24 * 60 * 60 // one day
- if err = s.spam.ExpireDailyReply(c, d.Mid, ttl); err != nil {
- log.Error("spam.ExpireDailyReply(%d) error(%v)", d.Mid, err)
- }
- }
- var code ecode.Codes
- // 23 BBQ 22 火鸟
- if d.Tp == 23 || d.Tp == 22 {
- if count <= 1000 {
- return
- }
- code = ecode.ReplyDeniedAsCD
- } else {
- lv, err := s.getLevel(c, d.Mid)
- if err != nil {
- log.Error("s.getLevel(%d) error(%v)", d.Mid, err)
- return
- }
- switch {
- case lv <= 1 && count < 25:
- return
- case lv == 2 && count < 250:
- return
- case lv == 3 && count < 300:
- return
- case lv == 4 && count < 400:
- return
- case lv >= 5 && count < 800:
- return
- }
- code = ecode.ReplyDeniedAsCaptcha
- if count >= 1000 {
- code = ecode.ReplyDeniedAsCD
- }
- }
- if err = s.spam.SetReplyDailySpam(c, d.Mid, code.Code(), ttl); err == nil {
- log.Info("spam.SetReplyDailySpam(%d, %d, %d)", d.Mid, code, ttl)
- } else {
- log.Error("spam.SetReplyDailySpam(%d, %d, %d) error(%v)", d.Mid, code, ttl, err)
- }
- }
- func (s *Service) recAct(c context.Context, cmsg *consumerMsg) {
- const _exp = 60
- var d spamMessage
- if err := json.Unmarshal([]byte(cmsg.Data), &d); err != nil {
- log.Error("json.Unmarshal() error(%v)", err)
- return
- }
- count, err := s.spam.IncrAct(c, d.Mid)
- if err != nil {
- log.Error("spam.IncUserRecAct(%d) error(%v)", d.Mid, err)
- return
- }
- if count < 15 {
- return
- }
- if err = s.spam.SetActionRecSpam(c, d.Mid, ecode.ReplyForbidAction.Code(), _exp); err == nil {
- log.Info("spam.SetActRecSpam(%d, %d, %d)", d.Mid, ecode.ReplyForbidAction, _exp)
- } else {
- log.Error("spam.SetActRecSpam(%d, %d, %d) error(%v)", d.Mid, ecode.ReplyForbidAction, _exp, err)
- }
- }
|