61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
/*
|
|
@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;
|
|
};
|