UNPKG

erium

Version:

Erium is Discord Bot Library made in typescript

66 lines (56 loc) 1.97 kB
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 })); } }