/* @Packet name GuildDataMemberChanged @Packet identifier 193 @Description Holds data about a single guild member's changed properties @Data - @Structure - */ const encoder = new TextEncoder(); module.exports = function (data) { const packetLength = 5 + 1 + 1 + ("isOnline" in data ? 1 : 0) + ("permission" in data ? 4 : 0) + ("level" in data ? 2 : 0) + ("name" in data ? 1 + data.name.length : 0); const buffer = new ArrayBuffer(packetLength); const view = new DataView(buffer); let offset = 6; let mask = 0; console.info(packetLength, "isOnline" in data, "permission" in data, "level" in data, "name" in data) if ("isOnline" in data) { mask |= (1 << 0); view.setUint8(offset + 1, data.isOnline); offset += 1; }; if ("permission" in data) { mask |= (1 << 1); view.setUint32(offset + 1, data.permission); offset += 4; }; if ("level" in data) { mask |= (1 << 2); view.setUint16(offset + 1, data.level); offset += 2; }; if ("name" in data) { mask |= (1 << 3); const nameBuffer = encoder.encode(data.name); view.setUint8(offset + 1, nameBuffer.byteLength); new Uint8Array(buffer, offset + 2).set(nameBuffer); offset += 1 + nameBuffer.byteLength; }; view.setUint8(0, 193); view.setUint8(1, packetLength); view.setUint8(2, mask); view.setUint32(3, data.id); return buffer; };