erium
Version:
Erium is Discord Bot Library made in typescript
66 lines (56 loc) • 1.97 kB
text/typescript
import EventEmitter from "events";
import Client from "../structures/Client";
import { GatewayOpcodes } from "discord-api-types/v10";
import WebSocket from "ws";
import { ActivityType, Presence } from "../types/Presence";
export type GatewayStatus = "disconnected" | "connected" | "connecting."
export class GatewayHandler extends EventEmitter {
private readonly token: string;
public ws?: WebSocket;
public status: GatewayStatus = "disconnected";
public gatewayURL?: string;
private readonly intents: number;
public client!: Client;
public interval?: number;
public lastSequence: number = 0;
public latency: number = Infinity;
constructor(client: Client) {
super();
this.token = client.token;
// @ts-ignore
this.intents = client.intents;
}
private onError(err: Error) {
return console.error(err)
}
private onClose(code: number, reason: string) {
return console.log(reason, code);
}
public updatePresence(presence: Presence) {
const data: { since: boolean | null, activities: any[]; afk: boolean; status: string } = {
since: presence.since ? presence.since : null,
status: presence.status,
afk: !!presence.afk,
activities: []
}
let e: any;
presence.activities.forEach(e => {
if (e.type === "streaming") {
data.activities.push({
name: e.name,
type: ActivityType.streaming,
url: e.url
})
} else {
data.activities.push({
name: e.name,
type: ActivityType[e.type]
})
}
});
}
public send(code: GatewayOpcodes, data: any) {
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
this.ws.send(JSON.stringify({ op: code, d: data }));
}
}