70 lines
2.7 KiB
JavaScript
70 lines
2.7 KiB
JavaScript
const GuildSearchResultPacket = require("../Packets/GuildSearchResult");
|
|
|
|
const queries = require("../Data/queries");
|
|
const { QUERY_DELETE_GUILD_MEMBER } = queries;
|
|
|
|
const constants = require("../Data/constants");
|
|
const { GUILD_PERMISSIONS } = constants;
|
|
const { GUILD_PERMISSION_KICK } = GUILD_PERMISSIONS;
|
|
|
|
const Game = require("../Game/Game");
|
|
const { players, guilds } = Game;
|
|
|
|
const dec = new TextDecoder();
|
|
|
|
module.exports = async function (ws, message, player) {
|
|
const guildTagLength = message.getUint8(1);
|
|
const guildNameLength = message.getUint8(1 + guildTagLength + 1);
|
|
if (!guildTagLength && !guildNameLength) return;
|
|
|
|
const guildTagView = new DataView(message.buffer, 2, guildTagLength);
|
|
const guildTag = dec.decode(guildTagView);
|
|
|
|
const guildNameView = new DataView(message.buffer, 2 + guildTagLength + 1, guildNameLength);
|
|
const guildName = dec.decode(guildNameView);
|
|
|
|
const guildSearchResult = await execute("SELECT guilds.id, guilds.tag, guilds.name, d.size AS size, CASE WHEN guildrequests.playerID IS NULL THEN 0 ELSE 1 END AS hasApplied FROM guilds LEFT JOIN guildrequests ON guilds.id = guildrequests.guildID AND guildrequests.playerID = ? JOIN (SELECT guildID, COUNT(*) AS size FROM guildmembers GROUP BY guildID) AS d ON guilds.id = d.guildID WHERE guilds.tag = ? OR guilds.name LIKE ?", [player.id, guildTag, + `%${guildName}%`]);
|
|
if (!guildSearchResult.data) return;
|
|
|
|
const packets = [];
|
|
|
|
const length = guildSearchResult.data.length;
|
|
if (!length) {
|
|
const guildSearchResult = {
|
|
id: 0,
|
|
tag: "",
|
|
name: "",
|
|
size: {
|
|
current: 0,
|
|
maximum: 0
|
|
},
|
|
hasApplied: false,
|
|
isLastEntry: true
|
|
};
|
|
|
|
const guildSearchResultPacket = GuildSearchResultPacket(guildSearchResult);
|
|
packets.push(guildSearchResultPacket);
|
|
} else {
|
|
guildSearchResult.data.forEach((g, i) => {
|
|
const guild = guilds[g.id];
|
|
const sizeMaximum = guild ? guild.sizeMaximum : 0;
|
|
|
|
const guildSearchResult = {
|
|
id: g.id,
|
|
tag: g.tag,
|
|
name: g.name,
|
|
size: {
|
|
current: g.size,
|
|
maximum: sizeMaximum
|
|
},
|
|
hasApplied: g.hasApplied,
|
|
isLastEntry: i === length - 1
|
|
};
|
|
|
|
const guildSearchResultPacket = GuildSearchResultPacket(guildSearchResult);
|
|
packets.push(guildSearchResultPacket);
|
|
});
|
|
};
|
|
|
|
player.map.registerIndividualNetworkPacket(player.id, packets);
|
|
}; |