版本更新

This commit is contained in:
hahwu 2026-01-06 16:23:30 +08:00
parent da22cdf3ea
commit c660ca2ff9
18 changed files with 691 additions and 25 deletions

5
.gitignore vendored
View File

@ -7,3 +7,8 @@ release/login_service/login_service
release/login_service/log/*.log
release/shipping_service/shipping_service
release/backend
log/*.log
*.exe*
*.log
runtime/*.db
config/*

View File

@ -53,3 +53,8 @@ type CardVchartData struct {
type CardNotifyData struct {
}
type ChessData struct {
Id string
Icon string
}

75
alibaba/client.go Normal file
View File

@ -0,0 +1,75 @@
// This file is auto-generated, don't edit it. Thanks.
package alibaba
import (
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
dingtalkdrive_1_0 "github.com/alibabacloud-go/dingtalk/drive_1_0"
dingtalkoauth2_1_0 "github.com/alibabacloud-go/dingtalk/oauth2_1_0"
dingtalkstorage_1_0 "github.com/alibabacloud-go/dingtalk/storage_1_0"
dingtalkstorage_2_0 "github.com/alibabacloud-go/dingtalk/storage_2_0"
"github.com/alibabacloud-go/tea/tea"
)
const (
UNIONID = "YWjeT8Ltk2mUOP82QyMe0AiEiE"
SPACEID = "28057154815"
DENTRYID = "QBnd5ExVEaO9372acAdE2RzmVyeZqMmz"
)
/**
* 使用 Token 初始化账号Client
* @return Client
* @throws Exception
*/
func CreateClient() (_result *dingtalkoauth2_1_0.Client, _err error) {
config := &openapi.Config{}
config.Protocol = tea.String("https")
config.RegionId = tea.String("central")
_result = &dingtalkoauth2_1_0.Client{}
_result, _err = dingtalkoauth2_1_0.NewClient(config)
return _result, _err
}
func CreateStorageClientV2() (_result *dingtalkstorage_2_0.Client, _err error) {
config := &openapi.Config{}
config.Protocol = tea.String("https")
config.RegionId = tea.String("central")
_result = &dingtalkstorage_2_0.Client{}
_result, _err = dingtalkstorage_2_0.NewClient(config)
return _result, _err
}
func CreateStorageClientV1() (_result *dingtalkstorage_1_0.Client, _err error) {
config := &openapi.Config{}
config.Protocol = tea.String("https")
config.RegionId = tea.String("central")
_result = &dingtalkstorage_1_0.Client{}
_result, _err = dingtalkstorage_1_0.NewClient(config)
return _result, _err
}
func GetToken() (string, error) {
client, err := CreateClient()
if err != nil {
return "", err
}
getAccessTokenRequest := &dingtalkoauth2_1_0.GetAccessTokenRequest{
AppKey: tea.String("dingrmgtodzxaik76jpc"),
AppSecret: tea.String("RDZLaE0sxzOM0oz41iK1pHshU1W1w_XSGfiDAogUEauLq5iuxulSdZD4LGJtHwW7"),
}
resp, err := client.GetAccessToken(getAccessTokenRequest)
if err != nil {
return "", err
}
return *resp.Body.AccessToken, nil
}
func CreateDriveClient() (_result *dingtalkdrive_1_0.Client, _err error) {
config := &openapi.Config{}
config.Protocol = tea.String("https")
config.RegionId = tea.String("central")
_result = &dingtalkdrive_1_0.Client{}
_result, _err = dingtalkdrive_1_0.NewClient(config)
return _result, _err
}

265
alibaba/space.go Normal file
View File

@ -0,0 +1,265 @@
// This file is auto-generated, don't edit it. Thanks.
package alibaba
import (
"fmt"
"io"
"net/http"
"os"
"path/filepath"
dingtalkdrive_1_0 "github.com/alibabacloud-go/dingtalk/drive_1_0"
dingtalkstorage_1_0 "github.com/alibabacloud-go/dingtalk/storage_1_0"
dingtalkstorage_2_0 "github.com/alibabacloud-go/dingtalk/storage_2_0"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func CreateSpace() (_err error) {
client, _err := CreateStorageClientV1()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
addSpaceHeaders := &dingtalkstorage_1_0.AddSpaceHeaders{}
addSpaceHeaders.XAcsDingtalkAccessToken = tea.String(token)
optionCapabilities := &dingtalkstorage_1_0.AddSpaceRequestOptionCapabilities{
CanSearch: tea.Bool(true),
CanRename: tea.Bool(true),
CanRecordRecentFile: tea.Bool(true),
}
option := &dingtalkstorage_1_0.AddSpaceRequestOption{
Name: tea.String("测试空间"),
Quota: tea.Int64(1024),
Capabilities: optionCapabilities,
Scene: tea.String("scene"),
SceneId: tea.String("123"),
OwnerType: tea.String("USER"),
}
addSpaceRequest := &dingtalkstorage_1_0.AddSpaceRequest{
UnionId: tea.String("V7tQ9uuiSnF2naz1DY45fsQiEiE"),
Option: option,
}
resp, _err := client.AddSpaceWithOptions(addSpaceRequest, addSpaceHeaders, &util.RuntimeOptions{})
fmt.Println(resp)
return _err
}
func SearchDentryUuid() error {
client, _err := CreateStorageClientV2()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
searchDentriesHeaders := &dingtalkstorage_2_0.SearchDentriesHeaders{}
searchDentriesHeaders.XAcsDingtalkAccessToken = tea.String(token)
optionVisitTimeRange := &dingtalkstorage_2_0.SearchDentriesRequestOptionVisitTimeRange{}
optionCreateTimeRange := &dingtalkstorage_2_0.SearchDentriesRequestOptionCreateTimeRange{}
option := &dingtalkstorage_2_0.SearchDentriesRequestOption{
NextToken: tea.String(""),
MaxResults: tea.Int32(20),
DentryCategories: []*string{},
CreatorIds: []*string{},
ModifierIds: []*string{},
CreateTimeRange: optionCreateTimeRange,
VisitTimeRange: optionVisitTimeRange,
}
searchDentriesRequest := &dingtalkstorage_2_0.SearchDentriesRequest{
OperatorId: tea.String("F6S4MWGk8iiuUOP82QyMe0AiEiE"),
Keyword: tea.String("Dialog"),
Option: option,
}
resp, _err := client.SearchDentriesWithOptions(searchDentriesRequest, searchDentriesHeaders, &util.RuntimeOptions{})
fmt.Println(resp)
return _err
}
func AddFloder() error {
client, _err := CreateStorageClientV1()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
addFolderHeaders := &dingtalkstorage_1_0.AddFolderHeaders{}
addFolderHeaders.XAcsDingtalkAccessToken = tea.String(token)
optionAppProperties0 := &dingtalkstorage_1_0.AddFolderRequestOptionAppProperties{
Name: tea.String("属性1"),
Value: tea.String("属性值1"),
Visibility: tea.String("PUBLIC"),
}
option := &dingtalkstorage_1_0.AddFolderRequestOption{
ConflictStrategy: tea.String("AUTO_RENAME"),
AppProperties: []*dingtalkstorage_1_0.AddFolderRequestOptionAppProperties{optionAppProperties0},
}
addFolderRequest := &dingtalkstorage_1_0.AddFolderRequest{
UnionId: tea.String("V7tQ9uuiSnF2naz1DY45fsQiEiE"),
Name: tea.String("测试文件夹"),
Option: option,
}
resp, _err := client.AddFolderWithOptions(tea.String("28051557270"), tea.String("0"), addFolderRequest, addFolderHeaders, &util.RuntimeOptions{})
fmt.Println(resp)
return _err
}
func SearchSpaceId() error {
client, _err := CreateDriveClient()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
listSpacesHeaders := &dingtalkdrive_1_0.ListSpacesHeaders{}
listSpacesHeaders.XAcsDingtalkAccessToken = tea.String(token)
listSpacesRequest := &dingtalkdrive_1_0.ListSpacesRequest{
UnionId: tea.String(UNIONID),
SpaceType: tea.String("org"),
NextToken: tea.String(""),
MaxResults: tea.Int32(50),
}
resp, _err := client.ListSpacesWithOptions(listSpacesRequest, listSpacesHeaders, &util.RuntimeOptions{})
fmt.Println(resp)
return _err
}
func GetMaxFileVersion(version int, nextToken string) int {
client, _err := CreateStorageClientV1()
if _err != nil {
return 0
}
token, err := GetToken()
if err != nil {
return 0
}
listDentryVersionsHeaders := &dingtalkstorage_1_0.ListDentryVersionsHeaders{}
listDentryVersionsHeaders.XAcsDingtalkAccessToken = tea.String(token)
listDentryVersionsRequest := &dingtalkstorage_1_0.ListDentryVersionsRequest{
NextToken: tea.String(nextToken),
MaxResults: tea.Int32(30),
UnionId: tea.String(UNIONID),
}
resp, _err := client.ListDentryVersionsWithOptions(tea.String("28057154815"), tea.String("206700372014"), listDentryVersionsRequest, listDentryVersionsHeaders, &util.RuntimeOptions{})
if resp.Body.NextToken != nil {
fmt.Println("nextToken:", *resp.Body.NextToken)
maxVersion := 0
for _, v := range resp.Body.Dentries {
if int(*v.Version) > maxVersion {
maxVersion = int(*v.Version)
}
}
return GetMaxFileVersion(maxVersion, *resp.Body.NextToken)
} else {
return version
}
}
func GetFileInfo() error {
client, _err := CreateStorageClientV1()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
listDentriesHeaders := &dingtalkstorage_1_0.ListDentriesHeaders{}
listDentriesHeaders.XAcsDingtalkAccessToken = tea.String(token)
listDentriesRequest := &dingtalkstorage_1_0.ListDentriesRequest{
ParentId: tea.String("0"),
NextToken: tea.String(""),
MaxResults: tea.Int32(30),
OrderBy: tea.String("MODIFIED_TIME"),
Order: tea.String("DESC"),
WithThumbnail: tea.Bool(false),
UnionId: tea.String(UNIONID),
}
resp, _err := client.ListDentriesWithOptions(tea.String("28057154815"), listDentriesRequest, listDentriesHeaders, &util.RuntimeOptions{})
fmt.Println(resp)
return _err
}
func DownloadFile() error {
client, _err := CreateStorageClientV1()
if _err != nil {
return _err
}
token, err := GetToken()
if err != nil {
return err
}
MaxVersion := GetMaxFileVersion(0, "")
getFileDownloadInfoHeaders := &dingtalkstorage_1_0.GetFileDownloadInfoHeaders{}
getFileDownloadInfoHeaders.XAcsDingtalkAccessToken = tea.String(token)
option := &dingtalkstorage_1_0.GetFileDownloadInfoRequestOption{
Version: tea.Int64(int64(MaxVersion)),
PreferIntranet: tea.Bool(false),
}
getFileDownloadInfoRequest := &dingtalkstorage_1_0.GetFileDownloadInfoRequest{
UnionId: tea.String("YWjeT8Ltk2mUOP82QyMe0AiEiE"),
Option: option,
}
resp, _err := client.GetFileDownloadInfoWithOptions(tea.String("28057154815"), tea.String("206700372014"), getFileDownloadInfoRequest, getFileDownloadInfoHeaders, &util.RuntimeOptions{})
responseBody := resp.Body
downloadUrl := responseBody.HeaderSignatureInfo.ResourceUrls[0]
header := map[string]string{
"Authorization": *responseBody.HeaderSignatureInfo.Headers["Authorization"],
"x-oss-date": *responseBody.HeaderSignatureInfo.Headers["x-oss-date"],
}
_, _err = _downloadFile(header, *downloadUrl)
return _err
}
func _downloadFile(headers map[string]string, url string) ([]byte, error) {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
// 默认的下载相关 headers可被传入的 headers 覆盖
defaultHeaders := map[string]string{
"Accept": "application/xlsx",
"Accept-Encoding": "identity",
"Connection": "keep-alive",
"Cache-Control": "no-cache",
}
for k, v := range defaultHeaders {
req.Header.Set(k, v)
}
for k, v := range headers {
req.Header.Set(k, v)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
return nil, fmt.Errorf("download failed: status %s", resp.Status)
}
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
targetDir := "D:/Github/docs/config"
if err := os.MkdirAll(targetDir, 0755); err != nil {
return nil, err
}
targetFile := filepath.Join(targetDir, "DialogueData.xlsx")
if err := os.WriteFile(targetFile, data, 0644); err != nil {
return nil, err
}
return data, nil
}

5
conf/app.yml Normal file
View File

@ -0,0 +1,5 @@
name: "Admin Backend"
version: "1.0.0"
debug: true
port: 5240

View File

@ -37,7 +37,7 @@ mysqls:
password: 'GWFj1cHaqjpzvcsHBWTFtLWtm8MUZKROx_wvbV6jPg=='
database: 'merge_pet_london_%d'
idleTimeout: Infinity
- host: '127.0.0.1'
- host: '47.254.83.25'
name: 'merge_pet_online'
port: 3306
user: 'root'

View File

@ -5,4 +5,7 @@ user:
- account: "Daniela Cristina Schmitt"
keys: "MergeData, cardName, GuideData, ChapterTip, DialogueData"
keysType: "no_include" # keysType 不包含
colunm: "key,en_US,pt_BR"
colunm: "key,en_US,pt_BR"
- account: "Catarina Pereira" # 账号名
keys: "MergeData, cardName, DialogData, ChapterTip, chapter_title" # 需要的键值列表,逗号分隔
colunm: "key,en_US,pt_BR" # 需要翻译的列名

View File

@ -1,10 +1,8 @@
package controller
import (
"backend/model"
"backend/util"
"fmt"
"time"
"github.com/gin-gonic/gin"
)
@ -56,21 +54,30 @@ func CopyUserOperation(srcAppID, dstAppID, srcUid, dstUid int) error {
defer DstDb.Close()
// 复制 Mod 表
srcData := DbData{}
_, err = model.UserGM(dstAppID, 1, dstUid, "logout")
time.Sleep(time.Second * 2)
if err != nil {
return err
}
// _, err = model.UserGM(dstAppID, 1, dstUid, "logout")
// time.Sleep(time.Second * 2)
// if err != nil {
// return err
// }
err = SrcDb.Get(&srcData, "SELECT dwUin, mData, updateTime FROM t_player_mod WHERE dwUin = ? LIMIT 1", srcUid)
if err != nil {
return err
}
dstData := DbData{}
err = DstDb.Get(&dstData, "SELECT dwUin, mData, updateTime FROM t_player_mod WHERE dwUin = ? LIMIT 1", dstUid)
var auto_id int64
_ = DstDb.Get(&auto_id, "SELECT auto_id FROM t_account WHERE user_name = ?", srcData.DwUin)
if auto_id == 0 {
result, err := DstDb.Exec("INSERT INTO t_account (user_name, user_password) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_password = VALUES(user_password)", srcData.DwUin, "123456")
if err != nil {
return err
}
auto_id, err = result.LastInsertId()
}
newUid := int(auto_id) + 100000000*dstAppID + 100000
_, err = DstDb.Exec("INSERT INTO t_player_baseinfo (dwUin, user_name, start_order_id) VALUES (?, ?, 1) ON DUPLICATE KEY UPDATE user_name = VALUES(user_name)", newUid, srcData.DwUin)
if err != nil {
return err
}
_, err = DstDb.Exec("UPDATE t_player_mod SET mData = ?, updateTime = ? WHERE dwUin = ?", srcData.MData, util.Now(), dstUid)
_, err = DstDb.Exec("INSERT INTO t_player_mod (dwUin, mData, updateTime) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE mData = VALUES(mData), updateTime = VALUES(updateTime)", newUid, srcData.MData, srcData.UpdateTime)
if err != nil {
return err
}

229
controller/scripts.go Normal file
View File

@ -0,0 +1,229 @@
package controller
import (
"backend/alibaba"
"backend/util"
"fmt"
"os/exec"
"time"
"github.com/gin-gonic/gin"
"github.com/xuri/excelize/v2"
)
func Copywriting(c *gin.Context) {
request := struct {
Step int `json:"step"`
}{}
if err := c.BindJSON(&request); err != nil {
failed(c, "参数绑定失败: "+err.Error())
return
}
switch request.Step {
case 0:
success(c, map[string]interface{}{
"step": 1,
"label": "下载文案文件",
"tips": []string{},
"code": 0,
})
case 1:
CopywritingStep1(c)
case 2:
CopywritingStep2(c)
case 3:
CopywritingStep3(c)
default:
failed(c, "无效的步骤")
}
util.AddAdminLog(c, "文案自动化脚本", request)
}
func CopywritingStep1(c *gin.Context) {
err := alibaba.DownloadFile()
if err != nil {
success(c, map[string]interface{}{
"step": 2,
"label": "提交git",
"tips": []string{
err.Error(),
},
"code": 1,
})
return
}
// 执行脚本的逻辑
success(c, map[string]interface{}{
"step": 2,
"label": "提交git",
"tips": []string{
"下载文案文件DialogueData.xlsx成功",
},
"code": 0,
})
}
func CopywritingStep2(c *gin.Context) {
time.Sleep(time.Second)
code := 0
repoDir := `D:\Github\docs`
file := `config\DialogueData.xlsx`
// git pull
if out, err := exec.Command("git", "-C", repoDir, "pull").CombinedOutput(); err != nil {
scritp_fail(c, "git pull 失败: "+err.Error()+": "+string(out))
return
}
// git add
if out, err := exec.Command("git", "-C", repoDir, "add", file).CombinedOutput(); err != nil {
scritp_fail(c, "git add 失败: "+err.Error()+": "+string(out))
return
}
// git commit (ignore non-fatal commit output/errors like "nothing to commit")
exec.Command("git", "-C", repoDir, "commit", "-m", "Update DialogueData.xlsx").Run()
// git push
if out, err := exec.Command("git", "-C", repoDir, "push").CombinedOutput(); err != nil {
scritp_fail(c, "git push 失败: "+err.Error()+": "+string(out))
return
}
_ = code
// 执行脚本的逻辑
success(c, map[string]interface{}{
"step": 3,
"label": "修改翻译表",
"tips": []string{},
"code": 0,
})
}
func CopywritingStep3(c *gin.Context) {
file := `D:\Github\docs\config\DialogueData.xlsx`
f, err := excelize.OpenFile(file)
if err != nil {
failed(c, "打开文件失败: "+err.Error())
return
}
defer f.Close()
rows, err := f.GetRows("DialogueData")
if err != nil {
failed(c, "读取sheet失败: "+err.Error())
return
}
type Dialogue struct {
Id int
Key string
Dialogue string
}
dialogueMap := make(map[string]Dialogue)
for i, row := range rows {
// 跳过标题行(如果有)
if i < 2 {
continue
}
var dVal, iVal string
if len(row) > 3 {
dVal = row[3] // D列0-based 索引 3
}
if len(row) > 8 {
iVal = row[8] // I列0-based 索引 8
}
var lVal string
if len(row) > 11 {
lVal = row[11] // L列0-based 索引 11
}
if lVal != "" {
continue
}
if dVal == "" || iVal == "" {
continue
}
dialogueMap[dVal] = Dialogue{
Key: dVal,
Dialogue: iVal,
Id: i - 2, // 减去标题行
}
}
type db_data struct {
Id int `db:"Id"`
Key string `db:"key"`
EnUs string `db:"en_us"`
OldValue string
}
var dbDatas []db_data
db := util.MPool.GetGameDB()
if db == nil {
scritp_fail(c, "获取数据库连接失败")
return
}
err = db.Select(&dbDatas, "SELECT `key`, `en_us` FROM `language`")
if err != nil {
scritp_fail(c, "查询语言表失败: "+err.Error())
return
}
updateData := []db_data{}
for _, item := range dbDatas {
if val, ok := dialogueMap[item.Key]; ok {
if val.Dialogue != item.EnUs {
item.OldValue = item.EnUs
item.EnUs = val.Dialogue
updateData = append(updateData, item)
}
delete(dialogueMap, item.Key)
}
}
for _, item := range updateData {
_, err := db.Exec("UPDATE `language` SET `en_us` = ? WHERE `key` = ?", item.EnUs, item.Key)
if err != nil {
scritp_fail(c, "更新语言表失败: "+err.Error())
return
}
_, err = db.Exec("insert into language_op (`LanguageId`, `Field`, `OldValue`, `NewValue`, `Type`, `Update`, `Role`) values (?, ?, ?, ?, ?,?,?)", item.Id, "en_us", item.OldValue, item.EnUs, "Edit", util.Now(), "scripts")
}
for _, v := range dialogueMap {
result, err := db.Exec("INSERT INTO `language` (`key`, `en_us`) VALUES (?, ?)", v.Key, v.Dialogue)
if err != nil {
scritp_fail(c, "插入语言表失败: "+err.Error())
return
}
id, _ := result.LastInsertId()
_, err = db.Exec("insert into language_op (`LanguageId`, `Field`, `OldValue`, `NewValue`, `Type`, `Update`, `Role`) values (?, ?, ?, ?, ?,?,?)", id, "All", "", v.Dialogue, "Add", util.Now(), "scripts")
}
// 将结果放到 gin 上下文,供后续使用
c.Set("DialogueMap", dialogueMap)
tips := []string{}
if len(updateData) > 0 {
tips = append(tips, fmt.Sprintf("更新了 %d 条翻译内容", len(updateData)))
for _, v := range updateData {
tips = append(tips, fmt.Sprintf("Key: %s", v.Key))
}
}
if len(dialogueMap) > 0 {
tips = append(tips, fmt.Sprintf("新增了 %d 条翻译内容", len(dialogueMap)))
for _, v := range dialogueMap {
tips = append(tips, fmt.Sprintf("Key: %s", v.Key))
}
}
// 执行脚本的逻辑
success(c, map[string]interface{}{
"step": -1,
"label": "脚本执行成功",
"tips": []string{
fmt.Sprintf("增加%d个key更新%d个key", len(dialogueMap), len(updateData)),
},
"code": 0,
})
}
func scritp_fail(c *gin.Context, err string) {
success(c, map[string]interface{}{
"step": -1,
"label": "",
"tips": []string{
err,
},
"code": 1,
})
}

View File

@ -1,10 +1,12 @@
package controller
import (
"backend/Type"
"backend/model"
"backend/store"
"backend/util"
"fmt"
"strings"
"github.com/gin-gonic/gin"
)
@ -74,6 +76,27 @@ func UserDetail(c *gin.Context) {
log := model.Log{
Uid: request.Uid,
}
if user["Order"] != nil {
order := user["Order"].(map[string]interface{})
for k, v := range order {
info := v.(map[string]interface{})
chess_id := info["ChessId"].(string)
chess_list := strings.Split(chess_id, " ")
chess_arr := []Type.ChessData{}
for _, cid := range chess_list {
if cid == "" {
continue
}
chess_url := util.GetChessURL(cid)
chess_arr = append(chess_arr, Type.ChessData{
Id: cid,
Icon: chess_url,
})
}
info["ChessId"] = chess_arr
order[k] = info
}
}
heat, _ := log.Heat()
if err != nil {
fmt.Print(err)

11
go.mod
View File

@ -8,6 +8,7 @@ require (
github.com/Ullaakut/nmap v2.0.2+incompatible
github.com/alibabacloud-go/cloudauth-20190307/v4 v4.9.2
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.9
github.com/alibabacloud-go/dingtalk v1.6.97
github.com/alibabacloud-go/dysmsapi-20170525/v5 v5.1.2
github.com/alibabacloud-go/tea v1.3.10
github.com/alibabacloud-go/tea-console v1.0.0
@ -18,7 +19,11 @@ require (
github.com/google/uuid v1.6.0
github.com/jmoiron/sqlx v1.4.0
github.com/larksuite/oapi-sdk-go/v3 v3.4.9
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/oschwald/geoip2-golang v1.13.0
github.com/robfig/cron/v3 v3.0.1
github.com/xuri/excelize/v2 v2.10.0
go.etcd.io/bbolt v1.4.3
golang.org/x/crypto v0.43.0
golang.org/x/net v0.46.0
google.golang.org/protobuf v1.34.1
@ -30,6 +35,7 @@ require (
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect
github.com/alibabacloud-go/debug v1.0.1 // indirect
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
github.com/alibabacloud-go/gateway-dingtalk v1.0.2 // indirect
github.com/alibabacloud-go/openapi-util v0.1.1 // indirect
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
@ -50,15 +56,14 @@ require (
github.com/goccy/go-json v0.10.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/jonboulle/clockwork v0.5.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
github.com/lestrrat-go/strftime v1.1.1 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/oschwald/geoip2-golang v1.13.0 // indirect
github.com/oschwald/maxminddb-golang v1.13.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
@ -69,9 +74,7 @@ require (
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
github.com/xuri/efp v0.0.1 // indirect
github.com/xuri/excelize/v2 v2.10.0 // indirect
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
go.etcd.io/bbolt v1.4.3 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/sys v0.37.0 // indirect
golang.org/x/text v0.30.0 // indirect

22
go.sum
View File

@ -19,6 +19,7 @@ github.com/alibabacloud-go/darabonba-map v0.0.2 h1:qvPnGB4+dJbJIxOOfawxzF3hzMnIp
github.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+MtEzBunJwQGceGQlvaPGPc=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.0/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.11/go.mod h1:wHxkgZT1ClZdcwEVP/pDgYK/9HucsnCfMipmJgCz4xY=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.12/go.mod h1:cgtLEj8i4ddXMcQgq4PnpVQvlzS+y5B+QtdSfmcLM3A=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.9 h1:7P0KWfed/YMtpeuW3E2iwokzoz9L7H9rB+VZzg5DeBs=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.9/go.mod h1:kgnXaV74AVjM3ZWJu1GhyXGuCtxljJ677oUfz6MyJOE=
github.com/alibabacloud-go/darabonba-signature-util v0.0.7 h1:UzCnKvsjPFzApvODDNEYqBHMFt1w98wC7FOo0InLyxg=
@ -29,10 +30,14 @@ github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6p
github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg=
github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
github.com/alibabacloud-go/dingtalk v1.6.97 h1:3dc4fEpJd/2BXYFsqs9ipBTpxJKZXQhofaZhvz6mECM=
github.com/alibabacloud-go/dingtalk v1.6.97/go.mod h1:mUcgNRgMGQzABtiZtTK8a3b6LwQBQ8t9WsDKzklqVpg=
github.com/alibabacloud-go/dysmsapi-20170525/v5 v5.1.2 h1:mNSlLE7QQiZLmC55BJog3PFJFtQp10lbnnEWWIxeCvM=
github.com/alibabacloud-go/dysmsapi-20170525/v5 v5.1.2/go.mod h1:mYOaEwXaib4RLB2NY8cXFjKbxPQHUqt6lhPEOvqR8aw=
github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q=
github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE=
github.com/alibabacloud-go/gateway-dingtalk v1.0.2 h1:+etjmc64QTmYvHlc6eFkH9y2DOc3UPcyD2nF3IXsVqw=
github.com/alibabacloud-go/gateway-dingtalk v1.0.2/go.mod h1:JUvHpkJtlPFpgJcfXqc9Y4mk2JnoRn5XpKbRz38jJho=
github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws=
github.com/alibabacloud-go/openapi-util v0.1.1 h1:ujGErJjG8ncRW6XtBBMphzHTvCxn4DjrVw4m04HsS28=
@ -63,6 +68,7 @@ github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQ
github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA=
github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw=
github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
github.com/alibabacloud-go/tea-utils/v2 v2.0.5/go.mod h1:dL6vbUT35E4F4bFTHL845eUloqaerYBYPsdWR2/jhe4=
github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=
github.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0=
@ -142,6 +148,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
@ -159,6 +167,8 @@ github.com/larksuite/oapi-sdk-go/v3 v3.4.9 h1:ZzsPtdF2tsLbocQdKLNFwFCzWfwmKtD4kb
github.com/larksuite/oapi-sdk-go/v3 v3.4.9/go.mod h1:ZEplY+kwuIrj/nqw5uSCINNATcH3KdxSN7y+UxYY5fI=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.1.1 h1:zgf8QCsgj27GlKBy3SU9/8MMgegZ8UCzlCyHYrUF0QU=
@ -211,9 +221,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4=
github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
@ -251,11 +261,12 @@ golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1m
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@ -287,7 +298,6 @@ golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
@ -303,6 +313,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -322,7 +334,6 @@ golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
@ -337,9 +348,9 @@ golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@ -349,7 +360,6 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=

13
main.go
View File

@ -67,6 +67,15 @@ func init() {
}
func main() {
defer func() {
if err := recover(); err != nil {
log.Printf("Recovered from panic: %v", err)
// 这里可以添加更多的错误 handling 逻辑,比如发送通知等
// 重新启动服务器
fmt.Print("Restarting server...")
os.Exit(1)
}
}()
r := gin.Default()
loginApi := r.Group("/api/auth")
{
@ -138,6 +147,10 @@ func main() {
api.POST("language/delete", controller.LanguageDelete)
}
scripts := r.Group("/api/scripts", middleware.ValidateToken())
{
scripts.POST("/copywriting", controller.Copywriting) // 下载文案文件
}
go util.ScheduleDailyTask()
go server.Server()
go model.InitToken() // 初始化 Token 列表

View File

@ -13,7 +13,7 @@ func GetUserList(AppId, ServerId, PageSize, CurrentPage, Uid, StartTime, EndTime
}
db := util.MPool.GetMysqlDB(App, ServerId)
defer db.Close()
if db.DB == nil {
if db == nil || db.DB == nil {
return nil, 0, fmt.Errorf("failed to get MySQL database")
}
users := []*User{}
@ -54,6 +54,9 @@ func UserDetail(Uid, Node int) (map[string]interface{}, error) {
Uid: int64(Uid),
}
AppId := Uid / 100000000
if AppId != 1 {
Node = 1
}
ws, err := util.GetWebsocket(AppId, Node)
if err != nil {
return nil, fmt.Errorf("failed to get websocket: %v", err)
@ -80,7 +83,7 @@ func UserGM(AppId, ServerId, Uid int, Command string) (interface{}, error) {
node := 0
err = db.Get(&node, "SELECT `node` FROM t_player_baseinfo WHERE dwUin = ? ", Uid)
//TODO 兼容处理
if AppId == 2 {
if AppId != 1 {
node = 1
}
ws, err := util.GetWebsocket(AppId, node)

View File

@ -2,6 +2,7 @@ package main
import (
"backend/Type"
"backend/alibaba"
"backend/feishu"
"backend/model"
"backend/sdk/ship/model/tuyou"
@ -95,3 +96,9 @@ func TestDecrypt(t *testing.T) {
dec, _ := util.Decrypt("pUf9tft9GOPjV1z855Jf2DpB5NUpGEc_")
fmt.Printf("enc:%s\ndec:%s\n", enc, dec)
}
func TestAlibaba(t *testing.T) {
//err := alibaba.CreateSpace()
version := alibaba.DownloadFile()
fmt.Println("version:", version)
}

View File

@ -28,7 +28,9 @@ func LoginResponse(c *gin.Context, AppId, AreaCode int, Version string) {
func GetUserInfo(AppId, AreaCode int, Uid, Version string) (int, string, int) {
lockUid(Uid)
defer unlockUid(Uid)
if AppId == 0 {
return 3562, "ga-bp10efkfr8mgzei6d9obf.aliyunga0019.com", 1
}
Db := MPool.GetGameDB()
defer Db.Close()
var ServerId int
@ -43,6 +45,7 @@ func GetUserInfo(AppId, AreaCode int, Uid, Version string) (int, string, int) {
if AppId == 5 {
return 3601, "192.168.6.195", 1
}
appConf, _ := GetAppConfig(AppId)
PlayerDb := MPool.GetMysqlDB(appConf, 1)
var node int

View File

@ -522,6 +522,11 @@ func LoginSuccess(c *gin.Context, message string, Port int, Host string, ServerI
})
}
func GetChessURL(ChessId string) string {
key := fmt.Sprintf("UI_MergeData_%s", ChessId)
return GetLanguageImageURL(key)
}
func GetLanguageImageURL(key string) string {
// 检查是否符合 UI_MergeData_<id> 格式
re := regexp.MustCompile(`^UI_MergeData_(\d+)$`)
@ -543,6 +548,7 @@ func GetLanguageImageURL(key string) string {
}
}
if iconStr != "" {
// baseDir := `D:\Github\AplusB_Pet_nation\Assets\GameMain\UI\UISprites\MergeObj`
baseDir := `/data/AplusB_Pet_nation/Assets/GameMain/UI/UISprites/MergeObj`
if fi, err := os.Stat(baseDir); err == nil && fi.IsDir() {
var found string

View File

@ -20,7 +20,11 @@ func GetWebsocket(AppId, ServerId int) (*websocket.Conn, error) {
}
origin := "http://localhost/"
if AppId == 0 {
Server.Host = "google.bywaystudios.com"
}
url := fmt.Sprintf("ws://%s:%d/", Server.Host, App.WsPort+ServerId)
config, err := websocket.NewConfig(url, origin)
if err != nil {
return nil, fmt.Errorf("failed to create websocket config: %v", err)