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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

feat: friendships in the oldest versions (#3142)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3142 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

51050a1f
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

3 个文件 +59 -30
Modified src/controllers/api/addFriendController.ts +28 -14
@@ -6,7 +6,7 @@ import { getAccountIdForRequest } from "../../services/loginService.ts";
6 6 import type { IFriendInfo } from "../../types/friendTypes.ts";
7 7 import type { RequestHandler } from "express";
8 8
9 export const addFriendController: RequestHandler = async (req, res) => {
9 export const addFriendPostController: RequestHandler = async (req, res) => {
10 10 const accountId = await getAccountIdForRequest(req);
11 11 const payload = getJSONfromString<IAddFriendRequest>(String(req.body));
12 12 const promises: Promise<void>[] = [];
@@ -31,19 +31,7 @@ export const addFriendController: RequestHandler = async (req, res) => {
31 31 }
32 32 }
33 33 } else {
34 const externalFriendship = await Friendship.findOne({ owner: payload.friend, friend: accountId }, "Note");
35 if (externalFriendship) {
36 promises.push(
37 Friendship.insertOne({
38 owner: accountId,
39 friend: payload.friend,
40 Note: externalFriendship.Note
41 }) as unknown as Promise<void>
42 );
43 newFriends.push({
44 _id: { $oid: payload.friend }
45 });
46 }
34 await acceptFriendRequest(accountId, payload.friend, newFriends);
47 35 }
48 36 for (const newFriend of newFriends) {
49 37 promises.push(addAccountDataToFriendInfo(newFriend));
@@ -58,3 +46,29 @@ export const addFriendController: RequestHandler = async (req, res) => {
58 46 interface IAddFriendRequest {
59 47 friend: string; // oid or "all" in which case all=1 is also a query parameter
60 48 }
49
50 export const addFriendGetController: RequestHandler = async (req, res) => {
51 const accountId = await getAccountIdForRequest(req);
52 await acceptFriendRequest(accountId, req.query.friend as string, undefined);
53 res.end();
54 };
55
56 const acceptFriendRequest = async (
57 accountId: string,
58 otherAccountId: string,
59 newFriends: IFriendInfo[] | undefined
60 ): Promise<void> => {
61 const externalFriendship = await Friendship.findOne({ owner: otherAccountId, friend: accountId }, "Note");
62 if (externalFriendship) {
63 await Friendship.insertOne({
64 owner: accountId,
65 friend: otherAccountId,
66 Note: externalFriendship.Note
67 });
68 if (newFriends) {
69 newFriends.push({
70 _id: { $oid: otherAccountId }
71 });
72 }
73 }
74 };
Modified src/controllers/api/addPendingFriendController.ts +24 -11
@@ -6,18 +6,36 @@ import { addInventoryDataToFriendInfo, areFriendsOfFriends } from "../../service
6 6 import { getInventory } from "../../services/inventoryService.ts";
7 7 import { getAccountIdForRequest } from "../../services/loginService.ts";
8 8 import type { IFriendInfo } from "../../types/friendTypes.ts";
9 import type { RequestHandler } from "express";
9 import type { RequestHandler, Response } from "express";
10 10
11 export const addPendingFriendController: RequestHandler = async (req, res) => {
11 export const addPendingFriendPostController: RequestHandler = async (req, res) => {
12 const accountId = await getAccountIdForRequest(req);
12 13 const payload = getJSONfromString<IAddPendingFriendRequest>(String(req.body));
14 await sendFriendRequest(accountId, payload.friend, payload.message, res);
15 };
16
17 interface IAddPendingFriendRequest {
18 friend: string;
19 message: string;
20 }
21
22 export const addPendingFriendGetController: RequestHandler = async (req, res) => {
23 const accountId = await getAccountIdForRequest(req);
24 await sendFriendRequest(accountId, req.query.friend as string, undefined, res);
25 };
13 26
14 const account = await Account.findOne({ DisplayName: payload.friend });
27 const sendFriendRequest = async (
28 accountId: string,
29 name: string,
30 message: string | undefined,
31 res: Response
32 ): Promise<void> => {
33 const account = await Account.findOne({ DisplayName: name });
15 34 if (!account) {
16 35 res.status(400).end();
17 36 return;
18 37 }
19 38
20 const accountId = await getAccountIdForRequest(req);
21 39 const inventory = await getInventory(account._id.toString(), "Settings");
22 40 if (
23 41 inventory.Settings?.FriendInvRestriction == "GIFT_MODE_NONE" ||
@@ -31,22 +49,17 @@ export const addPendingFriendController: RequestHandler = async (req, res) => {
31 49 await Friendship.insertOne({
32 50 owner: accountId,
33 51 friend: account._id,
34 Note: payload.message
52 Note: message
35 53 });
36 54
37 55 const friendInfo: IFriendInfo = {
38 56 _id: toOid(account._id),
39 57 DisplayName: account.DisplayName,
40 58 LastLogin: toMongoDate(account.LastLogin),
41 Note: payload.message
59 Note: message
42 60 };
43 61 await addInventoryDataToFriendInfo(friendInfo);
44 62 res.json({
45 63 Friend: friendInfo
46 64 });
47 65 };
48
49 interface IAddPendingFriendRequest {
50 friend: string;
51 message: string;
52 }
Modified src/routes/api.ts +7 -5
@@ -3,11 +3,11 @@ import { abandonLibraryDailyTaskController } from "../controllers/api/abandonLib
3 3 import { abortDojoComponentController } from "../controllers/api/abortDojoComponentController.ts";
4 4 import { abortDojoComponentDestructionController } from "../controllers/api/abortDojoComponentDestructionController.ts";
5 5 import { activateRandomModController } from "../controllers/api/activateRandomModController.ts";
6 import { addFriendController } from "../controllers/api/addFriendController.ts";
6 import { addFriendGetController, addFriendPostController } from "../controllers/api/addFriendController.ts";
7 7 import { addFriendImageGetController, addFriendImagePostController } from "../controllers/api/addFriendImageController.ts";
8 8 import { addFriendTitleController } from "../controllers/api/addFriendTitleController.ts";
9 9 import { addIgnoredUserController } from "../controllers/api/addIgnoredUserController.ts";
10 import { addPendingFriendController } from "../controllers/api/addPendingFriendController.ts";
10 import { addPendingFriendGetController, addPendingFriendPostController } from "../controllers/api/addPendingFriendController.ts";
11 11 import { addToAllianceController } from "../controllers/api/addToAllianceController.ts";
12 12 import { addToGuildController } from "../controllers/api/addToGuildController.ts";
13 13 import { adoptPetController } from "../controllers/api/adoptPetController.ts";
@@ -182,7 +182,9 @@ const apiRouter = express.Router();
182 182 // get
183 183 apiRouter.get("/abandonLibraryDailyTask.php", abandonLibraryDailyTaskController);
184 184 apiRouter.get("/abortDojoComponentDestruction.php", abortDojoComponentDestructionController);
185 apiRouter.get("/addFriend.php", addFriendGetController); // ~U16 and below
185 186 apiRouter.get("/addFriendImage.php", addFriendImageGetController) // U17 and below
187 apiRouter.get("/addPendingFriend.php", addPendingFriendGetController); // ~U10 and below
186 188 apiRouter.get("/apartment.php", apartmentController);
187 189 apiRouter.get("/cancelGuildAdvertisement.php", cancelGuildAdvertisementController);
188 190 apiRouter.get("/changeDojoRoot.php", changeDojoRootController);
@@ -214,8 +216,8 @@ apiRouter.get("/getNewRewardSeed.php", getNewRewardSeedController);
214 216 apiRouter.get("/getPastWeeklyChallenges.php", getPastWeeklyChallengesController)
215 217 apiRouter.get("/getShip.php", getShipController);
216 218 apiRouter.get("/getShipDecos.php", (_req, res) => { res.end(); }); // needed to log in on U22.8
217 apiRouter.get("/giveStartingGear.php", giveStartingGearGetController);
218 219 apiRouter.get("/getVendorInfo.php", getVendorInfoController);
220 apiRouter.get("/giveStartingGear.php", giveStartingGearGetController);
219 221 apiRouter.get("/hub", hubController);
220 222 apiRouter.get("/hubInstances", hubInstancesController);
221 223 apiRouter.get("/inbox.php", inboxController);
@@ -250,11 +252,11 @@ apiRouter.get("/worldState.php", worldStateController); // U8
250 252 // post
251 253 apiRouter.post("/abortDojoComponent.php", abortDojoComponentController);
252 254 apiRouter.post("/activateRandomMod.php", activateRandomModController);
253 apiRouter.post("/addFriend.php", addFriendController);
255 apiRouter.post("/addFriend.php", addFriendPostController);
254 256 apiRouter.post("/addFriendImage.php", addFriendImagePostController);
255 257 apiRouter.post("/addFriendTitle.php", addFriendTitleController);
256 258 apiRouter.post("/addIgnoredUser.php", addIgnoredUserController);
257 apiRouter.post("/addPendingFriend.php", addPendingFriendController);
259 apiRouter.post("/addPendingFriend.php", addPendingFriendPostController);
258 260 apiRouter.post("/addToAlliance.php", addToAllianceController);
259 261 apiRouter.post("/addToGuild.php", addToGuildController);
260 262 apiRouter.post("/adoptPet.php", adoptPetController);