///
import EventEmitter from "eventemitter3";
import { API, DataChangeUsername, DataCreateGroup, DataCreateServer, DataEditUser, DataLogin, Emoji, MFAMethod, MFAResponse, RevoltConfig } from "revolt-api";
import { ChannelManager } from "./managers/ChannelManager";
import { EmojiManager } from "./managers/EmojiManager";
import { ServerManager } from "./managers/ServerManager";
import { UnreadManager } from "./managers/UnreadManager";
import { UserManager } from "./managers/UserManager";
import { AttachmentBucket } from "./objects/Attachment";
import { BaseMessage } from "./objects/BaseMessage";
import { Channel } from "./objects/Channel";
import { GlobalInvite } from "./objects/GlobalInvite";
import { GroupDMChannel } from "./objects/GroupDMChannel";
import { Member } from "./objects/Member";
import { Role } from "./objects/Role";
import { Server } from "./objects/Server";
import { ServerInvite } from "./objects/ServerInvite";
import { User } from "./objects/User";
import { AutumnConfig, JanuaryConfig, VortexConfig } from "./utils/ServiceConfig";
import { WebSocketClient } from "./websocket";
import { ClientboundNotification } from "./websocketNotifications";
export interface ClientOptions {
apiURL: string;
debug: boolean;
heartbeat: number;
reconnect: boolean;
pingTimeout?: number;
exitOnTimeout?: boolean;
}
export interface ClientSession {
id: string;
name: string;
token: string;
type: "user" | "bot";
}
export type ClientEvents = "ready" | "connecting" | "connected" | "disconnected" | "destroyed" | "packet" | "channelCreate" | "channelUpdate" | "channelDelete" | "channelStartTyping" | "channelStopTyping" | "emojiCreate" | "emojiDelete" | "groupMemberJoin" | "groupMemberLeave" | "groupExited" | "message" | "messageUpdate" | "messageDelete" | "serverCreate" | "serverUpdate" | "serverExited" | "serverMemberJoin" | "serverMemberLeave" | "serverMemberUpdate" | "serverRoleCreate" | "serverRoleUpdate" | "serverRoleDelete" | "userRelationshipUpdate" | "userUpdate";
export declare class Client extends EventEmitter {
api: API;
options: ClientOptions;
config: RevoltConfig;
session: ClientSession;
ws: WebSocketClient;
channels: ChannelManager;
emojis: EmojiManager;
servers: ServerManager;
unreads: UnreadManager;
users: UserManager;
get user(): User;
constructor(options?: Partial);
/** Upload an attachment to Autumn. */
uploadAttachment(filename: string, data: Buffer | Blob, type?: AttachmentBucket): Promise;
/** Proxies a file URL through january. (if enabled) */
proxyFile(url: string): string | null;
/** Create a new server. */
createServer(data: DataCreateServer): Promise;
/** Create a new group. */
createGroup(data: DataCreateGroup): Promise;
/** Edit the client User's profile information. */
editUser(details: DataEditUser): Promise;
/** Change the client User's username. */
changeUsername(details: DataChangeUsername): Promise;
/** Fetch an existing invite. */
fetchInvite(code: string): Promise;
/** Accept an invite. (Group DMs not supported yet) */
acceptInvite(invite: string | GlobalInvite | ServerInvite): Promise;
/** Log in using an existing session or bot token. */
login(token: string, type: "user" | "bot", connect?: boolean, details?: Partial, "type">>): Promise;
/**
* Log in with a username and password.
* @returns Returns a response being one of `none`, `onboard`, or `mfa`. Onboarding and MFA both require a response.
*/
authenticate(details: DataLogin): Promise<{
type: "none";
} | {
type: "onboard";
respond(username: string, loginAfterSuccess: boolean): Promise;
} | {
type: "mfa";
ticket: string;
methods: MFAMethod[];
respond(totp_code: string): ReturnType;
}>;
get mfa(): {
/** MFA status. */
status(): Promise<{
hasRecovery: boolean;
}>;
/** Allowed ticket methods for account. */
allowedMethods(): Promise<("Password" | "Recovery" | "Totp")[]>;
/** Generate an MFA ticket for later use. */
generateTicket(code: MFAResponse): Promise<{
id: string;
accountID: string;
token: string;
validated: boolean;
authorized: boolean;
lastTOTPCode: string;
}>;
/** Generate the TOTP secret for MFA app. */
generateTOTPSecret(ticketToken: string): Promise;
/** Enable TOTP with the code from MFA app. */
enableTOTP(ticketToken: string, totp_code: string): Promise;
/** Disable TOTP. */
disableTOTP(ticketToken: string): Promise;
/** Fetch recovery codes. (or generate/enable them if not enabled) */
fetchRecoveryCodes(ticketToken: string): Promise;
/** Generate new recovery codes. */
generateRecoveryCodes(ticketToken: string): Promise;
};
/** Compatibility layer. Do not use in prod. */
syncFetchSettings(keys: string[]): Promise<{
[key: string]: [number, string];
}>;
/** Compatibility layer. Do not use in prod. */
syncSetSettings(data: {
[key: string]: object | string;
}, timestamp?: number): Promise;
fetchConfiguration(force?: boolean): Promise;
fetchAutumnConfiguration(): Promise;
fetchJanuaryConfiguration(): Promise;
fetchVortexConfiguration(): Promise;
setup(): void;
destroy(destroySession?: boolean): Promise;
on(event: "ready", listener: () => any): this;
on(event: "connecting", listener: () => any): this;
on(event: "connected", listener: () => any): this;
on(event: "disconnected", listener: () => any): this;
on(event: "destroyed", listener: () => any): this;
on(event: "packet", listener: (packet: ClientboundNotification) => any): this;
on(event: "channelCreate", listener: (channel: Channel) => any): this;
on(event: "channelUpdate", listener: (channel: Channel) => any): this;
on(event: "channelDelete", listener: (id: string, channel?: Channel) => any): this;
on(event: "channelStartTyping", listener: (user: User, channel: Channel) => any): this;
on(event: "channelStopTyping", listener: (user: User, channel: Channel) => any): this;
on(event: "emojiCreate", listener: (emoji: Emoji) => void): this;
on(event: "emojiDelete", listener: (id: string, emoji?: Emoji) => void): this;
on(event: "groupMemberJoin", listener: (group: GroupDMChannel, user: User) => any): this;
on(event: "groupMemberLeave", listener: (group: GroupDMChannel, user: User) => any): this;
on(event: "groupExited", listener: (group: GroupDMChannel) => any): this;
on(event: "message", listener: (message: BaseMessage) => any): this;
on(event: "messageUpdate", listener: (message: BaseMessage) => any): this;
on(event: "messageDelete", listener: (id: string, message?: BaseMessage) => any): this;
on(event: "serverCreate", listener: (server: Server) => any): this;
on(event: "serverUpdate", listener: (server: Server) => any): this;
on(event: "serverExited", listener: (id: string, server?: Server) => any): this;
on(event: "serverMemberJoin", listener: (member: Member) => any): this;
on(event: "serverMemberLeave", listener: (server: Server, user: User) => any): this;
on(event: "serverMemberUpdate", listener: (member: Member) => any): this;
on(event: "serverRoleCreate", listener: (role: Role) => any): this;
on(event: "serverRoleUpdate", listener: (role: Role) => any): this;
on(event: "serverRoleDelete", listener: (role: Role) => any): this;
on(event: "userRelationshipUpdate", listener: (user: User) => any): this;
on(event: "userUpdate", listener: (user: User) => any): this;
once(event: "ready", listener: () => any): this;
once(event: "connecting", listener: () => any): this;
once(event: "connected", listener: () => any): this;
once(event: "disconnected", listener: () => any): this;
once(event: "destroyed", listener: () => any): this;
once(event: "packet", listener: (packet: ClientboundNotification) => any): this;
once(event: "channelCreate", listener: (channel: Channel) => any): this;
once(event: "channelUpdate", listener: (channel: Channel) => any): this;
once(event: "channelDelete", listener: (id: string, channel?: Channel) => any): this;
once(event: "channelStartTyping", listener: (user: User, channel: Channel) => any): this;
once(event: "channelStopTyping", listener: (user: User, channel: Channel) => any): this;
once(event: "emojiCreate", listener: (emoji: Emoji) => void): this;
once(event: "emojiDelete", listener: (id: string, emoji?: Emoji) => void): this;
once(event: "groupMemberJoin", listener: (group: GroupDMChannel, user: User) => any): this;
once(event: "groupMemberLeave", listener: (group: GroupDMChannel, user: User) => any): this;
once(event: "groupExited", listener: (group: GroupDMChannel) => any): this;
once(event: "message", listener: (message: BaseMessage) => any): this;
once(event: "messageUpdate", listener: (message: BaseMessage) => any): this;
once(event: "messageDelete", listener: (id: string, message?: BaseMessage) => any): this;
once(event: "serverCreate", listener: (server: Server) => any): this;
once(event: "serverUpdate", listener: (server: Server) => any): this;
once(event: "serverExited", listener: (id: string, server?: Server) => any): this;
once(event: "serverMemberJoin", listener: (member: Member) => any): this;
once(event: "serverMemberLeave", listener: (server: Server, user: User) => any): this;
once(event: "serverMemberUpdate", listener: (member: Member) => any): this;
once(event: "serverRoleCreate", listener: (role: Role) => any): this;
once(event: "serverRoleUpdate", listener: (role: Role) => any): this;
once(event: "serverRoleDelete", listener: (role: Role) => any): this;
once(event: "userRelationshipUpdate", listener: (user: User) => any): this;
once(event: "userUpdate", listener: (user: User) => any): this;
}