forked from OpenWF/SpaceNinjaServer
		
	feat: clan name discriminators (#1147)
Closes #1145 Reviewed-on: OpenWF/SpaceNinjaServer#1147
This commit is contained in:
		
							parent
							
								
									1b54bcd1e0
								
							
						
					
					
						commit
						d24aac2ab2
					
				@ -46,7 +46,7 @@ export const addToGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
            arg: [
 | 
			
		||||
                {
 | 
			
		||||
                    Key: "clan",
 | 
			
		||||
                    Tag: guild.Name + "#000"
 | 
			
		||||
                    Tag: guild.Name
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            sub: "/Lotus/Language/Menu/Mailbox_ClanInvite_Title",
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,11 @@ import { RequestHandler } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { Guild, GuildMember } from "@/src/models/guildModel";
 | 
			
		||||
import { updateInventoryForConfirmedGuildJoin } from "@/src/services/guildService";
 | 
			
		||||
import {
 | 
			
		||||
    createUniqueClanName,
 | 
			
		||||
    getGuildClient,
 | 
			
		||||
    updateInventoryForConfirmedGuildJoin
 | 
			
		||||
} from "@/src/services/guildService";
 | 
			
		||||
 | 
			
		||||
export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
@ -10,7 +14,7 @@ export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
    // Create guild on database
 | 
			
		||||
    const guild = new Guild({
 | 
			
		||||
        Name: payload.guildName
 | 
			
		||||
        Name: await createUniqueClanName(payload.guildName)
 | 
			
		||||
    });
 | 
			
		||||
    await guild.save();
 | 
			
		||||
 | 
			
		||||
@ -24,7 +28,7 @@ export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
    await updateInventoryForConfirmedGuildJoin(accountId, guild._id);
 | 
			
		||||
 | 
			
		||||
    res.json(guild);
 | 
			
		||||
    res.json(await getGuildClient(guild, accountId));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
interface ICreateGuildRequest {
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ import { Guild } from "@/src/models/guildModel";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { getGuildClient } from "@/src/services/guildService";
 | 
			
		||||
import { createUniqueClanName, getGuildClient } from "@/src/services/guildService";
 | 
			
		||||
 | 
			
		||||
const getGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
@ -11,6 +11,12 @@ const getGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    if (inventory.GuildId) {
 | 
			
		||||
        const guild = await Guild.findOne({ _id: inventory.GuildId });
 | 
			
		||||
        if (guild) {
 | 
			
		||||
            // Handle guilds created before we added discriminators
 | 
			
		||||
            if (guild.Name.indexOf("#") == -1) {
 | 
			
		||||
                guild.Name = await createUniqueClanName(guild.Name);
 | 
			
		||||
                await guild.save();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (guild.CeremonyResetDate && Date.now() >= guild.CeremonyResetDate.getTime()) {
 | 
			
		||||
                logger.debug(`ascension ceremony is over`);
 | 
			
		||||
                guild.CeremonyEndo = undefined;
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@ import { ExportDojoRecipes, IDojoBuild } from "warframe-public-export-plus";
 | 
			
		||||
import { logger } from "../utils/logger";
 | 
			
		||||
import { config } from "./configService";
 | 
			
		||||
import { Account } from "../models/loginModel";
 | 
			
		||||
import { getRandomInt } from "./rngService";
 | 
			
		||||
 | 
			
		||||
export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
@ -315,3 +316,16 @@ export const updateInventoryForConfirmedGuildJoin = async (
 | 
			
		||||
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const createUniqueClanName = async (name: string): Promise<string> => {
 | 
			
		||||
    const initialDiscriminator = getRandomInt(0, 999);
 | 
			
		||||
    let discriminator = initialDiscriminator;
 | 
			
		||||
    do {
 | 
			
		||||
        const fullName = name + "#" + discriminator.toString().padStart(3, "0");
 | 
			
		||||
        if (!(await Guild.exists({ Name: fullName }))) {
 | 
			
		||||
            return fullName;
 | 
			
		||||
        }
 | 
			
		||||
        discriminator = (discriminator + 1) % 1000;
 | 
			
		||||
    } while (discriminator != initialDiscriminator);
 | 
			
		||||
    throw new Error(`clan name is so unoriginal it's already been done 1000 times: ${name}`);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user