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); };