军团:添加踢人解散退出,添加权限
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { resResult, getRefTime, getRandEelm, reduceCe } from '../../../pubUtils/util';
|
||||
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE } from '../../../consts';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { checkAuth, joinGuild } from '../../../services/guildService';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
import { RoleModel, RoleType } from '../../../db/Role';
|
||||
import Role, { RoleModel, RoleType } from '../../../db/Role';
|
||||
import { GUILD } from '../../../pubUtils/dicParam';
|
||||
import { handleCost } from '../../../services/rewardService';
|
||||
import { getGoldObject } from '../../../pubUtils/itemUtils';
|
||||
import { getSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { GuildListInfo } from '../../../pubUtils/interface';
|
||||
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
||||
|
||||
@@ -25,15 +25,15 @@ export class GuildHandler {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const sid = session.get('sid');
|
||||
const serverId = session.get('serverId');
|
||||
const { name, icon, notice } = msg;
|
||||
|
||||
// 检查权限是否够,包括是否参过团
|
||||
const auth = await UserGuildModel.getMyAuth(roleId);
|
||||
const checkResult = checkAuth(GUILD_OPERATE.CREATE_GUILD, auth);
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.CREATE_GUILD, roleId);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
// 检查名字是否重
|
||||
const checkNameResult = await GuildModel.checkName(name);
|
||||
const checkNameResult = await GuildModel.checkName(name, serverId);
|
||||
if(checkNameResult) return resResult(STATUS.GUILD_NAME_DUP);
|
||||
|
||||
// 检查元宝是否够
|
||||
@@ -45,11 +45,17 @@ export class GuildHandler {
|
||||
await handleCost(roleId, sid, [getGoldObject(GUILD.GUILD_CREATE_COST)]);
|
||||
|
||||
// 创建公会
|
||||
const guild = await GuildModel.createGuild({ name, icon, notice }, role);
|
||||
const guild = await GuildModel.createGuild({ name, icon, notice }, role, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_CREATE_ERROR);
|
||||
guild.guildCe = reduceCe(guild.guildCe);
|
||||
guild.leader = <RoleType>guild.leader;
|
||||
guild.leader.ce = reduceCe(guild.leader.ce);
|
||||
|
||||
const userGuild = await UserGuildModel.createUserGuild(guild.code, role, true);
|
||||
if(!userGuild) return resResult(STATUS.GUILD_CREATE_ERROR);
|
||||
|
||||
await RoleModel.joinGuild(roleId);
|
||||
|
||||
// TODO 加入排行
|
||||
const rank = 0;
|
||||
// TODO 加入channel
|
||||
@@ -64,10 +70,14 @@ export class GuildHandler {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
// const sid = session.get('sid');
|
||||
const serverId = session.get('serverId');
|
||||
const { page = 1, showPeopleMax, name } = msg;
|
||||
|
||||
const guildList = await GuildModel.findByCondition(page, showPeopleMax, name);
|
||||
// TODO 加入申请列表
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_GUILD_LIST, roleId);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const guildList = await GuildModel.findByCondition(page, showPeopleMax, name, serverId);
|
||||
const applyList = await UserGuildApplyModel.findApplyByRole(roleId);
|
||||
|
||||
const { quitGuildTime: quitTime = 0 } = await RoleModel.findByRoleId(roleId);
|
||||
|
||||
@@ -75,8 +85,8 @@ export class GuildHandler {
|
||||
for(let guild of guildList) {
|
||||
let info = new GuildListInfo(guild);
|
||||
|
||||
// TODO 查询申请
|
||||
info.setApply(false);
|
||||
let hasApply = applyList.find(cur => cur.guildCode == guild.code);
|
||||
info.setApply(!!hasApply);
|
||||
list.push(info);
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, { quitTime, list });
|
||||
@@ -86,14 +96,22 @@ export class GuildHandler {
|
||||
async getMyGuildInfo(msg: { }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
|
||||
//TODO 检查权限是否够 等策划表
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
const userGuild = await UserGuildModel.getMyGuild(roleId, 'honour job auth guildCode');
|
||||
if(!userGuild) {
|
||||
return resResult(STATUS.SUCCESS, { hasGuild: false })
|
||||
};
|
||||
let guild = await GuildModel.findByCode(userGuild.guildCode);
|
||||
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_MY_GUILD_INFO, roleId, userGuild.guildCode, userGuild);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let guild = await GuildModel.findByCode(userGuild.guildCode, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
|
||||
guild.guildCe = reduceCe(guild.guildCe);
|
||||
guild.leader = <RoleType>guild.leader;
|
||||
guild.leader.ce = reduceCe(guild.leader.ce);
|
||||
|
||||
// TODO 刷新日活跃,周活跃
|
||||
|
||||
@@ -109,24 +127,32 @@ export class GuildHandler {
|
||||
async applyGuild(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
//TODO 检查权限是否够 等策划表
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.APPLY_GUILD, roleId);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const guild = await GuildModel.findByCode(code, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_NOT_FOUND);
|
||||
|
||||
const guild = await GuildModel.findByCode(code);
|
||||
const { isMemberMax, isAuto, ceLimit, lv } = guild;
|
||||
if(isMemberMax) {
|
||||
return resResult(STATUS.GUILD_MEMBER_MAX);
|
||||
}
|
||||
|
||||
const role = await RoleModel.findByRoleId(roleId);
|
||||
if(ceLimit > role.ce) {
|
||||
if(ceLimit > reduceCe(role.ce)) {
|
||||
return resResult(STATUS.GUILD_NOT_REACH_CONDI);
|
||||
}
|
||||
if(nowSeconds() - role.quitGuildTime < 3600) { // TODO 时间系统参数表配置
|
||||
return resResult(STATUS.GUILD_QUIT_TIME);
|
||||
}
|
||||
|
||||
let hasGuild = false;
|
||||
if(isAuto) { // 自动加入
|
||||
const joinResult = await joinGuild(code, lv, roleId);
|
||||
const joinResult = await joinGuild(code, lv, roleId, serverId);
|
||||
if(joinResult.status == 0) {
|
||||
return joinResult.resResult;
|
||||
}
|
||||
@@ -146,12 +172,14 @@ export class GuildHandler {
|
||||
const roleId = session.get('roleId');
|
||||
const { code, lastApplyCode } = msg;
|
||||
|
||||
// TODO 查询权限 等策划表
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_APPLY_LIST, roleId);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const result = await UserGuildApplyModel.getListByGuild(code, lastApplyCode);
|
||||
const list = result.map(cur => {
|
||||
let role = <RoleType>cur.role;
|
||||
return { applyCode: cur.applyCode, ...role };
|
||||
return { applyCode: cur.applyCode, ...role, ce: reduceCe(role.ce) };
|
||||
});
|
||||
|
||||
return resResult(STATUS.SUCCESS, { list });
|
||||
@@ -161,24 +189,158 @@ export class GuildHandler {
|
||||
async receiveApply(msg: { code: string, applyCodeList: [string], isReceived: boolean }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { code, applyCodeList, isReceived } = msg;
|
||||
|
||||
// TODO 查询权限 等策划表
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.RECEIVE_APPLY, roleId, code);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const applyList = await UserGuildApplyModel.getListByApplyCode(applyCodeList);
|
||||
|
||||
let roleIds = new Array<string>();
|
||||
if(isReceived) { // 同意申请,加入
|
||||
const guild = await GuildModel.findByCode(code);
|
||||
const applyList = await UserGuildApplyModel.getListByApplyCode(applyCodeList);
|
||||
const guild = await GuildModel.findByCode(code, serverId);
|
||||
|
||||
for(let { roleId } of applyList) {
|
||||
const joinResult = await joinGuild(code, guild.lv, roleId);
|
||||
if(joinResult.status == 0) break;
|
||||
const joinResult = await joinGuild(code, guild.lv, roleId, serverId);
|
||||
if(joinResult.status == 0) continue;
|
||||
roleIds.push(roleId);
|
||||
}
|
||||
} else { // 拒绝申请,删除申请
|
||||
for(let { roleId } of applyList) {
|
||||
// TODO 发送邮件
|
||||
}
|
||||
|
||||
await UserGuildApplyModel.deleteApplyByApplyCode(applyCodeList);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, { roleIds });
|
||||
}
|
||||
|
||||
// 团长查看(刷新)可邀请人列表
|
||||
async getInviteMemberList(msg: { }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_INIVATION_MEMBER_LIST, roleId);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
// 离线时间,三天内在线且尚未加入军团。按以下规则排序 离线时间 玩家等级 玩家战力
|
||||
|
||||
const day = getRefTime(new Date(), 0, -3);
|
||||
const d = getSeconds(day);
|
||||
|
||||
const allList = await RoleModel.getInviteList(d);
|
||||
let list = getRandEelm(allList, 10);
|
||||
if(!list.length) list = allList;
|
||||
list = list.map(cur => reduceCe(cur));
|
||||
return resResult(STATUS.SUCCESS, { list });
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 获取军团成员
|
||||
async getGuildMember(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
// const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.GET_MEMBER_LIST_MAIN, roleId, code);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
let select = ['role', 'job'];
|
||||
const checkDetailResult = await checkAuth(GUILD_OPERATE.GET_MEMBER_LIST_DETAIL, roleId, code);
|
||||
if(checkDetailResult) {
|
||||
select.push('auth', 'honourWeekly');
|
||||
}
|
||||
const list = await UserGuildModel.getListByGuild(code, select.join(' '));
|
||||
const result = list.map(cur => {
|
||||
let role = <RoleType>cur.role;
|
||||
delete role._id;
|
||||
delete cur.role;
|
||||
return { ...cur, ...role };
|
||||
});
|
||||
|
||||
return resResult(STATUS.SUCCESS, { list: result });
|
||||
}
|
||||
|
||||
// 团长解散军团
|
||||
async dismiss(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.DISMISS, roleId, code);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const guild = await GuildModel.dismiss(code, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_DELETE_ERROR);
|
||||
|
||||
await UserGuildModel.dismiss(code);
|
||||
const { members } = guild;
|
||||
await RoleModel.dissmissGuild(members);
|
||||
await UserGuildApplyModel.deleteApplyByGuild(code);
|
||||
|
||||
// 删除channel
|
||||
|
||||
return resResult(STATUS.SUCCESS, { code, status: guild.status });
|
||||
}
|
||||
|
||||
// 成员退出军团
|
||||
async quit(msg: { code: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { code } = msg;
|
||||
|
||||
// 检查权限
|
||||
const checkResult = await checkAuth(GUILD_OPERATE.QUIT, roleId, code);
|
||||
if(!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
const userGuild = await UserGuildModel.quit(code, roleId);
|
||||
if(!userGuild) return resResult(STATUS.GUILD_QUIT_ERROR);
|
||||
|
||||
const role = await RoleModel.quitGuild(roleId, nowSeconds());
|
||||
if(!role) return resResult(STATUS.GUILD_QUIT_ERROR);
|
||||
|
||||
const guild = await GuildModel.quit(code, roleId, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_QUIT_ERROR);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild });
|
||||
}
|
||||
|
||||
// 团长踢退出军团
|
||||
async kick(msg: { code: string, roleId: string }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const { code, roleId: memberRoleId } = msg;
|
||||
|
||||
// 检查权限
|
||||
const checkMyAuth = await checkAuth(GUILD_OPERATE.KICK, roleId, code);
|
||||
if(!checkMyAuth) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
// 被踢出的权限
|
||||
const checkHisAuth = await checkAuth(GUILD_OPERATE.BE_KICKED, memberRoleId, code);
|
||||
if(!checkHisAuth) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
||||
|
||||
|
||||
const userGuild = await UserGuildModel.quit(code, memberRoleId);
|
||||
if(!userGuild) return resResult(STATUS.GUILD_KICK_ERROR);
|
||||
|
||||
const role = await RoleModel.quitGuild(memberRoleId, nowSeconds());
|
||||
if(!role) return resResult(STATUS.GUILD_KICK_ERROR);
|
||||
|
||||
const guild = await GuildModel.quit(code, memberRoleId, serverId);
|
||||
if(!guild) return resResult(STATUS.GUILD_KICK_ERROR);
|
||||
|
||||
// TODO 发送邮件,发送推送
|
||||
|
||||
return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user