hennus-api
Version:
Esta es una libreria para el bot Hennus
268 lines (267 loc) • 12.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HennusWS = void 0;
const ws_1 = require("@discordjs/ws");
const v10_1 = require("discord-api-types/v10");
const types_1 = require("../types");
const Presence_1 = require("../types/events/Presence");
const modal_1 = require("../types/interaction/modal");
const commnads_1 = require("../types/interaction/commnads");
const componets_1 = require("../types/interaction/componets");
const utils_1 = require("../utils");
class HennusWS extends ws_1.WebSocketManager {
constructor(client, rest) {
super({
token: client.token,
intents: client.intents.bitfield,
rest,
buildStrategy: (manager) => new ws_1.WorkerShardingStrategy(manager, { shardsPerWorker: "all" }),
shardCount: client.options.sharCount,
shardIds: client.options.shardIds,
});
Object.defineProperty(this, "client", {
value: client,
});
}
;
async Handler(data) {
if (data.t == v10_1.GatewayDispatchEvents.GuildCreate)
await this.handleGuildCreate(data);
else if (data.t == v10_1.GatewayDispatchEvents.GuildUpdate) {
const cache = this.client.guilds.cache.get(data.d.id);
if (cache) {
this.client.guilds.cache.delete(cache.id);
cache.data = data.d;
if (data.d.approximate_member_count && cache.memberCount != data.d.approximate_member_count)
cache.memberCount = data.d.approximate_member_count;
if (data.d.description !== cache.description)
cache.description = data.d.description ?? undefined;
if (data.d.name != cache.name)
cache.name = data.d.name;
this.client.emit("GuildUpdate", cache);
this.client.guilds.cache.set(data.d.id, cache);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.GuildDelete) {
const cache = this.client.guilds.cache.get(data.d.id);
if (cache) {
this.client.emit("GuildDelete", cache);
this.client.guilds.cache.delete(cache.id);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.ChannelCreate || data.t == v10_1.GatewayDispatchEvents.ChannelUpdate || data.t == v10_1.GatewayDispatchEvents.ChannelDelete) {
let channel = (0, utils_1.channelConvertidor)(data.d, this.client);
if (channel) {
const cache = this.client.channels.cache.get(channel.id);
if (data.t == v10_1.GatewayDispatchEvents.ChannelCreate) {
!channel.isChannelCategory() ? channel.messages : undefined;
this.client.channels.cache.set(channel.id, channel);
this.client.emit('ChannelCreate', channel);
}
;
if (data.t == v10_1.GatewayDispatchEvents.ChannelDelete) {
this.client.emit('ChannelDelete', channel);
if (cache)
this.client.channels.cache.delete(channel.id);
}
;
if (data.t == v10_1.GatewayDispatchEvents.ChannelUpdate) {
if (!cache) {
!channel.isChannelCategory() ? channel.messages : undefined;
this.client.channels.cache.set(channel.id, channel);
}
else {
cache.data = channel.data;
cache._data = channel._data;
cache.name = channel.name;
this.client.channels.update(cache);
}
;
this.client.emit('ChannelUpdate', channel);
}
;
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.MessageCreate) {
const message = new types_1.Message(data.d, this.client);
this.client.emit("MessageCreate", message);
const channel = message.channel;
if (channel && !channel.isChannelCategory()) {
channel.lastMessage = message.id;
channel.messages.cache.set(message.id, message);
this.client.channels.update(channel);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.MessageDelete) {
const channel = this.client.channels.cache.get(data.d.channel_id);
let msg;
if (channel && !channel.isChannelCategory())
msg = channel.messages.cache.get(data.d.id);
if (msg) {
this.client.emit("MessageDelete", msg);
if (channel && !channel.isChannelCategory())
channel.messages.cache.delete(data.d.id);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.MessageUpdate) {
const New_msg = new types_1.Message(data.d, this.client);
const channel = this.client.channels.cache.get(data.d.channel_id);
let Old_msg;
if (channel && !channel.isChannelCategory())
Old_msg = channel.messages.cache.get(data.d.id);
this.client.emit("MessageUpdate", New_msg, Old_msg);
if (channel && !channel.isChannelCategory()) {
channel.messages.update(New_msg);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.PresenceUpdate) {
const presence = new Presence_1.Presence(data.d, this.client);
this.client.emit("PresenceUpdate", presence);
if (!this.client.users.cache.has(presence.user.id))
this.client.users.cache.set(presence.user.id, presence.user);
}
else if (data.t == v10_1.GatewayDispatchEvents.UserUpdate) {
const user = new types_1.User(data.d, this.client);
this.client.users.update(user);
this.client.emit("UserUpdate", user);
}
else if (data.t == v10_1.GatewayDispatchEvents.GuildMemberAdd) {
const guild = this.client.guilds.resolve(data.d.guild_id);
let member = undefined;
if (guild) {
if (data.d.user && !guild.members.resolve(data.d.user?.id ?? "")) {
guild.memberCount = guild.memberCount + 1;
member = new types_1.GuildMember(data.d, guild, this.client);
guild.members.cache.set(data.d.user.id, member);
this.client.guilds.add(guild);
}
else
member = new types_1.GuildMember(data.d, guild, this.client);
}
;
if (member) {
this.client.emit("GuildMemberAdd", member);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.GuildMemberRemove) {
const id = data.d.user.id;
const guildId = data.d.guild_id;
const guild = this.client.guilds.resolve(guildId);
if (guild) {
const member = guild.members.resolve(id);
if (member) {
this.client.emit("GuildMemberRemove", member);
guild.memberCount = guild.memberCount - 1;
guild.members.cache.delete(id);
this.client.guilds.add(guild);
}
;
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.GuildMemberUpdate) {
const id = data.d.user.id;
const guildId = data.d.guild_id;
const guild = this.client.guilds.resolve(guildId);
if (guild) {
const oldMember = guild.members.resolve(id);
const newMember = new types_1.GuildMember(data.d, guild, this.client);
this.client.emit("GuildMemberUpdate", newMember, oldMember);
guild.members.add(newMember);
this.client.guilds.add(guild);
}
;
}
else if (data.t == v10_1.GatewayDispatchEvents.GuildMembersChunk) {
const guildId = data.d.guild_id;
const guild = this.client.guilds.resolve(guildId);
if (guild) {
const count = data.d.chunk_count;
guild.memberCount = guild.memberCount + count;
const members = data.d.members.map((member => new types_1.GuildMember(member, guild, this.client)));
this.client.emit("GuildMembersChunk", members);
members.forEach((member) => {
guild.members.add(member);
});
}
;
if (this.client.intents.has(v10_1.GatewayIntentBits.GuildMembers) && data.d.presences)
data.d.presences.forEach((presence) => {
const user = new types_1.User(presence.user, this.client);
this.client.users.update(user);
});
}
else if (data.t == v10_1.GatewayDispatchEvents.InteractionCreate) {
let int = undefined;
if (data.d.type == v10_1.InteractionType.ModalSubmit)
int = new modal_1.InteractionModal(data.d, this.client);
if (data.d.type == v10_1.InteractionType.ApplicationCommand || data.d.type == v10_1.InteractionType.ApplicationCommandAutocomplete)
int = new commnads_1.InteractionCommands(data.d, this.client);
if (data.d.type == v10_1.InteractionType.MessageComponent) {
if (data.d.data.component_type == v10_1.ComponentType.Button)
int = new componets_1.InteractionButton(data.d, this.client);
else
int = new componets_1.InteractionSelectAny(data.d, this.client);
}
;
if (int)
this.client.emit("InteractionCreate", int);
}
else if (data.t == v10_1.GatewayDispatchEvents.VoiceStateUpdate)
this.client.emit("VoiceStateUpdate", data.d);
}
;
async ready(data) {
const ready = new types_1.Ready(data, this.client);
this.client.emit("Ready", ready);
if (!this.client.intents.has(v10_1.GatewayIntentBits.Guilds)) {
for (let index = 0; index < data.guilds.length; index++) {
if (index > 5)
continue;
const element = data.guilds[index];
const channels = await this.client.rest.get("guildChannels", element.id);
let guild;
if (element.unavailable)
guild = await this.client.rest.get("guild", element.id);
if (channels) {
this.client.channels.setall(channels);
}
if (guild) {
guild.members.fetchall();
guild.roles.fetchall(guild.id);
this.client.guilds.cache.set(guild.id, guild);
}
}
}
}
async handleGuildCreate(data) {
const guild = new types_1.Guild(data.d, this.client);
guild.memberCount = data.d.member_count;
guild.roles.setall(data.d.roles);
const channels = [...data.d.channels, ...data.d.threads]
.map((channel) => (0, utils_1.channelConvertidor)(channel, this.client))
.filter((x) => x !== undefined);
this.client.channels.setall(channels);
guild.members.setall(data.d.members, guild);
this.client.emojis.setall(data.d.emojis.map((x) => new types_1.GuildEmojis(x, guild, this.client)));
const cache = this.client.guilds.cache.get(guild.id);
if (!cache)
this.client.guilds.cache.set(guild.id, guild);
this.client.emit("GuildCreate", guild);
}
;
async sendall(packet) {
for (const shardId of await this.getShardIds())
this.send(shardId, packet);
}
;
}
exports.HennusWS = HennusWS;
;