Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

145 lines
4.0 KiB
Go

package mineser
import (
"91porn-server/app/appg"
"91porn-server/app/middleware/authuser"
"91porn-server/common"
"91porn-server/common/log"
"91porn-server/common/stderr"
"91porn-server/models/v/followmod"
"91porn-server/models/v/usermod"
"91porn-server/models/v/walletmod"
"errors"
"fmt"
"strconv"
"time"
)
// Follow 关注或者取消关注
func Follow(uid uint64, followUID uint64, isFollow bool, isShort bool) (code stderr.Code, data interface{}) {
if isFollow {
//判断被关注用户是否存在或者被封
user, err := usermod.FindUserByUID(followUID)
if err != nil {
return stderr.ErrDbQueryError, nil
}
if user == nil || user.HasLocked {
return stderr.UserIsNotExists, ""
}
//关注人数限制
if user.Follows >= followmod.MaxFollowUsers {
return stderr.Success, nil
}
//判断关注用户是否存在或者被封
followUser, err := usermod.FindUserByUID(uid)
if err != nil {
return stderr.ErrDbQueryError, nil
}
if followUser == nil || followUser.HasLocked {
return stderr.UserIsNotExists, ""
}
if _, err := followmod.AddFollow(uid, followUID, isShort); err != nil {
return stderr.ErrDbInsertError, ""
} else { //关注成功
common.Go(func() {
//校验该用户一天关注上限,超过50人则封禁
key := "user-follow-" + strconv.FormatUint(uid, 10)
ret, _ := appg.Redis.Get(key)
//当前用户24小时内关注次数
i := 0
if ret != nil {
i, _ = strconv.Atoi(*ret)
//24小时内关注超过上限,封禁
if i > followmod.ToDayFollowLimit {
log.Warn("user follow upper limit", log.Any("uid", uid), log.Any("followUID", followUID), log.Any("followCount", i))
//如果用户不存在, 则证明是脚本在刷私信, 封禁该用户
hasLocked := true
lockReason := "脚本刷关注用户"
summary := "未知"
portrait := "bf211222/image/121/si/1d8/2nw/d9af01c3203a5d0615319a7c7d8faf72.jpeg"
name := "游客" + strconv.FormatUint(uid, 10)
doc := usermod.UserSelector{
HasLocked: &hasLocked,
LockReason: &lockReason,
Summary: &summary,
Portrait: &portrait,
Name: &name,
}
usermod.Update(uid, doc)
//删除token
authuser.RevokeTokenCache(uid)
//删除redis
appg.Redis.Del(key)
}
}
if i <= followmod.ToDayFollowLimit {
i += 1
appg.Redis.Set(key, strconv.Itoa(i), time.Hour*24)
}
})
common.Go(func() {
// 排行榜
//fans.Incr(followUID)
_ = usermod.IncFans(followUID)
_ = usermod.IncFollow(uid)
//r := int64(1)
//_ = leaderboardmod.Insert(nil, followUID, leaderboardmod.Inc{FollowCountWeek: &r})
})
////存动态
//common.Go(func() {
// _ = messageser.PublicAddMsg(messagemod.PublicAddMsg{
// SendUid: uid,
// TakeUid: followUID,
// MsgType: messagemod.FollowMsg,
// })
//})
}
return stderr.Success, nil
}
if count, err := followmod.CloseFollow(uid, followUID); err != nil {
return stderr.ErrDbDeleteError, ""
} else if count > 0 {
common.Go(func() {
// // 排行榜
// fans.Decr(followUID)
_ = usermod.DecFans(followUID)
_ = usermod.DecFollow(uid)
// r := int64(-1)
// _ = leaderboardmod.Insert(nil, followUID, leaderboardmod.Inc{FollowCountWeek: &r})
})
}
return stderr.Success, nil
}
func UseDownloadCount(uid uint64) (code stderr.Code, err error) {
user, err := usermod.FindUserByUID(uid)
if err != nil {
return stderr.ErrDbQueryError, nil
}
if user == nil || user.HasLocked {
return stderr.UserIsNotExists, nil
}
wallet, err := walletmod.GetWallet(uid)
if err != nil {
return stderr.ErrDbQueryError, nil
}
if wallet == nil || wallet.ID.IsZero() {
return stderr.CodeEmptyData, nil
}
if wallet.DownloadCount <= 0 {
return stderr.DownloadCountIsNotEnough, errors.New("DownloadCount is not enough")
}
err = walletmod.CreditDownloadCount(nil, 1, uid)
if err != nil {
log.Error(fmt.Sprintf("UseDownloadCount walletmod.CreditDownloadCount err %s", err.Error()))
return stderr.ErrDbUpdateError, nil
}
return stderr.Success, nil
}