军团:添加踢人解散退出,添加权限

This commit is contained in:
luying
2021-01-20 15:47:57 +08:00
parent ac081059c2
commit 9b6ca78d88
12 changed files with 396 additions and 68 deletions

View File

@@ -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 });
}
}