2025-07-23 18:06:16 +08:00

273 lines
7.7 KiB
Go

package smdl
import (
"admin/apps/game/domain/entity"
"admin/apps/game/model"
"admin/internal/consts"
"admin/internal/errcode"
"admin/internal/model/dto"
"admin/lib/httpclient"
"admin/lib/xlog"
"net/url"
"strconv"
"time"
)
type BanHook struct {
}
func (hook *BanHook) Create(projectInfo *entity.Project, resource string, dtoObj dto.CommonDtoValues) error {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
}
et := (&entity.CommonResource{}).FromPo(&model.Ban{}).FromDto(dtoObj)
banInfo := et.ToPo().(*model.Ban)
banApi := ""
switch banInfo.BanType {
case consts.BanType_Role:
banApi = "banrole"
case consts.BanType_RoleChat:
banApi = "banroletalk"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
return nil
}
roleId := banInfo.Value
params := &url.Values{}
params.Add("server", banInfo.ServerConfID)
params.Add("roleid", roleId)
expireAt := banInfo.ExpireAt
if !expireAt.Valid {
// 解封
params.Add("forbidtime", "0")
params.Add("desc", banInfo.BanReason)
params.Add("notifytouser", banInfo.BanNotifyReason)
} else {
dura := int64(expireAt.Time.Sub(time.Now()).Minutes()) // 神魔大陆封禁是分钟
if dura <= 0 {
// 解封
params.Add("forbidtime", "0")
} else {
params.Add("forbidtime", strconv.FormatInt(int64(dura), 10))
params.Add("desc", banInfo.BanReason)
params.Add("notifytouser", banInfo.BanNotifyReason)
}
}
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/"+banApi, "get", params, &rsp)
if err != nil {
return err
}
return nil
}
func (hook *BanHook) Edit(projectInfo *entity.Project, resource string, dtoObj dto.CommonDtoValues) error {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
}
et := (&entity.CommonResource{}).FromPo(&model.Ban{}).FromDto(dtoObj)
banInfo := et.ToPo().(*model.Ban)
banApi := ""
switch banInfo.BanType {
case consts.BanType_Role:
banApi = "banrole"
case consts.BanType_RoleChat:
banApi = "banroletalk"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "add")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
return nil
}
roleId := banInfo.Value
params := &url.Values{}
params.Add("server", banInfo.ServerConfID)
params.Add("roleid", roleId)
expireAt := banInfo.ExpireAt
if !expireAt.Valid {
// 解封
params.Add("forbidtime", "0")
params.Add("desc", banInfo.BanReason)
params.Add("notifytouser", banInfo.BanNotifyReason)
} else {
dura := int64(expireAt.Time.Sub(time.Now()).Minutes()) // 神魔大陆封禁是分钟
if dura <= 0 {
// 解封
params.Add("forbidtime", "-1")
params.Add("desc", "")
params.Add("notifytouser", "")
} else {
params.Add("forbidtime", strconv.FormatInt(int64(dura), 10))
params.Add("desc", banInfo.BanReason)
params.Add("notifytouser", banInfo.BanNotifyReason)
}
}
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/"+banApi, "get", params, &rsp)
if err != nil {
return err
}
return nil
}
func (hook *BanHook) Delete(projectInfo *entity.Project, resource string, dtoObj dto.CommonDtoValues) error {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
}
et := (&entity.CommonResource{}).FromPo(&model.Ban{}).FromDto(dtoObj)
banInfo := et.ToPo().(*model.Ban)
banApi := ""
switch banInfo.BanType {
case consts.BanType_Role:
banApi = "banrole"
case consts.BanType_RoleChat:
banApi = "banroletalkdel"
default:
if banInfo.BanType == consts.BanType_AccountTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "remove")
// 所有区服
serverList, err := getAllRunningServers(projectInfo)
if err != nil {
return err
}
for _, v := range serverList {
params.Set("server", v.ServerId)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止账号交易白名单请求:%+v错误:%v", banInfo, err)
}
}
return nil
} else if banInfo.BanType == consts.BanType_RoleTrade {
params := &url.Values{}
params.Add("cmd_data", "OpWhitelist")
params.Add("type", banInfo.BanType)
params.Add("value", banInfo.Value)
params.Add("op", "remove")
params.Set("server", banInfo.ServerConfID)
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp)
if err != nil {
return errcode.New(errcode.ServerError, "发送新增禁止角色交易白名单请求:%+v错误:%v", banInfo, err)
}
return nil
}
xlog.Warnf("神魔大陆不支持此类型的封禁:%v", banInfo.BanType)
return nil
}
roleId := banInfo.Value
params := &url.Values{}
params.Add("server", banInfo.ServerConfID)
params.Add("roleid", roleId)
// 解封
params.Add("forbidtime", "-1")
params.Add("desc", "")
params.Add("notifytouser", "")
rsp := make(map[string]any)
err := httpclient.Request(alisrvAddr+"/"+banApi, "get", params, &rsp)
if err != nil {
return err
}
return nil
}