discord-voice
Version:
A complete framework to facilitate the tracking of user voice time using discord.js
191 lines (177 loc) • 7.5 kB
TypeScript
declare module "discord-voice" {
import { EventEmitter } from "events";
import { Client, PermissionResolvable, User as DiscordUser, Snowflake, GuildMember, VoiceChannel, Guild } from "discord.js";
export const version: string;
export const author: string;
export const license: string;
export class VoiceManager extends EventEmitter {
constructor(client: Client, options?: VoiceManagerOptions);
public client: Client;
public users: User[];
public configs: Config[];
public options: VoiceManagerOptions;
public ready: boolean;
public createUser(userId: Snowflake, guildId: Snowflake, options: UserOptions): Promise<User>;
public createConfig(guildId: Snowflake, options: ConfigOptions): Promise<Config>;
public removeUser(userId: Snowflake, guildId: Snowflake): Promise<void>;
public removeConfig(guildId: Snowflake): Promise<void>;
public updateUser(userId: Snowflake, guildId: Snowflake, options: UserEditOptions): Promise<User>;
public updateConfig(guildId: Snowflake, options: ConfigEditOptions): Promise<Config>;
public on<K extends keyof VoiceManagerEvents>(event: K, listener: (...args: VoiceManagerEvents[K]) => void): this;
public once<K extends keyof VoiceManagerEvents>(event: K, listener: (...args: VoiceManagerEvents[K]) => void): this;
public emit<K extends keyof VoiceManagerEvents>(event: K, ...args: VoiceManagerEvents[K]): boolean;
}
class User extends EventEmitter {
constructor(manager: VoiceManager, options: UserData);
public manager: VoiceManager;
public client: Client;
public userId: Snowflake;
public guildId: Snowflake;
public voiceTime: UserVoiceTimeOptions;
public levelingData: UserLevelingOptions;
public options: UserOptions;
readonly guild: Guild;
readonly user: DiscordUser;
readonly channelAndMember: channelAndMemberOptions;
readonly channel: VoiceChannel;
readonly member: GuildMember;
readonly data: UserData;
public edit(options: UserEditOptions): Promise<User>;
}
class Config extends EventEmitter {
constructor(manager: VoiceManager, options: ConfigData);
public manager: VoiceManager;
public guildId: Snowflake;
public options: ConfigOptions;
readonly trackBots: boolean;
readonly trackMute: boolean;
readonly trackDeaf: boolean;
readonly trackAllChannels: boolean;
readonly minUserCountToParticipate: number;
readonly maxUserCountToParticipate: number;
readonly minXpToParticipate: number;
readonly minLevelToParticipate: number;
readonly maxXpToParticipate: number;
readonly maxLevelToParticipate: number;
readonly voiceTimeTrackingEnabled: boolean;
readonly levelingTrackingEnabled: boolean;
readonly data: ConfigData;
readonly exemptPermissions: PermissionResolvable[];
readonly exemptMembersFunction: Function | null;
readonly exemptChannelsFunction: Function | null;
readonly xpAmountToAddFunction: Function | null;
readonly voiceTimeToAddFunction: Function | null;
public exemptMembers(member: GuildMember): Promise<boolean>;
public exemptChannels(channel: VoiceChannel): Promise<boolean>;
public xpAmountToAdd(): Promise<number>;
public voiceTimeToAdd(): Promise<number>;
public edit(options: ConfigEditOptions): Promise<Config>;
}
interface VoiceManagerOptions {
userStorage?: string;
configStorage?: string;
checkMembersEvery?: number;
default?: ConfigOptions;
}
interface ConfigOptions {
trackBots?: boolean;
trackAllChannels?: boolean;
exemptChannels?: (channel?: VoiceChannel) => boolean | Promise<boolean>;
channelIds?: Snowflake[];
exemptPermissions?: PermissionResolvable[];
exemptMembers?: (member?: GuildMember) => boolean | Promise<boolean>;
trackMute?: boolean;
trackDeaf?: boolean;
minUserCountToParticipate?: number;
maxUserCountToParticipate?: number;
minXpToParticipate?: number;
minLevelToParticipate?: number;
maxXpToParticipate?: number;
maxLevelToParticipate?: number;
xpAmountToAdd?: () => number | Promise<number>;
voiceTimeToAdd?: () => number | Promise<number>;
voiceTimeTrackingEnabled?: boolean;
levelingTrackingEnabled?: boolean;
levelMultiplier: () => number | Promise<number>;
}
interface ConfigData {
guildId: Snowflake;
trackBots: boolean;
trackAllChannels: boolean;
exemptChannels: (channel?: VoiceChannel) => boolean | Promise<boolean>;
channelIds: Snowflake[];
exemptPermissions: PermissionResolvable[];
exemptMembers: (member?: GuildMember) => boolean | Promise<boolean>;
trackMute: boolean;
trackDeaf: boolean;
minUserCountToParticipate: number;
maxUserCountToParticipate: number;
minXpToParticipate: number;
minLevelToParticipate: number;
maxXpToParticipate: number;
maxLevelToParticipate: number;
xpAmountToAdd: () => number | Promise<number>;
voiceTimeToAdd: () => number | Promise<number>;
voiceTimeTrackingEnabled: boolean;
levelingTrackingEnabled: boolean;
levelMultiplier: () => number | Promise<number>;
}
interface ConfigEditOptions {
newTrackBots?: boolean;
newTrackAllChannels?: boolean;
newExemptChannels?: (channel?: VoiceChannel) => boolean | Promise<boolean>;
newChannelIds?: Snowflake[];
newExemptPermissions?: PermissionResolvable[];
newExemptMembers?: (member?: GuildMember) => boolean | Promise<boolean>;
newTrackMute?: boolean;
newTrackDeaf?: boolean;
newMinUserCountToParticipate?: number;
newMaxUserCountToParticipate?: number;
newMinXpToParticipate?: number;
newMinLevelToParticipate?: number;
newMaxXpToParticipate?: number;
newMaxLevelToParticipate?: number;
newXpAmountToAdd?: () => number | Promise<number>;
newVoiceTimeToAdd?: () => number | Promise<number>;
newVoiceTimeTrackingEnabled?: boolean;
newLevelingTrackingEnabled?: boolean;
newLevelMultiplier: () => number | Promise<number>;
}
interface UserOptions {
voiceTime: {
channels: [String];
total: number;
};
levelingData: {
xp: number;
level: number;
};
}
interface UserVoiceTimeOptions {
channels: [UserOptions];
total: number;
}
interface UserLevelingOptions {
xp: number;
level: number;
}
interface UserData {
userId: Snowflake;
guildId: Snowflake;
voiceTime: UserVoiceTimeOptions;
levelingData: UserLevelingOptions;
}
interface UserEditOptions {
newVoiceTime?: UserVoiceTimeOptions;
newLevelingData?: UserLevelingOptions;
}
interface channelAndMemberOptions {
channel: VoiceChannel;
member: GuildMember;
}
interface VoiceManagerEvents {
userXpAdd: [User, User];
userLevelUp: [User, User];
userVoiceTimeAdd: [User, User];
}
}