屏蔽:处理玩家和军团信息接口

This commit is contained in:
luying
2021-11-11 15:51:25 +08:00
parent bbb2903f12
commit 89e3dd519b
17 changed files with 261 additions and 81 deletions

View File

@@ -1,7 +1,7 @@
import {Application, RouteRecord, FrontendOrBackendSession, HandlerCallback, pinus} from "pinus";
// import { checkEvent } from '../../../services/eventSercive';
import { refresh } from '../../../services/refreshService';
import { checkPrivateChat, checkGuildChat, checkOtherChat, getWorldChannelSid, checkRoleName, checkGuildName } from "../../../services/chatService";
import { checkPrivateChat, checkGuildChat, checkOtherChat, checkRoleName, checkGuildName } from "../../../services/sdkService";
import { resResult, checkWhiteListWithUid, genCode } from "../../../pubUtils/util";
import { CHANNEL_PREFIX, STATUS } from "../../../consts";
import { UserModel } from "../../../db/User";

View File

@@ -37,6 +37,18 @@ export class ConnectorRemote {
}
}
public async setOtherUserRoleNameSession(params: { roleId: string, roleName: string}[]) {
let sessionService = this.app.get('sessionService');
for(let {roleId, roleName} of params) {
let sessions = sessionService.getByUid(roleId);
if(!!sessions) {
sessions.forEach(session => {
sessionService.aimportAll(session.id, { roleName });
});
}
}
}
/**
* 重载json资源
*/

View File

@@ -1,5 +1,6 @@
import { Application, ChannelService, HandlerService, } from 'pinus';
import { reloadResources } from '../../../pubUtils/data';
import { treatGuildName } from '../../../services/sdkService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -21,4 +22,8 @@ export class GuildRemote {
public async reloadResources() {
reloadResources();
}
public async treatGuildName(content: string) {
await treatGuildName(content);
}
}

View File

@@ -10,6 +10,7 @@ import { DEFAULT_HEROES } from '../../../consts';
import { Figure } from '../../../domain/dbGeneral';
import { getDefaultRoleInfo } from '../../../services/roleService';
import { PVPConfigType } from '../../../db/SystemConfig';
import { treatRoleName } from '../../../services/sdkService';
export default function (app: Application) {
new HandlerService(app, {});
return new RoleRemote(app);
@@ -116,4 +117,8 @@ export class RoleRemote {
this.app.set('pvpSeasonEndTime', pvpConfig.seasonEndTime);
}
}
public async treatRoleName(roleId: string) {
await treatRoleName(roleId);
}
}

View File

@@ -1,6 +1,6 @@
import { CHAT_SYSTEM } from './../pubUtils/dicParam';
import { PrivateChatRec } from './../db/ChatInfo';
import { RoleModel, RoleType } from './../db/Role';
import { RoleModel } from './../db/Role';
import { GroupMessageModel } from './../db/GroupMessage';
import { CounterModel } from './../db/Counter';
import { STATUS } from './../consts/statusCode';
@@ -8,16 +8,12 @@ import { PrivateMessageModel, PrivateMessageParam, PrivateMessageType } from './
import { GroupMessageParam, GroupMessageType } from '../db/GroupMessage';
import { genCode, resResult } from '../pubUtils/util';
import { pinus } from 'pinus';
import { CHANNEL_PREFIX, MSG_CODE_LEN, MSG_STATUS, ON_PRIVATE_MSG_ROUTE, MSG_TYPE, MSG_SOURCE, getSdkChannelId, SDK_37_CONST, SDK_37_ADDR } from '../consts';
import { CHANNEL_PREFIX, MSG_CODE_LEN, MSG_STATUS, ON_PRIVATE_MSG_ROUTE, MSG_TYPE, MSG_SOURCE } from '../consts';
import { getAllServers, getRoleOnlineInfo } from './redisService';
import { ChatInfoModel } from '../db/ChatInfo';
import { channelServer } from './chatChannelService';
import { AccuseRecModel, AccueseParam } from '../db/AccuseRec';
import { getSimpleRoleInfo, getSimpleRoleInfos } from './roleService';
import * as FCClient from '@alicloud/fc2';
import { Chat37Params, CheckGuild37Params, CheckName37Params } from '../domain/sdk';
import { UserModel } from '../db/User';
import { request37CheckChat, request37Post } from '../pubUtils/httpUtil';
export * from './chatChannelService';
export * from './sysChatService';
@@ -405,65 +401,6 @@ export async function checkFilterWords(word: string) {
}
*/
export async function checkPrivateChat(roleId: string, targetRoleId: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId('private'));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
let targetRole = await RoleModel.findByRoleId(targetRoleId);
let targetUser = await UserModel.findUserByUid(targetRole.userInfo.uid);
body.setByTargetRole(targetRole, targetUser);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkGuildChat(roleId: string, guildCode: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId(CHANNEL_PREFIX.GUILD));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
body.setByGuild(guildCode);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkOtherChat(roleId: string, channelPrefix: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId(channelPrefix));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkRoleName(roleId: string, roleName: string) {
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
let body = new CheckName37Params(myRole, roleName, myUser);
if(myUser.channelType == '37') {
return await request37Post(SDK_37_ADDR.CHECK_NAME, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkGuildName(guildCode: string, serverId: number, name: string, notice: string) {
let nameResult = true, noticeResult = true;
if(name) {
let body = new CheckGuild37Params(guildCode, serverId, 1, name);
nameResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
}
if(notice) {
let body = new CheckGuild37Params(guildCode, serverId, 2, notice);
noticeResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
}
return nameResult && noticeResult
}
export async function pushCurrentTime(time: number) {
let serverlists = await getAllServers()

View File

@@ -485,13 +485,22 @@ export async function redisSubScribe() {
let env = pinus.app.get('env');
if(env == 'development') env = 'local'; // 本地处理
let payChannel = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, env);
console.log('*****', payChannel)
await redisClientPub().subscribeAsync(payChannel);
let treatRoleChannel = getRedisSubChannel(REDIS_KEY.TREAT_ROLE_CHANNEL, env);
let treatGuildChannel = getRedisSubChannel(REDIS_KEY.TREAT_GUILD_CHANNEL, env);
await redisClientPub().subscribeAsync(payChannel, treatRoleChannel, treatGuildChannel);
redisClientPub().on('message', (channel, message) => {
if(channel == payChannel) {
let orders = pinus.app.getServersByType('order');
let server = getRandSingleEelm(orders);
let servers = pinus.app.getServersByType('order');
let server = getRandSingleEelm(servers);
pinus.app.rpc.order.orderRemote.settleOrderFromRedisPub.toServer(server.id, message);
} else if (channel == treatRoleChannel) {
let servers = pinus.app.getServersByType('role');
let server = getRandSingleEelm(servers);
pinus.app.rpc.role.roleRemote.treatRoleName.toServer(server.id, message);
} else if (channel == treatGuildChannel) {
let servers = pinus.app.getServersByType('guild');
let server = getRandSingleEelm(servers);
pinus.app.rpc.guild.guildRemote.treatGuildName.toServer(server.id, message);
}
});
}

View File

@@ -1,10 +1,9 @@
import { ChannelUser } from './../domain/ChannelUser';
import { Channel, pinus } from 'pinus';
import { getRandValueByMinMax, getRandEelm, decodeIdCntArrayStr } from '../pubUtils/util';
import { DEFAULT_HEROES, TERAPH_RANDOM } from "../consts";
import { DEFAULT_HEROES, ROLE_SELECT, TERAPH_RANDOM } from "../consts";
import { DicTeraph } from '../pubUtils/dictionary/DicTeraph';
import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role';
import { ROLE_SELECT } from '../consts';
import { SCHOOL } from '../pubUtils/dicParam';
import { gameData } from '../pubUtils/data';
import { SchoolModel } from '../db/School';

View File

@@ -0,0 +1,133 @@
/********** 37sdk **********/
import { RoleModel, RoleType } from "../db/Role";
import { Chat37Params, CheckGuild37Params, CheckName37Params } from "../domain/sdk";
import { sendMailByContent, sendMailToGuildByContent } from './mailService';
import { getGoldObject } from '../pubUtils/itemUtils';
import { NAMEPLATE } from '../pubUtils/dicParam';
import { CHANNEL_PREFIX, getSdkChannelId, MAIL_TYPE, REDIS_KEY, SDK_37_ADDR, SDK_37_CONST } from "../consts";
import { UserModel } from "../db/User";
import { request37CheckChat, request37Post } from "../pubUtils/httpUtil";
import { GuildModel } from "../db/Guild";
import { getRoleOnlineInfo, updateUserInfo } from "./redisService";
import { pinus } from "pinus";
import { getGuildChannelSid } from "./chatService";
// 检查私聊是否合法
export async function checkPrivateChat(roleId: string, targetRoleId: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId('private'));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
let targetRole = await RoleModel.findByRoleId(targetRoleId);
let targetUser = await UserModel.findUserByUid(targetRole.userInfo.uid);
body.setByTargetRole(targetRole, targetUser);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkGuildChat(roleId: string, guildCode: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId(CHANNEL_PREFIX.GUILD));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
body.setByGuild(guildCode);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkOtherChat(roleId: string, channelPrefix: string, message: string) {
let body = new Chat37Params(message, getSdkChannelId(channelPrefix));
let myRole = await RoleModel.findByRoleId(roleId);
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
if(myUser.channelType == '37') {
body.setByMyRole(myRole, myUser);
return await request37CheckChat(SDK_37_ADDR.CHECK_CHAT, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkRoleName(roleId: string, roleName: string, myRole?: RoleType) {
if(!myRole) {
myRole = await RoleModel.findByRoleId(roleId);
}
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
let body = new CheckName37Params(myRole, roleName, myUser);
if(myUser.channelType == '37') {
return await request37Post(SDK_37_ADDR.CHECK_NAME, body, SDK_37_CONST.CHAT_KEY);
}
return true;
}
export async function checkGuildName(guildCode: string, serverId: number, name: string, notice: string) {
let nameResult = true, noticeResult = true;
if(name != undefined) {
let body = new CheckGuild37Params(guildCode, serverId, 1, name);
nameResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
}
if(notice != undefined) {
let body = new CheckGuild37Params(guildCode, serverId, 2, notice);
noticeResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
}
return nameResult && noticeResult
}
// 根据37sdk处理违规玩家名
export async function treatRoleName(roleId: string) {
let role = await RoleModel.findByRoleId(roleId);
if(role && role.sdkMark) { // 有设置标记的情况下
let newName = roleId;
// 新名字上传
await checkRoleName(roleId, newName, role);
// 改名字
await RoleModel.updateRoleInfo(roleId, { roleName: newName, sdkMark: false });
// 通知处理
await updateUserInfo(REDIS_KEY.USER_INFO, roleId, [{ field: 'roleName', value: newName }]); // redis缓存
const { sid } = await getRoleOnlineInfo(roleId);
if(!!sid) {
await pinus.app.rpc.connector.connectorRemote.setOtherUserRoleNameSession.toServer(sid,[{ roleId, roleName: newName }]); // 改session
}
// 补偿
let gold = getGoldObject(NAMEPLATE.NAMEPLATE_FEECOST)
await sendMailByContent(MAIL_TYPE.TREAT_ROLE_NAME, role.roleId, { goods: [gold] });
}
}
// 根据37sdk处理违规军团数据
export async function treatGuildName(content: string) {
let params: { code: string, serverId: number, type: number };
try {
params = JSON.parse(content);
} catch(e) {
return false;
}
let guild = await GuildModel.findByCode(params.code, params.serverId);
if(guild && guild.sdkMark) { // 有设置标记的情况下
if(params.type == 1) { // 公会名
let newName = guild.code;
// 新名字上传
await checkGuildName(params.code, params.serverId, newName, undefined);
await GuildModel.updateInfo(params.code, { name: newName, sdkMark: false });
// 通知处理
await sendMailToGuildByContent(MAIL_TYPE.TREAT_GUILD_INFO, params.code, {}); // 邮件
let chatSid = await getGuildChannelSid(params.code);
pinus.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, params.code, { name: newName }); // 军团推送
await updateUserInfo(REDIS_KEY.GUILD_INFO, params.code, [{ field: 'name', value: newName }]); // redis缓存信息
} else if (params.type == 2) { // 公会公告
await checkGuildName(params.code, params.serverId, undefined, '');
await GuildModel.updateInfo(params.code, { notice: '', sdkMark: false });
// 通知处理
await sendMailToGuildByContent(MAIL_TYPE.TREAT_GUILD_INFO, params.code, {}); // 邮件
let chatSid = await getGuildChannelSid(params.code);
pinus.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, params.code, { notice: '' }); // 军团推送
}
}
}

View File

@@ -39,6 +39,8 @@ export enum MAIL_TYPE {
EQUIP_OVER = 18, // 装备超数量
TOWER_TASK_REWARD = 19, // 镇念塔派遣过期奖励
MONTHLY_REWARD = 20, // 月卡奖品
TREAT_ROLE_NAME = 21, // 月卡奖品
TREAT_GUILD_INFO = 22, // 月卡奖品
};
export const SEND_NAME = '系统';

View File

@@ -232,6 +232,8 @@ export enum REDIS_KEY {
SHOW_LINEUP ="showLineup", // 展示阵容
SYS_SERVER ='sysServer', // 全服connector服
PAY_CHANNEL = 'pay', // 支付订阅频道
TREAT_ROLE_CHANNEL = 'treatRole', // 处理玩家账号名频道
TREAT_GUILD_CHANNEL = 'treatGuild', // 处理公会账号名频道
}
// 各排行榜对应hash的key

View File

@@ -111,6 +111,9 @@ export default class Guild extends BaseModel {
@prop({ required: true, default: 0 })
openBossCnt: number; // 开启boss本次数
@prop({ required: true })
sdkMark: boolean; // 37sdk标记有问题
public static async createGuild(params: { guildCode: string, name: string, icon: number, notice: string }, role: RoleType, serverId: number) {
const doc = new GuildModel();
const update = Object.assign(doc.toJSON(), params, { leader: role._id, members: [role.roleId], guildCe: role.ce, serverId, lvUpdateTime: nowSeconds() });
@@ -269,6 +272,11 @@ export default class Guild extends BaseModel {
}
return result;
}
public static async findByCodeAndSetMark(code: string, serverId: number, select?: string, getters = false) {
const role: RoleType = await GuildModel.findOneAndUpdate({ code, serverId }, { $set: { sdkMark: true } }, { new: true }).select(select).lean({ getters, virtuals: true });
return role;
}
}
export const GuildModel = getModelForClass(Guild);

View File

@@ -326,6 +326,9 @@ export default class Role extends BaseModel {
@prop({ required: true })
renameCnt: number; // 改名次数
@prop({ required: true })
sdkMark: boolean; // 37sdk标记有问题
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt').lean({ getters, virtuals });
return role;
@@ -727,6 +730,12 @@ export default class Role extends BaseModel {
.sort({ updatedAt: -1 }).limit(100).lean({ getters: true, virtuals: true });
return result;
}
public static async findByUidAndSetMark(uid: number, serverId: number, select?: string, getters = false) {
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { $set: { sdkMark: true } }, { new: true }).select(select).lean({ getters, virtuals: true });
return role;
}
}
export const RoleModel = getModelForClass(Role);

View File

@@ -112,8 +112,8 @@ export class Chat37Params {
to_username: number|string = ''; // 对方channelInfo.uid
to_actor: string = ''; // 对方roleName
to_actor_id: string = ''; // 对方roleId
to_actor_level: number; // 对方等级
to_actor_recharge_gold: number; // 对方元宝
to_actor_level: number|string = ''; // 对方等级
to_actor_recharge_gold: number|string = ''; // 对方元宝
constructor(content: string, channel: number) {
this.game_key = SDK_37_CONST.GAME_KEY;

View File

@@ -50,10 +50,14 @@ export async function httpRequestForm(url: string, method: string, form: any, ti
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
form,
timeout,
JSON: true
}
if(method == HTTP_METHOD.GET) {
options['qs'] = form;
} else if (method == HTTP_METHOD.POST) {
options['form'] = form;
}
try {
let res = await request(options);

View File

@@ -103,5 +103,15 @@
"id": 20,
"content": "亲爱的小将军,以下是您未领取的【月卡】每日奖励,请查收",
"time": 24
},
{
"id": 21,
"content": "修改账号名",
"time": 24
},
{
"id": 22,
"content": "修改公会名或公会公告",
"time": 24
}
]

View File

@@ -12,14 +12,14 @@ export default class SdkController extends Controller {
public async treatRoleName() {
const { ctx } = this;
const params = new RoleNameCallBackParam(ctx.request.body);
const params = new RoleNameCallBackParam(ctx.query);
ctx.body = await ctx.service.sdk.treatRoleName(params);
return;
}
public async treatGuildName() {
const { ctx } = this;
const params = new GuildNameCallBackParam(ctx.request.body);
const params = new GuildNameCallBackParam(ctx.query);
ctx.body = await ctx.service.sdk.treatGuildName(params);
return;
@@ -28,7 +28,7 @@ export default class SdkController extends Controller {
public async getGuildByUser() {
const { ctx } = this;
const params = new GetGuildInfoByUserParam(ctx.request.body);
const params = new GetGuildInfoByUserParam(ctx.query);
ctx.body = await ctx.service.sdk.getGuildByUser(params);
return;
}

View File

@@ -66,9 +66,7 @@ export default class Sdk extends Service {
let redisClient: RedisClient = app.context.redisClient;
let name = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, app.config.env);
console.log('**** channelname', name)
let result = await redisClient.publishAsync(name, JSON.stringify(params));
console.log('**** result', result);
if(result == 0) {
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SERVER_IS_BUSY, '');
}
@@ -90,6 +88,7 @@ export default class Sdk extends Service {
if(!params.checkParams()) return SDK_37_TREAT_CODE.WRONG_PARAMS;
if(params.game_key != SDK_37_CONST.GAME_KEY) {
console.error('用户名或军团名违规处理, gamekey错误', params.game_key);
return SDK_37_TREAT_CODE.ERR;
}
@@ -101,6 +100,7 @@ export default class Sdk extends Service {
}
if(gameData.whiteip.indexOf(ip) == -1) {
console.error('用户名或军团名违规处理, ip限制', ip);
return SDK_37_TREAT_CODE.ERR;
}
return SDK_37_TREAT_CODE.SUCCESS
@@ -108,17 +108,63 @@ export default class Sdk extends Service {
// 用户名违规处理
public async treatRoleName(params: RoleNameCallBackParam) {
const { ctx } = this;
const { app } = ctx;
let check = this.treatRoleOrGuildNameValidate(params);
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return check.code;
// 1. 标记这个玩家违规
let channelId = getChannelId('37', params.username);
console.log(channelId);
let user = await UserModel.findUserByChannel(channelId);
if(!user) {
console.error('用户名违规处理, 未找到玩家账号', channelId);
return SDK_37_TREAT_CODE.ERR.code;
}
let role = await RoleModel.findByUidAndSetMark(user.uid, params.sid);
if(!role) {
console.error('用户名违规处理, 未找到玩家角色', user.uid, params.sid);
return SDK_37_TREAT_CODE.ERR.code;
}
if(params.actor != role.roleName || params.actor_id != role.roleId) {
console.error('用户名违规处理, roleName或roleId对不上', params.actor, role.roleName, params.actor_id, role.roleId);
return SDK_37_TREAT_CODE.ERR.code;
}
// 2. redis发布
let redisClient: RedisClient = app.context.redisClient;
let name = getRedisSubChannel(REDIS_KEY.TREAT_ROLE_CHANNEL, app.config.env);
let result = await redisClient.publishAsync(name, role.roleId);
if(result == 0) {
console.error('用户名违规处理, 未发布到订阅频道');
return SDK_37_TREAT_CODE.ERR.code;
}
return check.code
}
// 公会信息违规处理
public async treatGuildName(params: GuildNameCallBackParam) {
const { ctx } = this;
const { app } = ctx;
let check = this.treatRoleOrGuildNameValidate(params);
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return check.code;
// 1. 标记军团违规
let guild = await GuildModel.findByCodeAndSetMark(params.guildid, params.sid);
if(!guild) return SDK_37_TREAT_CODE.ERR.code;
// 2. redis发布
let redisClient: RedisClient = app.context.redisClient;
let name = getRedisSubChannel(REDIS_KEY.TREAT_GUILD_CHANNEL, app.config.env);
let content = JSON.stringify({ code: guild.code, serverId: params.sid, type: params.type });
let result = await redisClient.publishAsync(name, content);
if(result == 0) {
return SDK_37_TREAT_CODE.ERR.code;
}
return check.code
}
@@ -128,7 +174,6 @@ export default class Sdk extends Service {
if(check.code != SDK_37_TREAT_CODE.SUCCESS.code) return resResult(check);
let channelId = getChannelId('37', params.uid);
console.log(channelId)
let user = await UserModel.findUserByChannel(channelId);
if(!user) return resResult(SDK_37_TREAT_CODE.USER_NOT_FOUND);