dyno-bot/eris-dev/index.d.ts
2020-09-12 19:08:48 +01:00

1240 lines
48 KiB
TypeScript

declare module "eris" {
// TODO good hacktoberfest PR: implement ShardManager, RequestHandler and other stuff and other stuff and other stuff
import { EventEmitter } from "events";
import { Readable as ReadableStream } from "stream";
type JSONCache = {[s: string]: any}
interface SimpleJSON {
toJSON(simple?: boolean): JSONCache;
}
interface NestedJSON {
toJSON(arg?: any, cache?: Array<string | any>): JSONCache;
}
// TODO there's also toJSON(): JSONCache, though, SimpleJSON should suffice
type TextableChannel = TextChannel | PrivateChannel | GroupChannel;
type AnyChannel = TextChannel | VoiceChannel | CategoryChannel | PrivateChannel | GroupChannel;
type AnyGuildChannel = TextChannel | VoiceChannel | CategoryChannel;
type CreateInviteOptions = {
maxAge?: number,
maxUses?: number,
temporary?: boolean,
}
interface Invitable {
getInvites(): Promise<Invite[]>;
createInvite(options?: CreateInviteOptions, reason?: string): Promise<Invite>;
}
interface Textable {
lastMessageID: string;
messages: Collection<Message>;
sendTyping(): Promise<void>;
getMessage(messageID: string): Promise<Message>;
getMessages(limit?: number, before?: string, after?: string, around?: string): Promise<Message[]>;
getPins(): Promise<Message[]>;
createMessage(
content: MessageContent,
file?: MessageFile,
): Promise<Message>;
editMessage(messageID: string, content: MessageContent): Promise<Message>;
pinMessage(messageID: string): Promise<void>;
unpinMessage(messageID: string): Promise<void>;
getMessageReaction(messageID: string, reaction: string, limit?: number, before?: string, after?: string): Promise<User[]>;
addMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
removeMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
removeMessageReactions(messageID: string): Promise<void>;
deleteMessage(messageID: string, reason?: string): Promise<void>;
unsendMessage(messageID: string): Promise<void>;
}
interface Constants {
DefaultAvatarHashes: string[];
ImageFormats: string[];
ImageSizes: number[];
GatewayOPCodes: {[key: string]: number};
GATEWAY_VERSION: number;
Permissions: {[key: string]: number};
VoiceOPCodes: {[key: string]: number};
SystemJoinMessages: string[];
AuditLogActions: {[key: string]: number};
}
export var Constants: Constants;
interface WebhookPayload {
content?: string;
file?: { file: Buffer, name: string } | Array<{ file: Buffer, name: string}>;
embeds?: EmbedOptions[];
username?: string;
avatarURL?: string;
tts?: boolean;
wait?: boolean;
disableEveryone?: boolean;
}
interface EmbedBase {
title?: string;
description?: string;
url?: string;
timestamp?: string;
color?: number;
footer?: { text: string, icon_url?: string, proxy_icon_url?: string };
image?: { url?: string, proxy_url?: string, height?: number, width?: number };
thumbnail?: { url?: string, proxy_url?: string, height?: number, width?: number };
video?: { url: string, height?: number, width?: number };
provider?: { name: string, url?: string };
fields?: Array<{ name?: string, value?: string, inline?: boolean }>;
author?: { name: string, url?: string, icon_url?: string, proxy_icon_url?: string };
}
type Embed = {
type: string,
} & EmbedBase;
type EmbedOptions = {
type?: string,
} & EmbedBase;
interface Webhook {
name: string;
channel_id: string;
token: string;
avatar?: string;
guild_id: string;
id: string;
user: {
username: string,
discriminator: string,
id: string,
avatar?: string,
};
}
interface GuildEmbed {
channel_id?: string;
enabled: boolean;
}
interface Attachment { url: string; proxy_url: string; size: number; id: string; filename: string; }
interface VoiceRegion {
name: string;
deprecated: boolean;
custom: boolean;
vip: boolean;
optimal: boolean;
id: string;
}
interface UserSettings {
theme: string;
status: string;
show_current_game: boolean;
restricted_guilds: string[];
render_reactions: boolean;
render_embeds: boolean;
message_display_compact: boolean;
locale: string;
inline_embed_media: boolean;
inline_attachment_media: boolean;
guild_positions: string[];
friend_source_flags: {
all: boolean, // not sure about other keys, abal heeeelp
};
explicit_content_filter: number;
enable_tts_command: boolean;
developer_mode: boolean;
detect_platform_accounts: boolean;
default_guilds_restricted: boolean;
convert_emojis: boolean;
afk_timeout: number;
}
interface GuildSettings {
suppress_everyone: boolean;
muted: boolean;
mobile_push: boolean;
message_notifications: number;
guild_id: string;
channel_override: Array<{
muted: boolean,
message_notifications: number,
channel_id: string,
}>;
}
interface UserProfile {
premium_since?: number;
mutual_guilds: Array<{ nick?: string, id: string }>;
user: { username: string, discriminator: string, flags: number, id: string, avatar?: string };
connected_accounts: Array<{ verified: boolean, type: string, id: string, name: string }>;
}
interface Connection {
verified: boolean;
revoked: boolean;
integrations: any[]; // TODO ????
visibility: number;
friend_sync: boolean;
type: string;
id: string;
name: string;
}
interface GuildAuditLog {
users: User[];
entries: GuildAuditLogEntry[];
}
// TODO: Does this have more stuff?
interface BaseData {
id: string;
[key: string]: {};
}
type MessageContent = string | { content?: string, tts?: boolean, disableEveryone?: boolean, embed?: EmbedOptions };
interface MessageFile { file: Buffer | string; name: string; }
interface EmojiBase {
name: string;
icon?: string;
}
type EmojiOptions = {
roles?: string[],
} & EmojiBase;
type Emoji = {
roles: string[],
} & EmojiBase;
interface IntegrationOptions { expireBehavior: string; expireGracePeriod: string; enableEmoticons: string; }
interface GuildOptions {
name?: string;
region?: string;
icon?: string;
verificationLevel?: number;
defaultNotifications?: number;
afkChannelID?: string;
afkTimeout?: number;
ownerID?: string;
splash?: string;
}
interface MemberOptions { roles?: string[]; nick?: string; mute?: boolean; deaf?: boolean; channelID?: string; }
interface RoleOptions { name?: string; permissions?: number; color?: number; hoist?: boolean; mentionable?: boolean; }
interface GamePresence { name: string; type?: number; url?: string; }
interface SearchOptions {
sortBy?: string;
sortOrder?: string;
content?: string;
authorID?: string;
minID?: string;
maxID?: string;
limit?: number;
offset?: number;
contextSize?: number;
has?: string;
embedProviders?: string;
embedTypes?: string;
attachmentExtensions?: string;
attachmentFilename?: string;
channelIDs: string[];
}
interface SearchResults { totalResults: number; results: Array<Array<Message & { hit?: boolean }>>; }
interface VoiceResourceOptions {
inlineVolume?: boolean;
voiceDataTimeout?: number;
inputArgs?: string[];
encoderArgs?: string[];
format?: string;
frameDuration?: number;
frameSize?: number;
sampleRate?: number;
}
type PossiblyUncachedMessage = Message | { id: string, channel: TextableChannel };
interface RawPacket { op: number; t?: string; d?: any; s?: number; }
interface ClientOptions {
autoreconnect?: boolean;
compress?: boolean;
connectionTimeout?: number;
disableEvents?: { [s: string]: boolean };
disableEveryone?: boolean;
firstShardID?: number;
getAllUsers?: boolean;
guildCreateTimeout?: number;
largeThreshold?: number;
lastShardID?: number;
maxShards?: number | "auto";
messageLimit?: number;
opusOnly?: boolean;
restMode?: boolean;
seedVoiceConnections?: boolean;
sequencerWaiter?: number;
defaultImageFormat?: string;
defaultImageSize?: number;
ws?: any;
latencyThreshold?: number;
}
interface CommandClientOptions {
defaultHelpCommand?: boolean;
description?: string;
ignoreBots?: boolean;
ignoreSelf?: boolean;
name?: string;
owner?: string;
prefix?: string | string[];
defaultCommandOptions?: CommandOptions;
}
type GenericCheckFunction<T> = (msg: Message) => T;
interface CommandOptions {
aliases?: string[];
caseInsensitive?: boolean;
deleteCommand?: boolean;
argsRequired?: boolean;
guildOnly?: boolean;
dmOnly?: boolean;
description?: string;
fullDescription?: string;
usage?: string;
requirements?: {
userIDs?: string[] | GenericCheckFunction<string[]>,
roleIDs?: string[] | GenericCheckFunction<string[]>,
roleNames?: string[] | GenericCheckFunction<string[]>,
permissions?: { [s: string]: boolean } | GenericCheckFunction<{ [s: string]: boolean }>,
};
cooldown?: number;
restartCooldown?: boolean;
cooldownReturns?: number;
cooldownMessage?: string | GenericCheckFunction<string>;
invalidUsageMessage?: string | GenericCheckFunction<string>;
permissionMessage?: string | GenericCheckFunction<string>;
errorMessage?: string | GenericCheckFunction<string>;
reactionButtons?: Array<{ emoji: string, type: string, response: CommandGenerator }>;
reactionButtonTimeout?: number;
defaultSubcommandOptions?: CommandOptions;
}
type CommandGeneratorFunction = (msg: Message, args: string[]) => Promise<string> | Promise<void> | string | void;
type CommandGenerator = CommandGeneratorFunction | string | string[] | CommandGeneratorFunction[];
export class Client extends EventEmitter implements SimpleJSON {
public token: string;
public bot?: boolean;
public options: ClientOptions;
public channelGuildMap: { [s: string]: string };
public shards: Collection<Shard>;
public guilds: Collection<Guild>;
public privateChannelMap: { [s: string]: string };
public privateChannels: Collection<PrivateChannel>;
public groupChannels: Collection<GroupChannel>;
public voiceConnections: Collection<VoiceConnection>;
public guildShardMap: { [s: string]: number };
public startTime: number;
public unavailableGuilds: Collection<UnavailableGuild>;
public uptime: number;
public user: ExtendedUser;
public users: Collection<User>;
public relationships: Collection<Relationship>;
public userGuildSettings: { [s: string]: GuildSettings };
public userSettings: UserSettings;
public notes: { [s: string]: string };
public constructor(token: string, options?: ClientOptions);
public connect(): Promise<void>;
public getGateway(): Promise<string>;
public getBotGateway(): Promise<{ url: string, shards: number }>;
public disconnect(options: { reconnect: boolean }): void;
public joinVoiceChannel(
channelID: string,
options?: { shared?: boolean, opusOnly?: boolean },
): Promise<VoiceConnection>;
public leaveVoiceChannel(channelID: string): void;
public editAFK(afk: boolean): void;
public editStatus(status?: string, game?: GamePresence): void;
public getChannel(channelID: string): AnyChannel;
public createChannel(guildID: string, name: string, type?: number, reason?: string, parentID?: string): Promise<AnyGuildChannel>;
public editChannel(channelID: string, options: {
name?: string,
icon?: string,
ownerID?: string,
topic?: string,
bitrate?: number,
userLimit?: number,
nsfw?: boolean,
parentID?: string,
}, reason?: string): Promise<GroupChannel | AnyGuildChannel>;
public editChannelPosition(channelID: string, position: number): Promise<void>;
public deleteChannel(channelID: string, reason?: string): Promise<void>;
public sendChannelTyping(channelID: string): Promise<void>;
public editChannelPermission(
channelID: string,
overwriteID: string,
allow: number,
deny: number,
type: string,
reason?: string,
): Promise<void>;
public deleteChannelPermission(channelID: string, overwriteID: string, reason?: string): Promise<void>;
public getChannelInvites(channelID: string): Promise<Invite[]>;
public createChannelInvite(
channelID: string,
options?: { maxAge?: number, maxUses?: number, temporary?: boolean, unique?: boolean },
reason?: string,
): Promise<Invite>;
public getChannelWebhooks(channelID: string): Promise<Webhook[]>;
public getWebhook(webhookID: string, token?: string): Promise<Webhook>;
public createChannelWebhook(
channelID: string,
options: { name: string, avatar: string },
reason?: string,
): Promise<Webhook>;
public editWebhook(
webhookID: string,
options: { name?: string, avatar?: string },
token?: string,
reason?: string,
): Promise<Webhook>;
public executeWebhook(webhookID: string, token: string, options: WebhookPayload): Promise<void>;
public executeSlackWebhook(webhookID: string, token: string, options?: { wait?: boolean }): Promise<void>;
public deleteWebhook(webhookID: string, token?: string, reason?: string): Promise<void>;
public getGuildWebhooks(guildID: string): Promise<Webhook[]>;
public getGuildAuditLogs(
guildID: string,
limit?: number,
before?: string,
actionType?: number,
): Promise<GuildAuditLog>;
public createGuildEmoji(guildID: string, options: EmojiOptions, reason?: string): Promise<Emoji>;
public editGuildEmoji(
guildID: string,
emojiID: string,
options: { name?: string, roles?: string[] },
reason?: string,
): Promise<Emoji>;
public deleteGuildEmoji(guildID: string, emojiID: string, reason?: string): Promise<void>;
public createRole(guildID: string, options?: RoleOptions, reason?: string): Promise<Role>;
public editRole(
guildID: string,
roleID: string,
options: RoleOptions,
reason?: string,
): Promise<Role>; // TODO not all options are available?
public editRolePosition(guildID: string, roleID: string, position: number): Promise<void>;
public deleteRole(guildID: string, roleID: string, reason?: string): Promise<void>;
public getPruneCount(guildID: string, days: number): Promise<number>;
public pruneMembers(guildID: string, days: number, reason?: string): Promise<number>;
public getVoiceRegions(guildID: string): Promise<VoiceRegion[]>;
public getInvite(inviteID: string, withCounts?: boolean): Promise<Invite>;
public acceptInvite(inviteID: string): Promise<Invite>;
public deleteInvite(inviteID: string, reason?: string): Promise<void>;
public getSelf(): Promise<ExtendedUser>;
public editSelf(options: { username?: string, avatar?: string }): Promise<ExtendedUser>;
public getDMChannel(userID: string): Promise<PrivateChannel>;
public createGroupChannel(userIDs: string[]): Promise<GroupChannel>;
public getMessage(channelID: string, messageID: string): Promise<Message>;
public getMessages(
channelID: string,
limit?: number,
before?: string,
after?: string,
around?: string,
): Promise<Message[]>;
public getPins(channelID: string): Promise<Message[]>;
public createMessage(channelID: string, content: MessageContent, file?: MessageFile): Promise<Message>;
public editMessage(channelID: string, messageID: string, content: MessageContent): Promise<Message>;
public pinMessage(channelID: string, messageID: string): Promise<void>;
public unpinMessage(channelID: string, messageID: string): Promise<void>;
public getMessageReaction(channelID: string, messageID: string, reaction: string, limit?: number, before?: string, after?: string): Promise<User[]>;
public addMessageReaction(channelID: string, messageID: string, reaction: string, userID?: string): Promise<void>;
public removeMessageReaction(
channelID: string,
messageID: string,
reaction: string,
userID?: string,
): Promise<void>;
public removeMessageReactions(channelID: string, messageID: string): Promise<void>;
public deleteMessage(channelID: string, messageID: string, reason?: string): Promise<void>;
public deleteMessages(channelID: string, messageIDs: string[], reason?: string): Promise<void>;
public purgeChannel(
channelID: string,
limit?: number,
filter?: (m: Message) => boolean,
before?: string,
after?: string,
): Promise<number>;
public getGuildEmbed(guildID: string): Promise<GuildEmbed>;
public getGuildIntegrations(guildID: string): Promise<GuildIntegration[]>;
public editGuildIntegration(guildID: string, integrationID: string, options: IntegrationOptions): Promise<void>;
public deleteGuildIntegration(guildID: string, integrationID: string): Promise<void>;
public syncGuildIntegration(guildID: string, integrationID: string): Promise<void>;
public getGuildInvites(guildID: string): Promise<Invite[]>;
public banGuildMember(guildID: string, userID: string, deleteMessageDays?: number, reason?: string): Promise<void>;
public unbanGuildMember(guildID: string, userID: string, reason?: string): Promise<void>;
public createGuild(name: string, region: string, icon?: string): Promise<Guild>;
public editGuild(guildID: string, options: GuildOptions, reason?: string): Promise<Guild>;
public getGuildBans(guildID: string): Promise<Array<{ reason?: string, user: User }>>;
public editGuildMember(guildID: string, memberID: string, options: MemberOptions, reason?: string): Promise<void>;
public addGuildMemberRole(guildID: string, memberID: string, roleID: string, reason?: string): Promise<void>;
public removeGuildMemberRole(guildID: string, memberID: string, roleID: string, reason?: string): Promise<void>;
public editNickname(guildID: string, nick: string, reason?: string): Promise<void>;
public kickGuildMember(guildID: string, userID: string, reason?: string): Promise<void>;
public deleteGuild(guildID: string): Promise<void>;
public leaveGuild(guildID: string): Promise<void>;
public getOAuthApplication(appID?: string): Promise<{
description: string,
name: string,
owner: {
username: string,
discriminator: string,
id: string,
avatar?: string,
},
bot_public: boolean,
bot_require_code_grant: boolean,
id: string,
icon?: string,
}>;
public addRelationship(userID: string, block?: boolean): Promise<void>;
public removeRelationship(userID: string): Promise<void>;
public addGroupRecipient(groupID: string, userID: string): Promise<void>;
public removeGroupRecipient(groupID: string, userID: string): Promise<void>;
public getUserProfile(userID: string): Promise<UserProfile>;
public editUserNote(userID: string, note: string): Promise<void>;
public deleteUserNote(userID: string): Promise<void>;
public getSelfConnections(): Promise<Connection[]>;
public editSelfConnection(
platform: string,
id: string,
data: { friendSync: boolean, visibility: number },
): Promise<Connection>;
public deleteSelfConnection(platform: string, id: string): Promise<void>;
public getSelfSettings(): Promise<UserSettings>;
public editSelfSettings(data: UserSettings): Promise<UserSettings>;
public getSelfMFACodes(
password: string,
regenerate?: boolean,
): Promise<{ backup_codes: Array<{ code: string, consumed: boolean }> }>;
public enableSelfMFATOTP(
secret: string,
code: string,
): Promise<{ token: string, backup_codes: Array<{ code: string, consumed: boolean }> }>;
public disableSelfMFATOTP(code: string): Promise<{ token: string }>;
public getSelfBilling(): Promise<{
premium_subscription?: {
status: number,
ended_at?: string,
canceled_at?: string,
created_at: string,
current_period_end?: string,
current_period_start?: string,
plan: string,
},
payment_source?: {
type: string,
brand: string,
invalid: boolean,
last_4: number,
expires_year: number,
expires_month: number,
},
payment_gateway?: string,
}>;
public getSelfPayments(): Promise<Array<{
status: number,
amount_refunded: number,
description: string,
created_at: string, // date
currency: string,
amount: number,
}>>;
public addSelfPremiumSubscription(token: string, plan: string): Promise<void>;
public deleteSelfPremiumSubscription(): Promise<void>;
public getRESTChannel(channelID: string): Promise<AnyChannel>;
public getRESTGuild(guildID: string): Promise<Guild>;
public getRESTGuilds(limit?: number, before?: string, after?: string): Promise<Guild[]>;
public getRESTGuildChannels(guildID: string): Promise<AnyGuildChannel[]>;
public getRESTGuildEmojis(guildID: string): Promise<Emoji[]>;
public getRESTGuildEmoji(guildID: string, emojiID: string): Promise<Emoji>;
public getRESTGuildMembers(guildID: string, limit?: number, after?: string): Promise<Member[]>;
public getRESTGuildMember(guildID: string, memberID: string): Promise<Member>;
public getRESTGuildRoles(guildID: string): Promise<Role[]>;
public getRESTUser(userID: string): Promise<User>;
public searchChannelMessages(channelID: string, query: SearchOptions): Promise<SearchResults>;
public searchGuildMessages(guildID: string, query: SearchOptions): Promise<SearchResults>;
// tslint:disable-next-line
public on(event: string, listener: Function): this;
public on(event: "callCreate" | "callRing" | "callDelete", listener: (call: Call) => void): this;
public on(
event: "callUpdate",
listener: (
call: Call,
oldCall: {
participants: string[],
endedTimestamp?: number,
ringing: string[],
region: string,
unavailable: boolean,
},
) => void,
): this;
public on(event: "channelCreate" | "channelDelete", listener: (channel: AnyChannel) => void): this;
public on(
event: "channelPinUpdate",
listener: (channel: TextableChannel, timestamp: number, oldTimestamp: number) => void,
): this;
public on(
event: "channelRecipientAdd" | "channelRecipientRemove",
listener: (channel: GroupChannel, user: User) => void,
): this;
public on(
event: "channelUpdate",
listener: (
channel: AnyChannel,
oldChannel: {
name: string,
position: string,
topic?: string,
bitrate?: number,
permissionOverwrites: Collection<PermissionOverwrite>,
},
) => void,
): this;
public on(
event: "friendSuggestionCreate",
listener: (user: User, reasons: Array<{ type: number, platform_type: string, name: string }>) => void,
): this;
public on(event: "friendSuggestionDelete", listener: (user: User) => void): this;
public on(
event: "guildAvailable" | "guildBanAdd" | "guildBanRemove",
listener: (guild: Guild, user: User) => void,
): this;
public on(event: "guildDelete" | "guildUnavailable" | "guildCreate", listener: (guild: Guild) => void): this;
public on(event: "guildEmojisUpdate", listener: (guild: Guild, emojis: Emoji[], oldEmojis: Emoji[]) => void): this;
public on(event: "guildMemberAdd", listener: (guild: Guild, member: Member) => void): this;
public on(event: "guildMemberChunk", listener: (guild: Guild, members: Member[]) => void): this;
public on(
event: "guildMemberRemove",
listener: (guild: Guild, member: Member | { id: string, user: User }) => void,
): this;
public on(
event: "guildMemberUpdate",
listener: (guild: Guild, member: Member, oldMember: { roles: string[], nick?: string }) => void,
): this;
public on(event: "guildRoleCreate" | "guildRoleDelete", listener: (guild: Guild, role: Role) => void): this;
public on(event: "guildRoleUpdate", listener: (guild: Guild, role: Role, oldRole: RoleOptions) => void): this;
public on(event: "guildUpdate", listener: (guild: Guild, oldGuild: GuildOptions) => void): this;
public on(event: "messageCreate", listener: (message: Message) => void): this;
public on(
event: "messageDelete" | "messageReactionRemoveAll",
listener: (message: PossiblyUncachedMessage) => void,
): this;
public on(event: "messageDeleteBulk", listener: (messages: PossiblyUncachedMessage[]) => void): this;
public on(
event: "messageReactionAdd" | "messageReactionRemove",
listener: (message: PossiblyUncachedMessage, emoji: Emoji, userID: string) => void,
): this;
public on(event: "messageUpdate", listener: (message: Message, oldMessage?: {
attachments: Attachment[],
embeds: Embed[],
content: string,
editedTimestamp?: number,
mentionedBy?: any,
tts: boolean,
mentions: string[],
roleMentions: string[],
channelMentions: string[],
}) => void): this;
public on(event: "presenceUpdate", listener: (other: Member | Relationship, oldPresence?: {
status: string,
game?: {
name: string,
type: number,
url?: string,
},
}) => void): this;
public on(event: "rawWS" | "unknown", listener: (packet: RawPacket, id: number) => void): this;
public on(event: "relationshipAdd" | "relationshipRemove", listener: (relationship: Relationship) => void): this;
public on(
event: "relationshipUpdate",
listener: (relationship: Relationship, oldRelationship: { type: number }) => void,
): this;
public on(event: "shardDisconnect" | "error", listener: (err: Error, id: number) => void): this;
public on(event: "shardReady" | "shardResume" | "shardPreReady" | "connect", listener: (id: number) => void): this;
public on(event: "typingStart", listener: (channel: TextableChannel, user: User) => void): this;
public on(event: "unavailableGuildCreate", listener: (guild: UnavailableGuild) => void): this;
public on(
event: "userUpdate",
listener: (user: User, oldUser: { username: string, discriminator: string, avatar?: string }) => void,
): this;
public on(event: "voiceChannelJoin", listener: (member: Member, newChannel: VoiceChannel) => void): this;
public on(event: "voiceChannelLeave", listener: (member: Member, oldChannel: VoiceChannel) => void): this;
public on(
event: "voiceChannelSwitch",
listener: (member: Member, newChannel: VoiceChannel, oldChannel: VoiceChannel) => void,
): this;
public on(
event: "voiceStateUpdate",
listener: (
member: Member,
oldState: { mute: boolean, deaf: boolean, selfMute: boolean, selfDeaf: boolean },
) => void,
): this;
public on(event: "warn" | "debug", listener: (message: string, id: number) => void): this;
public toJSON(simple?: boolean): JSONCache;
}
export class VoiceConnection extends EventEmitter implements SimpleJSON {
public id: string;
public channelID: string;
public connecting: boolean;
public ready: boolean;
public playing: boolean;
public paused: boolean;
public volume: number;
public current?: {
startTime: number,
playTime: number,
pausedTimestamp?: number,
pausedTime?: number,
options: VoiceResourceOptions,
};
public constructor(id: string, options?: { shard?: Shard, shared?: boolean, opusOnly?: boolean });
public pause(): void;
public play(resource: ReadableStream | string, options?: VoiceResourceOptions): void;
public receive(type: string): VoiceDataStream;
public resume(): void;
public setVolume(volume: number): void;
public stopPlaying(): void;
public switchChannel(channelID: string): void;
public updateVoiceState(selfMute: boolean, selfDeaf: boolean): void;
// tslint:disable-next-line
public on(event: string, listener: Function): this;
public on(event: "debug" | "warn", listener: (message: string) => void): this;
public on(event: "error" | "disconnect", listener: (err: Error) => void): this;
public on(event: "pong", listener: (latency: number) => void): this;
public on(event: "speakingStart", listener: (userID: string) => void): this;
public toJSON(simple?: boolean): JSONCache;
}
export class SharedStream extends EventEmitter {
public add(connection: VoiceConnection): void;
public play(resource: ReadableStream | string, options: VoiceResourceOptions): void;
public remove(connection: VoiceConnection): void;
public stopPlaying(): void;
}
class VoiceDataStream {
public type: string;
public constructor(type: string);
}
export class VoiceConnectionManager<T extends VoiceConnection> extends Collection<T> implements SimpleJSON { // owo an undocumented class
public constructor(vcObject: new () => T);
public join(guildID: string, channelID: string, options: VoiceResourceOptions): Promise<VoiceConnection>;
public leave(guildID: string): void;
public switch(guildID: string, channelID: string): void;
public toJSON(simple?: boolean): JSONCache;
}
class Base implements SimpleJSON {
public id: string;
public createdAt: number;
public constructor(id: string);
public inspect(): this;
public toJSON(simple?: boolean): JSONCache;
}
export class Bucket {
public tokens: number;
public lastReset: number;
public lastSend: number;
public tokenLimit: number;
public interval: number;
public constructor(tokenLimit: number, interval: number, latencyRef: { latency: number });
// tslint:disable-next-line
public queue(func: Function): void;
}
export class Collection<T extends { id: string | number }> extends Map<string | number, T> {
public baseObject: new (...args: any[]) => T;
public limit?: number;
public constructor(baseObject: new (...args: any[]) => T, limit?: number);
public add(obj: T, extra?: any, replace?: boolean): T;
public find(func: (i: T) => boolean): T;
public random(): T;
public filter(func: (i: T) => boolean): T[];
public map<R>(func: (i: T) => R): R[];
public update(obj: T, extra?: any, replace?: boolean): T;
public remove(obj: T | { id: string }): T;
}
export class Call extends Base {
public id: string;
public createdAt: number;
public channel: GroupChannel;
public voiceStates: Collection<VoiceState>;
public participants: string[];
public endedTimestamp?: number;
public ringing?: string[];
public region?: string;
public unavailable: boolean;
public constructor(data: BaseData, channel: GroupChannel);
}
export class Channel extends Base {
public id: string;
public mention: string;
public type: number;
public createdAt: number;
public constructor(data: BaseData);
}
export class ExtendedUser extends User {
public email: string;
public verified: boolean;
public mfaEnabled: boolean;
}
export class GroupChannel extends PrivateChannel {
public recipients: Collection<User>;
public name: string;
public icon?: string;
public iconURL?: string;
public ownerID: string;
public edit(options: { name?: string, icon?: string, ownerID?: string }): Promise<GroupChannel>;
public addRecipient(userID: string): Promise<void>;
public removeRecipient(userID: string): Promise<void>;
public dynamicIconURL(format: string, size: number): string;
}
export class Guild extends Base {
public id: string;
public createdAt: number;
public name: string;
public verificationLevel: number;
public region: string;
public icon?: string;
public afkChannelID?: string;
public systemChannelID?: string;
public afkTimeout: number;
public defaultNotifications: number;
public mfaLevel: number;
public joinedAt: number;
public ownerID: string;
public splash?: string;
public unavailable: boolean;
public large: boolean;
public maxPresences: number;
public channels: Collection<AnyGuildChannel>;
public members: Collection<Member>;
public memberCount: number;
public roles: Collection<Role>;
public shard: Shard;
public features: string[];
public emojis: Emoji[];
public iconURL?: string;
public explicitContentFilter: number;
public constructor(data: BaseData, client: Client);
public fetchAllMembers(): void;
public dynamicIconURL(format: string, size: number): string;
public createChannel(name: string, type: string, parentID?: string): Promise<AnyGuildChannel>;
public createEmoji(
options: { name: string, image: string, roles?: string[] },
reason?: string,
): Promise<EmojiOptions>;
public editEmoji(
emojiID: string,
options: { name: string, roles?: string[] },
reason?: string,
): Promise<EmojiOptions>;
public deleteEmoji(emojiID: string, reason?: string): Promise<void>;
public createRole(options: RoleOptions, reason?: string): Promise<Role>;
public getPruneCount(days: number): Promise<number>;
public pruneMembers(days: number, reason?: string): Promise<number>;
public getRESTChannels(): Promise<AnyGuildChannel[]>;
public getRESTEmojis(): Promise<Emoji[]>;
public getRESTEmoji(emojiID: string): Promise<Emoji>;
public getRESTMembers(limit?: number, after?: string): Promise<Member[]>;
public getRESTMember(memberID: string): Promise<Member>;
public getRESTRoles(): Promise<Role[]>;
public getEmbed(): Promise<GuildEmbed>;
public getVoiceRegions(): Promise<VoiceRegion[]>;
public editRole(roleID: string, options: RoleOptions): Promise<Role>;
public deleteRole(roleID: string): Promise<void>;
public getAuditLogs(limit?: number, before?: string, actionType?: number): Promise<GuildAuditLog>;
public getIntegrations(): Promise<GuildIntegration>;
public editIntegration(integrationID: string, options: IntegrationOptions): Promise<void>;
public syncIntegration(integrationID: string): Promise<void>;
public deleteIntegration(integrationID: string): Promise<void>;
public getInvites(): Promise<Invite[]>;
public editMember(memberID: string, options: MemberOptions, reason?: string): Promise<void>;
public addMemberRole(memberID: string, roleID: string, reason?: string): Promise<void>;
public removeMemberRole(memberID: string, roleID: string, reason?: string): Promise<void>;
public kickMember(userID: string, reason?: string): Promise<void>;
public banMember(userID: string, deleteMessageDays?: number, reason?: string): Promise<void>;
public unbanMember(userID: string, reason?: string): Promise<void>;
public edit(
options: GuildOptions, reason?: string,
): Promise<Guild>;
public delete(): Promise<void>;
public leave(): Promise<void>;
public getBans(): Promise<User[]>;
public editNickname(nick: string): Promise<void>;
public getWebhooks(): Promise<Webhook[]>;
}
export class GuildAuditLogEntry extends Base {
public id: string;
public guild: Guild;
public actionType: number;
public reason?: string;
public user: User;
public targetID: string;
public target?: Guild | AnyGuildChannel | Member | Invite | Role | any;
public before?: any;
public after?: any;
public count?: number;
public channel?: AnyGuildChannel;
public deleteMemberDays?: number;
public membersRemoved?: number;
public member?: Member | any;
public role?: Role | any;
public constructor(data: BaseData, guild: Guild);
}
export class GuildChannel extends Channel {
public guild: Guild;
public parentID?: string;
public name: string;
public position: number;
public permissionOverwrites: Collection<PermissionOverwrite>;
public nsfw: boolean;
public constructor(data: BaseData, guild: Guild);
public getInvites(): Promise<Invite[]>;
public createInvite(options?: CreateInviteOptions, reason?: string): Promise<Invite>;
public permissionsOf(memberID: string): Permission;
public edit(
options: {
name?: string,
topic?: string,
bitrate?: number,
userLimit?: number,
nsfw?: boolean,
},
reason?: string,
): Promise<AnyGuildChannel>;
public editPosition(position: number): Promise<void>;
public delete(reason?: string): Promise<void>;
public editPermission(
overwriteID: string,
allow: number,
deny: number,
type: string,
reason?: string,
): Promise<PermissionOverwrite>;
public deletePermission(overwriteID: string, reason?: string): Promise<void>;
}
export class CategoryChannel extends GuildChannel {
public channels?: Collection<AnyGuildChannel>;
}
export class TextChannel extends GuildChannel implements Textable, Invitable {
public topic?: string;
public lastMessageID: string;
public messages: Collection<Message>;
public constructor(data: BaseData, guild: Guild, messageLimit: number);
public getInvites(): Promise<Invite[]>;
public createInvite(options?: CreateInviteOptions, reason?: string): Promise<Invite>;
public getWebhooks(): Promise<Webhook[]>;
public createWebhook(options: { name: string, avatar: string }, reason?: string): Promise<Webhook>;
public sendTyping(): Promise<void>;
public getMessage(messageID: string): Promise<Message>;
public getMessages(limit?: number, before?: string, after?: string, around?: string): Promise<Message[]>;
public getPins(): Promise<Message[]>;
public createMessage(
content: MessageContent,
file?: MessageFile,
): Promise<Message>;
public editMessage(messageID: string, content: MessageContent): Promise<Message>;
public pinMessage(messageID: string): Promise<void>;
public unpinMessage(messageID: string): Promise<void>;
public getMessageReaction(messageID: string, reaction: string, limit?: number, before?: string, after?: string): Promise<User[]>;
public addMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
public removeMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
public removeMessageReactions(messageID: string): Promise<void>;
public deleteMessage(messageID: string, reason?: string): Promise<void>;
public unsendMessage(messageID: string): Promise<void>;
}
export class VoiceChannel extends GuildChannel implements Invitable {
public bitrate?: number;
public userLimit?: number;
public voiceMembers?: Collection<Member>;
public getInvites(): Promise<Invite[]>;
public createInvite(options: CreateInviteOptions, reason?: string): Promise<Invite>;
public join(options: VoiceResourceOptions): Promise<VoiceConnection>;
public leave(): void;
}
export class GuildIntegration extends Base {
public id: string;
public createdAt: number;
public name: string;
public type: string;
public roleID: string;
public user: User;
public account: { id: string, name: string };
public enabled: boolean;
public syncing: boolean;
public expireBehavior: number;
public expireGracePeriod: number;
public enableEmoticons: boolean;
public subscriberCount: number;
public syncedAt: number;
public constructor(data: BaseData, guild: Guild);
public edit(options: { expireBehavior: string, expireGracePeriod: string, enableEmoticons: string }): Promise<void>;
public delete(): Promise<void>;
public sync(): Promise<void>;
}
export class Invite implements SimpleJSON {
public code: string;
public channel: { id: string, name: string };
public guild: {
id: string,
name: string,
splash?: string,
icon?: string,
textChannelCount?: number,
voiceChannelCount?: number,
};
public inviter?: User;
public uses?: number;
public maxUses?: number;
public maxAge?: number;
public temporary?: boolean;
public createdAt?: number;
public revoked?: boolean;
public presenceCount?: number;
public memberCount?: number;
public constructor(data: BaseData, client: Client);
public delete(reason?: string): Promise<void>;
public toJSON(simple?: boolean): JSONCache;
}
export class Member extends Base {
public id: string;
public mention: string;
public guild: Guild;
public joinedAt: number;
public status: string;
public game?: GamePresence;
public voiceState: VoiceState;
public nick?: string;
public roles: string[];
public user: User;
public permission: Permission;
public defaultAvatar: string;
public createdAt: number;
public bot: boolean;
public username: string;
public discriminator: string;
public avatar?: string;
public defaultAvatarURL: string;
public avatarURL: string;
public staticAvatarURL: string;
public constructor(data: BaseData, guild: Guild);
public edit(
options: MemberOptions, reason?: string,
): Promise<void>;
public addRole(roleID: string, reason?: string): Promise<void>;
public removeRole(roleID: string, reason?: string): Promise<void>;
public kick(reason?: string): Promise<void>;
public ban(deleteMessageDays?: number, reason?: string): Promise<void>;
public unban(reason?: string): Promise<void>;
}
export class Message extends Base {
public id: string;
public createdAt: number;
public channel: TextableChannel;
public timestamp: number;
public type: number;
public author: User;
public member?: Member;
public mentions: User[];
public content: string;
public cleanContent?: string;
public roleMentions: string[];
public channelMentions?: string[];
public editedTimestamp?: number;
public tts: boolean;
public mentionEveryone: boolean;
public attachments: Attachment[];
public embeds: Embed[];
public reactions: { [s: string]: any, count: number, me: boolean };
public prefix?: string;
public command?: Command;
public constructor(data: BaseData, client: Client);
public edit(content: MessageContent): Promise<Message>;
public pin(): Promise<void>;
public unpin(): Promise<void>;
public getReaction(reaction: string, limit?: number, before?: string, after?: string): Promise<User[]>;
public addReaction(reaction: string, userID?: string): Promise<void>;
public removeReaction(reaction: string, userID?: string): Promise<void>;
public removeReactions(): Promise<void>;
public delete(reason?: string): Promise<void>;
}
export class Permission {
public allow: number;
public deny: number;
public json: { [s: string]: boolean };
public constructor(allow: number, deny: number);
public has(permission: string): boolean;
}
export class PermissionOverwrite extends Permission {
public id: string;
public createdAt: number;
public type: string;
public constructor(data: { allow: number, deny: number });
}
export class PrivateChannel extends Channel implements Textable {
public lastMessageID: string;
public recipient: User;
public messages: Collection<Message>;
public ring(recipient: string[]): void;
public syncCall(): void;
public leave(): Promise<void>;
public sendTyping(): Promise<void>;
public getMessage(messageID: string): Promise<Message>;
public getMessages(limit?: number, before?: string, after?: string, around?: string): Promise<Message[]>;
public getPins(): Promise<Message[]>;
public createMessage(
content: MessageContent,
file?: MessageFile,
): Promise<Message>;
public editMessage(messageID: string, content: MessageContent): Promise<Message>;
public pinMessage(messageID: string): Promise<void>;
public unpinMessage(messageID: string): Promise<void>;
public getMessageReaction(messageID: string, reaction: string, limit?: number, before?: string, after?: string): Promise<User[]>;
public addMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
public removeMessageReaction(messageID: string, reaction: string, userID?: string): Promise<void>;
public removeMessageReactions(messageID: string): Promise<void>;
public deleteMessage(messageID: string, reason?: string): Promise<void>;
public unsendMessage(messageID: string): Promise<void>;
}
export class Relationship {
public id: string;
public user: User;
public type: number;
public status: string;
public game?: GamePresence;
public constructor(data: BaseData, client: Client);
}
export class Role extends Base {
public id: string;
public createdAt: number;
public guild: Guild;
public mention: string;
public name: string;
public mentionable: boolean;
public managed: boolean;
public hoist: boolean;
public color: number;
public position: number;
public permissions: Permission;
public json: { [s: string]: boolean };
public constructor(data: BaseData, guild: Guild);
public edit(options: RoleOptions, reason?: string): Promise<Role>;
public editPosition(position: number): Promise<void>;
public delete(reason?: string): Promise<void>;
}
export class UnavailableGuild extends Base {
public id: string;
public createdAt: number;
public unavailable: boolean;
public shard: Shard;
public constructor(data: BaseData, client: Client);
}
export class User extends Base {
public id: string;
public mention: string;
public defaultAvatar: string;
public createdAt: number;
public bot: boolean;
public username: string;
public discriminator: string;
public avatar?: string;
public defaultAvatarURL: string;
public avatarURL: string;
public staticAvatarURL: string;
public constructor(data: BaseData, client: Client);
public dynamicIconURL(format?: string, size?: number): string;
public getDMChannel(): Promise<PrivateChannel>;
public addRelationship(block?: boolean): Promise<void>;
public removeRelationship(): Promise<void>;
public getProfile(): Promise<UserProfile>;
public editNote(note: string): Promise<void>;
public deleteNote(): Promise<void>;
}
export class VoiceState extends Base implements NestedJSON {
public id: string;
public createdAt: number;
public sessionID?: string;
public channelID?: string;
public mute: boolean;
public deaf: boolean;
public suppress: boolean;
public selfMute: boolean;
public selfDeaf: boolean;
public constructor(data: BaseData);
public toJSON(arg?: any, cache?: Array<string | any>): JSONCache;
}
export class Shard extends EventEmitter implements SimpleJSON {
public id: number;
public connecting: boolean;
public ready: boolean;
public discordServerTrace?: string[];
public status: string;
public lastHeartbeatReceived: number;
public lastHeartbeatSent: number;
public latency: number;
public constructor(id: number, client: Client);
public connect(): void;
public disconnect(options?: { reconnect: boolean }): void;
public editAFK(afk: boolean): void;
public editStatus(status?: string, game?: GamePresence): void;
// tslint:disable-next-line
public on(event: string, listener: Function): this;
public on(event: "disconnect", listener: (err: Error) => void): this;
public toJSON(simple?: boolean): JSONCache;
sendWS(op: number, _data: object): void;
}
// TODO: Do we need all properties of Command, as it has a lot of stuff
export class Command {
public subcommands: { [s: string]: Command };
public constructor(label: string, generate: CommandGenerator, options?: CommandOptions);
public registerSubcommandAlias(alias: string, label: string): void;
public registerSubcommand(label: string, generator: CommandGenerator, options?: CommandOptions): void;
public unregisterSubcommand(label: string): void;
}
export class CommandClient extends Client {
public commands: { [s: string]: Command };
public constructor(token: string, options?: ClientOptions, commandOptions?: CommandClientOptions);
public onMessageCreate(msg: Message): void;
public registerGuildPrefix(guildID: string, prefix: string[] | string): void;
public registerCommandAlias(alias: string, label: string): void;
public registerCommand(label: string, generator: CommandGenerator, options?: CommandOptions): Command;
public unregisterCommand(label: string): void;
}
}