XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

feat: clan name discriminators (#1147)

Closes #1145 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1147

d24aac2a
Sainan <sainan@calamity.inc>
提交于

代码差异

4 个文件 +29 -5
Modified src/controllers/api/addToGuildController.ts +1 -1
@@ -46,7 +46,7 @@ export const addToGuildController: RequestHandler = async (req, res) => {
46 46 arg: [
47 47 {
48 48 Key: "clan",
49 Tag: guild.Name + "#000"
49 Tag: guild.Name
50 50 }
51 51 ],
52 52 sub: "/Lotus/Language/Menu/Mailbox_ClanInvite_Title",
Modified src/controllers/api/createGuildController.ts +7 -3
@@ -2,7 +2,11 @@ import { RequestHandler } from "express";
2 2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 3 import { getJSONfromString } from "@/src/helpers/stringHelpers";
4 4 import { Guild, GuildMember } from "@/src/models/guildModel";
5 import { updateInventoryForConfirmedGuildJoin } from "@/src/services/guildService";
5 import {
6 createUniqueClanName,
7 getGuildClient,
8 updateInventoryForConfirmedGuildJoin
9 } from "@/src/services/guildService";
6 10
7 11 export const createGuildController: RequestHandler = async (req, res) => {
8 12 const accountId = await getAccountIdForRequest(req);
@@ -10,7 +14,7 @@ export const createGuildController: RequestHandler = async (req, res) => {
10 14
11 15 // Create guild on database
12 16 const guild = new Guild({
13 Name: payload.guildName
17 Name: await createUniqueClanName(payload.guildName)
14 18 });
15 19 await guild.save();
16 20
@@ -24,7 +28,7 @@ export const createGuildController: RequestHandler = async (req, res) => {
24 28
25 29 await updateInventoryForConfirmedGuildJoin(accountId, guild._id);
26 30
27 res.json(guild);
31 res.json(await getGuildClient(guild, accountId));
28 32 };
29 33
30 34 interface ICreateGuildRequest {
Modified src/controllers/api/getGuildController.ts +7 -1
@@ -3,7 +3,7 @@ import { Guild } from "@/src/models/guildModel";
3 3 import { getAccountIdForRequest } from "@/src/services/loginService";
4 4 import { logger } from "@/src/utils/logger";
5 5 import { getInventory } from "@/src/services/inventoryService";
6 import { getGuildClient } from "@/src/services/guildService";
6 import { createUniqueClanName, getGuildClient } from "@/src/services/guildService";
7 7
8 8 const getGuildController: RequestHandler = async (req, res) => {
9 9 const accountId = await getAccountIdForRequest(req);
@@ -11,6 +11,12 @@ const getGuildController: RequestHandler = async (req, res) => {
11 11 if (inventory.GuildId) {
12 12 const guild = await Guild.findOne({ _id: inventory.GuildId });
13 13 if (guild) {
14 // Handle guilds created before we added discriminators
15 if (guild.Name.indexOf("#") == -1) {
16 guild.Name = await createUniqueClanName(guild.Name);
17 await guild.save();
18 }
19
14 20 if (guild.CeremonyResetDate && Date.now() >= guild.CeremonyResetDate.getTime()) {
15 21 logger.debug(`ascension ceremony is over`);
16 22 guild.CeremonyEndo = undefined;
Modified src/services/guildService.ts +14 -0
@@ -18,6 +18,7 @@ import { ExportDojoRecipes, IDojoBuild } from "warframe-public-export-plus";
18 18 import { logger } from "../utils/logger";
19 19 import { config } from "./configService";
20 20 import { Account } from "../models/loginModel";
21 import { getRandomInt } from "./rngService";
21 22
22 23 export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
23 24 const accountId = await getAccountIdForRequest(req);
@@ -315,3 +316,16 @@ export const updateInventoryForConfirmedGuildJoin = async (
315 316
316 317 await inventory.save();
317 318 };
319
320 export const createUniqueClanName = async (name: string): Promise<string> => {
321 const initialDiscriminator = getRandomInt(0, 999);
322 let discriminator = initialDiscriminator;
323 do {
324 const fullName = name + "#" + discriminator.toString().padStart(3, "0");
325 if (!(await Guild.exists({ Name: fullName }))) {
326 return fullName;
327 }
328 discriminator = (discriminator + 1) % 1000;
329 } while (discriminator != initialDiscriminator);
330 throw new Error(`clan name is so unoriginal it's already been done 1000 times: ${name}`);
331 };