erium
Version:
Erium is Discord Bot Library made in typescript
138 lines (137 loc) • 5.06 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const ws_1 = require("ws");
const Endpoints_1 = require("../Endpoints");
const OPCodes_1 = require("../OPCodes");
const Payload_1 = require("./Payload");
const Intents_1 = require("../structures/Intents");
const RequestHandler_1 = require("../handlers/RequestHandler");
const GatewayHandler_1 = require("../handlers/GatewayHandler");
class WebSocketCore {
constructor(client, options) {
this.client = client;
this.requestHandler = null;
let intents = 32765;
if (options.disableIntents) {
for (const intent of options.disableIntents) {
intents -= Intents_1.Intents[intent];
}
}
this.intents = intents;
this.disableEvents = options.disableEvents;
this.presence = options.presence;
this.gateway = new GatewayHandler_1.GatewayHandler(client);
// @ts-ignore
this.requestHandler = new RequestHandler_1.RequestHandler(client);
}
async login(token) {
try {
this.socket = new ws_1.WebSocket(Endpoints_1.Endpoints.BASE_URL);
const payload = {
op: 2,
d: {
token: token,
intents: 513,
heartbeat_interval: 4,
properties: {
$os: "linux",
$browser: "erium",
$device: "erium"
}
}
};
this.socket.on("open", () => {
// @ts-ignore
this.socket.send(JSON.stringify(payload));
});
this.socket.on("message", async (data) => {
var _a;
let payload = JSON.parse(data);
const { t: event, op } = payload;
switch (op) {
case OPCodes_1.OPCodes.ZERO:
break;
case OPCodes_1.OPCodes.NINE:
break;
case OPCodes_1.OPCodes.TEN:
const { t: event, s, op, d } = payload;
const { heartbeat_interval } = d;
this.interval = this.heartbeat(heartbeat_interval);
await this.identify(token);
break;
case OPCodes_1.OPCodes.ELEVEN:
break;
}
if (event) {
try {
const { default: module } = await (_a = `../events/${event}_EVENT`, Promise.resolve().then(() => __importStar(require(_a))));
module(this.client, payload);
// console.log(`Current Event: ${event}`);
}
catch (err) {
console.log(err);
}
}
});
}
catch (err) {
console.log(err);
}
}
setPresence(presence) {
if (!presence)
presence = this.presence;
if (!presence)
return;
this.gateway.updatePresence(presence);
}
get ping() {
return this.gateway.latency;
}
heartbeat(ms) {
return setInterval(() => {
// @ts-ignore
this.socket.send(JSON.stringify(Payload_1.Heartbeat));
}, ms);
}
async identify(token) {
return {
op: 2,
d: {
token,
properties: {
$os: "linux",
$browser: "erium",
$device: "erium"
}
},
compress: false,
intents: this.intents,
presence: this.presence
};
}
}
exports.default = WebSocketCore;