import { VoiceConnection } from "@discordjs/voice"; import { Awaitable, BaseMessageOptions, Client, ClientEvents, ClientPresenceStatusData, CommandInteraction, Message, MessageCreateOptions, MessagePayload, Presence, User } from "discord.js"; import { EventEmitter } from "events"; 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 & { cd?: number; hidden?: true; DMUnsafe?: true; premium?: true; } & ( { run: string | RunFunkce; slashRun?: never; } | { run?: never; slashRun: InteractionRunFunkce; } ); export type ListenerFunkce = (...args: ClientEvents[T]) => void; export type SuperListenerFunkce = (...args: ClientEvents[T]) => Awaitable; interface SuperObject { pos: number; fun: SuperListenerFunkce; } export type SRecord = Record; export type Modul = { more_komandy?: SRecord; client?: Client; on_userPresenceUpdate?: (bef: Presence | null, aft: Presence) => void; } & { [key in keyof ClientEvents as `on_${key}`]?: ListenerFunkce } & { [key in keyof ClientEvents as `super_on_${key}`]?: SuperObject | SuperListenerFunkce; }; export type Komand = { run?: string | RunFunkce; slashRun?: InteractionRunFunkce; cd?: number; DMUnsafe?: true; premium?: 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 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; }