import { StreamType, VoiceConnection } from "@discordjs/voice"; import { Awaitable, BaseMessageOptions, Client, ClientEvents, ClientPresenceStatusData, CommandInteraction, Message, MessageCreateOptions, MessagePayload, User } from "discord.js"; import { EventEmitter } from "events"; import { Readable } from "node:stream"; export type RunFunkce = (message: Message, argumenty: string) => Awaitable; export type InteractionRunFunkce = (interaction: CommandInteraction) => Awaitable; export type BaseKomandProps = { als?: string[]; arg?: string; }; export type KomandRaw = BaseKomandProps & { run: string | RunFunkce; slashRun?: InteractionRunFunkce; cd?: number; hidden?: true; DMUnsafe?: true; }; export type ListenerFunkce = (...args: any[]) => void; export type SuperListenerFunkce = (...args: any[]) => boolean; interface SuperObject { pos: number; fun: SuperListenerFunkce; } type Eventy = keyof ClientEvents | "userPresenceUpdate"; export type EventSOn = `on_${Eventy}` | `super_on_${Eventy}`; export type SRecord = Record; export type Modul = { more_komandy?: SRecord; client?: Client; } & { [key in `on_${Eventy}`]?: ListenerFunkce } & { [key in `super_on_${Eventy}`]?: SuperObject | SuperListenerFunkce; }; export type Komand = { run: string | RunFunkce; slashRun?: InteractionRunFunkce; cd?: number; DMUnsafe?: true; }; export interface Spinkackar { spinkacek: boolean; timeup: number | false; } export interface FakePresence { status: "online" | "idle" | "dnd" | "offline"; clientStatus?: ClientPresenceStatusData; } export interface UserChange { user: User; ch?: "user" | "stat"; stat?: string; } export type StatusyINaFounu = "Online" | "OnlinePhone" | "Idle" | "IdlePhone" | "DND" | "DNDPhone" | "Offline"; export interface ZmenovejObjekt { id: string; nick?: string; pfp?: string; status?: string; } export interface MuzikaFace { name: string | Readable; volume: number; type?: StreamType; } export type KomandNaExport = { name: string; custom?: true; } & BaseKomandProps; export interface JoinHovna { conn: VoiceConnection; prev: string | boolean; } export interface CUser extends User { presence?: ClientPresenceStatusData; } export interface CustomKomandy { cKomandy: SRecord; cAliasy: SRecord; emitter: EventEmitter; naucse: RunFunkce; zapomen: RunFunkce; kohoje: RunFunkce; naucsealias: RunFunkce; zapomenalias: RunFunkce; naSend: KomandNaExport[]; realKomandy: SRecord; realAliasy: SRecord; } export interface HelpServer { komandy: KomandNaExport[]; customKomandy: KomandNaExport[]; customAliasy: SRecord; } export class CClient extends Client { komandy!: SRecord; aliasy!: SRecord; slashCommandy!: SRecord; }