/********** 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: '' }); // 军团推送 } } }