Added remove. Updated friend list. Fixed friend accept notification.
This commit is contained in:
parent
69f5523454
commit
d245eebac1
@ -30,7 +30,7 @@ const NotificationsTab = () => {
|
|||||||
|
|
||||||
const handleAction = (id, action, data) => {
|
const handleAction = (id, action, data) => {
|
||||||
if (action === "accept_friend") {
|
if (action === "accept_friend") {
|
||||||
socket.emit("friend:accept", { friendId: data.fromId });
|
socket.emit("friend:accept", { id, friendId: data.fromId });
|
||||||
socket.emit("notification:read", { id });
|
socket.emit("notification:read", { id });
|
||||||
} else if (action === "dismiss") {
|
} else if (action === "dismiss") {
|
||||||
socket.emit("notification:dismiss", { id });
|
socket.emit("notification:dismiss", { id });
|
||||||
|
|||||||
@ -21,7 +21,19 @@ class SocialManager {
|
|||||||
attributes: ["id", "username", "level"],
|
attributes: ["id", "username", "level"],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
async removeFriend(myId, friendId) {
|
||||||
|
await Friend.destroy({
|
||||||
|
where: {
|
||||||
|
[Op.or]: [
|
||||||
|
{ playerId: myId, friendId: friendId },
|
||||||
|
{ playerId: friendId, friendId: myId },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.broadcastFriendListUpdate(myId);
|
||||||
|
await this.broadcastFriendListUpdate(friendId);
|
||||||
|
}
|
||||||
async sendFriendRequest(sender, targetId) {
|
async sendFriendRequest(sender, targetId) {
|
||||||
await notificationManager.send({
|
await notificationManager.send({
|
||||||
playerId: targetId,
|
playerId: targetId,
|
||||||
@ -43,7 +55,6 @@ class SocialManager {
|
|||||||
{ playerId: myId, friendId: friendId },
|
{ playerId: myId, friendId: friendId },
|
||||||
{ playerId: friendId, friendId: myId },
|
{ playerId: friendId, friendId: myId },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await notificationManager.delete(notificationId, myId);
|
await notificationManager.delete(notificationId, myId);
|
||||||
|
|
||||||
await this.broadcastFriendListUpdate(myId);
|
await this.broadcastFriendListUpdate(myId);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ const Player = require("./Player");
|
|||||||
const Inventory = require("./Inventory");
|
const Inventory = require("./Inventory");
|
||||||
const setupAssociations = require("./associations");
|
const setupAssociations = require("./associations");
|
||||||
const Notification = require("./Notification");
|
const Notification = require("./Notification");
|
||||||
|
const Friend = require("./Friend.js");
|
||||||
|
|
||||||
Player.hasMany(Inventory, { foreignKey: "playerId", as: "inventory" });
|
Player.hasMany(Inventory, { foreignKey: "playerId", as: "inventory" });
|
||||||
Inventory.belongsTo(Player, { foreignKey: "playerId" });
|
Inventory.belongsTo(Player, { foreignKey: "playerId" });
|
||||||
@ -13,4 +14,5 @@ module.exports = {
|
|||||||
Player,
|
Player,
|
||||||
Inventory,
|
Inventory,
|
||||||
Notification,
|
Notification,
|
||||||
|
Friend,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,114 +0,0 @@
|
|||||||
const Player = require("../../models/Player");
|
|
||||||
const Friend = require("../../models/Friend");
|
|
||||||
const NotificationManager = require("../../game/NotificationManager");
|
|
||||||
const Notification = require("../../models/Notification");
|
|
||||||
|
|
||||||
module.exports = (io, socket) => {
|
|
||||||
socket.on("player:search", async ({ query }) => {
|
|
||||||
try {
|
|
||||||
const players = await Player.findAll({
|
|
||||||
where: {
|
|
||||||
username: { [require("sequelize").Op.like]: `%${query}%` },
|
|
||||||
id: { [require("sequelize").Op.ne]: socket.user.id },
|
|
||||||
},
|
|
||||||
limit: 5,
|
|
||||||
attributes: ["id", "username", "level"],
|
|
||||||
});
|
|
||||||
socket.emit("player:search_results", players);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on("friend:add", async ({ friendId }) => {
|
|
||||||
try {
|
|
||||||
const player = socket.user;
|
|
||||||
|
|
||||||
await NotificationManager.createNotification({
|
|
||||||
playerId: friendId,
|
|
||||||
type: "friend_request",
|
|
||||||
title: "NEW FRIEND REQUEST",
|
|
||||||
message: `${player.username} wants to add you as a friend.`,
|
|
||||||
data: { fromId: player.id },
|
|
||||||
});
|
|
||||||
|
|
||||||
io.to(friendId).emit("notification:new", {
|
|
||||||
type: "friend_request",
|
|
||||||
title: "NEW FRIEND REQUEST",
|
|
||||||
message: `${player.username} wants to add you as a friend.`,
|
|
||||||
data: { fromId: player.id },
|
|
||||||
createdAt: new Date(),
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
socket.emit("error", { message: "FAILED_TO_SEND_REQUEST" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on("friend:accept", async ({ friendId, notificationId }) => {
|
|
||||||
try {
|
|
||||||
const myId = socket.user.id;
|
|
||||||
|
|
||||||
const exists = await Friend.findOne({
|
|
||||||
where: { playerId: myId, friendId: friendId },
|
|
||||||
});
|
|
||||||
console.log(myId, friendId);
|
|
||||||
if (!exists) {
|
|
||||||
await Friend.bulkCreate([
|
|
||||||
{ playerId: myId, friendId: friendId },
|
|
||||||
{ playerId: friendId, friendId: myId },
|
|
||||||
]);
|
|
||||||
|
|
||||||
await Notification.destroy({
|
|
||||||
where: { id: notificationId, playerId: myId },
|
|
||||||
});
|
|
||||||
|
|
||||||
const myUpdated = await Player.findByPk(myId, {
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
model: Player,
|
|
||||||
as: "Friends",
|
|
||||||
attributes: ["id", "username", "level"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
socket.emit("friend:list", myUpdated.Friends || []);
|
|
||||||
|
|
||||||
const friendUpdated = await Player.findByPk(friendId, {
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
model: Player,
|
|
||||||
as: "Friends",
|
|
||||||
attributes: ["id", "username", "level"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
io.to(friendId).emit("friend:list", friendUpdated.Friends || []);
|
|
||||||
|
|
||||||
const unreadCount = await Notification.count({
|
|
||||||
where: { playerId: myId, isRead: false },
|
|
||||||
});
|
|
||||||
socket.emit("notifications:unread_count", unreadCount);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
socket.emit("error", { message: "FAILED_TO_ACCEPT_FRIEND" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on("friend:get_list", async () => {
|
|
||||||
try {
|
|
||||||
const player = await Player.findByPk(socket.user.id, {
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
model: Player,
|
|
||||||
as: "Friends",
|
|
||||||
attributes: ["id", "username", "level"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
socket.emit("friend:list", player.Friends || []);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@ -20,13 +20,17 @@ module.exports = (io, socket) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on("friend:accept", async ({ friendId, notificationId }) => {
|
socket.on("friend:remove", async ({ friendId }) => {
|
||||||
try {
|
try {
|
||||||
await socialManager.acceptFriendRequest(
|
await socialManager.removeFriend(socket.user.id, friendId);
|
||||||
socket.user.id,
|
} catch (e) {
|
||||||
friendId,
|
console.error(e);
|
||||||
notificationId,
|
socket.emit("error", { message: "FAILED_TO_REMOVE_FRIEND" });
|
||||||
);
|
}
|
||||||
|
});
|
||||||
|
socket.on("friend:accept", async ({ friendId, id }) => {
|
||||||
|
try {
|
||||||
|
await socialManager.acceptFriendRequest(socket.user.id, friendId, id);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
socket.emit("error", { message: "FAILED_TO_ACCEPT_FRIEND" });
|
socket.emit("error", { message: "FAILED_TO_ACCEPT_FRIEND" });
|
||||||
|
|||||||
Reference in New Issue
Block a user