返回提交历史
Modified
src/controllers/api/addToGuildController.ts
+1
-1
Modified
src/controllers/api/createGuildController.ts
+7
-3
Modified
src/controllers/api/getGuildController.ts
+7
-1
Modified
src/services/guildService.ts
+14
-0
XFEstudio/SpaceNinjaServer
feat: clan name discriminators (#1147)
Closes #1145 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1147
d24aac2a
代码差异
4 个文件
+29
-5
@@ -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",
@@ -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 {
@@ -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;
@@ -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
};