DefinitelyTyped/types/plugapi/index.d.ts
2019-02-12 14:36:28 -08:00

416 lines
12 KiB
TypeScript

// Type definitions for plugapi 4.2
// Project: https://github.com/plugcubed/plugapi
// Definitions by: Brice Theurillat <https://github.com/BNedry>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare namespace PlugAPI {
interface PlugLogin {
email: string;
password: string;
}
interface Notification {
action: string;
id: number;
timestamp: string;
value: string;
}
interface RawChatMessage {
cid: string;
message: string;
sub: number;
uid: number;
un: string;
}
interface Media {
author: string;
format: number;
image: string;
cid: string;
duration: number;
title: string;
id: number;
}
interface Score {
positive: number;
listeners: number;
grabs: number;
negative: number;
skipped: number;
}
interface LastPlay {
dj: User.DJ;
media: Media;
score: Score;
}
interface FollowJoinData {
r: number;
un: string;
id: string;
}
interface LogObject {
log(): void;
}
namespace User {
interface Default {
username: string;
language: string;
avatarID: string;
}
interface Extended extends Default {
status: number;
fans: number;
listenerPoints: number;
id: string;
curatorPoints: number;
djPoints: number;
}
interface Update extends Extended {
dateJoined: string;
}
interface Room extends Default {
sub: number;
level: number;
joined: string;
id: number;
badge: string;
role: number;
gRole: number;
slug: string;
}
interface User extends Room {
silver: boolean;
guest: boolean;
}
interface DJ extends Room {
blurp: any;
grab: boolean;
status: number;
vote: number;
}
interface Audience extends DJ {
ignores: any[];
notifications: Notification[];
pp: number;
pw: number;
xp: number;
}
}
namespace Enum {
interface RoomRole {
NONE: number;
RESIDENTDJ: number;
BOUNCER: number;
MANAGER: number;
COHOST: number;
HOST: number;
}
interface GlobalRole {
NONE: number;
VOLUNTEER: number;
AMBASSADOR: number;
LEADER: number;
ADMIN: number;
}
interface Status {
OFFLINE: number;
ONLINE: number;
}
interface Ban {
HOUR: "h";
DAY: "d";
PERMA: "f";
}
interface BanReason {
SPAMMING_TROLLING: number;
VERBAL_ABUSE: number;
OFFENSIVE_MEDIA: number;
INAPPROPRIATE_GENRE: number;
NEGATIVE_ATTITUDE: number;
}
interface Mute {
SHORT: "s";
MEDIUM: "m";
LONG: "l";
}
interface MuteReason {
VIOLATING_COMMUNITY_RULES: number;
VERBAL_ABUSE: number;
SPAMMING_TROLLING: number;
OFFENSIVE_LANGUAGE: number;
NEGATIVE_ATTITUDE: number;
}
interface Events {
ADVANCE: "advance";
BAN: "ban";
BOOTH_LOCKED: "boothLocked";
CHAT: "chat";
CHAT_COMMAND: "command";
CHAT_DELETE: "chatDelete";
CHAT_LEVEL_UPDATE: "roomMinChatLevelUpdate";
COMMAND: "command";
DJ_LIST_CYCLE: "djListCycle";
DJ_LIST_UPDATE: "djListUpdate";
DJ_LIST_LOCKED: "djListLocked";
EARN: "earn";
FOLLOW_JOIN: "followJoin";
FLOOD_CHAT: "floodChat";
FRIEND_REQUEST: "friendRequest";
GIFTED: "gifted";
GRAB: "grab";
KILL_SESSION: "killSession";
MAINT_MODE: "plugMaintenance";
MAINT_MODE_ALERT: "plugMaintenanceAlert";
MODERATE_ADD_DJ: "modAddDJ";
MODERATE_ADD_WAITLIST: "modAddWaitList";
MODERATE_AMBASSADOR: "modAmbassador";
MODERATE_BAN: "modBan";
MODERATE_MOVE_DJ: "modMoveDJ";
MODERATE_MUTE: "modMute";
MODERATE_REMOVE_DJ: "modRemoveDJ";
MODERATE_REMOVE_WAITLIST: "modRemoveWaitList";
MODERATE_SKIP: "modSkip";
MODERATE_STAFF: "modStaff";
NOTIFY: "notify";
PDJ_MESSAGE: "pdjMessage";
PDJ_UPDATE: "pdjUpdate";
PING: "ping";
PLAYLIST_CYCLE: "playlistCycle";
REQUEST_DURATION: "requestDuration";
REQUEST_DURATION_RETRY: "requestDurationRetry";
ROOM_CHANGE: "roomChanged";
ROOM_DESCRIPTION_UPDATE: "roomDescriptionUpdate";
ROOM_JOIN: "roomJoin";
ROOM_NAME_UPDATE: "roomNameUpdate";
ROOM_VOTE_SKIP: "roomVoteSkip";
ROOM_WELCOME_UPDATE: "roomWelcomeUpdate";
SESSION_CLOSE: "sessionClose";
SKIP: "skip";
STROBE_TOGGLE: "strobeToggle";
USER_COUNTER_UPDATE: "userCounterUpdate";
USER_FOLLOW: "userFollow";
USER_JOIN: "userJoin";
USER_LEAVE: "userLeave";
USER_UPDATE: "userUpdate";
VOTE: "vote";
}
}
namespace Event {
interface BoothCycle {
moderator: string;
cycle: boolean;
}
interface BoothLocked {
m: string;
c: boolean;
ml: string;
f: boolean;
}
interface Chat {
raw: RawChatMessage;
id: string;
from: User.User;
message: string;
mentions: any[];
muted: boolean;
type: string;
}
interface ChatDelete {
mi: number;
chatID: string;
}
type Grab = number;
interface Advance {
media: Media;
startTime: string;
historyID: string;
djs: User.DJ[];
currentDJ: User.DJ;
playlistID: number;
lastPlay: LastPlay;
}
interface DJListUpdate {
djs: User.DJ[];
remove: string;
}
interface Emote {
fromID: string;
message: string;
from: string;
type: string;
chatID: string;
}
interface FollowJoin {
data: FollowJoinData;
type: string;
}
interface ModAddDJ {
moderator: string;
username: string;
}
interface ModBan {
moderator: string;
username: string;
duration: number;
ref: string;
reason: string;
}
interface ModMoveDJ {
moderator: string;
index: number;
old: number;
userID: string;
}
interface ModRemoveDJ {
moderator: string;
username: string;
userID: string;
}
interface ModSkip {
mi: number;
m: string;
}
interface RoomMinChatLevelUpdate {
level: number;
id: number;
user: User.User;
}
type RoomJoin = string;
type UserJoin = User.User;
type UserLeave = User.User;
interface UserUpdate {
username: string;
status: number;
fans: number;
listenerPoints: number;
dateJoined: string;
language: string;
avatarID: string;
id: string;
curatorPoints: number;
djPoints: number;
}
interface Vote {
i: number;
v: number;
}
interface Command extends Chat {
command: string;
args: string[];
respond(...args: any[]): any;
respondTimeout(...args: any[]): any;
havePermission(...args: any[]): boolean;
isFrom(...args: any[]): boolean;
}
}
const ROOM_ROLE: Enum.RoomRole;
const GLOBAL_ROLES: Enum.GlobalRole;
const STATUS: Enum.Status;
const BAN: Enum.Ban;
const BAN_REASON: Enum.BanReason;
const MUTE: Enum.Mute;
const MUTE_REASON: Enum.MuteReason;
const events: Enum.Events;
}
declare class PlugAPI {
constructor(login: PlugAPI.PlugLogin, callback?: (error: Error, bot: PlugAPI) => void | ((bot: PlugAPI) => void));
deleteAllChat: boolean;
multiLine: boolean;
multiLineLimit: number;
connect(room: string): void;
changeDJCycle(enabled: boolean, callback?: () => void): boolean;
changeRoom(room: string, callback?: () => void): void;
close(): void;
getAdmins(): PlugAPI.User.Extended[];
getAmbassadors(): PlugAPI.User.Extended[];
getAudience(): PlugAPI.User.Audience[];
getDJ(): PlugAPI.User.DJ;
getDJs(): PlugAPI.User.DJ[];
getHost(): PlugAPI.User.Extended;
getMedia(): PlugAPI.Media;
getRoomScore(): PlugAPI.Score;
getSelf(): PlugAPI.User.Audience;
getStaff(): PlugAPI.User.Extended[];
getTimeElapsed(): number;
getTimeRemaining(): number;
getUser(userID: number): PlugAPI.User.DJ;
getUsers(): PlugAPI.User.DJ[];
getWaitList(): PlugAPI.User.Extended;
getWaitListPosition(userID: number): number;
havePermission(userID: number, permission: number, global?: boolean): boolean;
joinBooth(callback?: () => void): boolean;
leaveBooth(callback?: () => void): boolean;
selfSkip(callback?: () => void): boolean;
sendChat(msg: string, timeout?: number): void;
setLogger(logObject: PlugAPI.LogObject): boolean;
on(event: "boothCycle", callback: (data: PlugAPI.Event.BoothCycle) => void): void;
on(event: "boothLocked", callback: (data: PlugAPI.Event.BoothLocked) => void): void;
on(event: "chat", callback: (data: PlugAPI.Event.Chat) => void): void;
on(event: "chatDelete", callback: (data: PlugAPI.Event.ChatDelete) => void): void;
on(event: "grab", callback: (data: PlugAPI.Event.Grab) => void): void;
on(event: "advance", callback: (data: PlugAPI.Event.Advance) => void): void;
on(event: "djListUpdate", callback: (data: PlugAPI.Event.DJListUpdate) => void): void;
on(event: "emote", callback: (data: PlugAPI.Event.Emote) => void): void;
on(event: "followJoin", callback: (data: PlugAPI.Event.FollowJoin) => void): void;
on(event: "modAddDJ", callback: (data: PlugAPI.Event.ModAddDJ) => void): void;
on(event: "modBan", callback: (data: PlugAPI.Event.ModBan) => void): void;
on(event: "modMoveDJ", callback: (data: PlugAPI.Event.ModMoveDJ) => void): void;
on(event: "modRemoveDJ", callback: (data: PlugAPI.Event.ModRemoveDJ) => void): void;
on(event: "modSkip", callback: (data: PlugAPI.Event.ModSkip) => void): void;
on(event: "roomMinChatLevelUpdate", callback: (data: PlugAPI.Event.RoomMinChatLevelUpdate) => void): void;
on(event: "roomJoin", callback: (data: PlugAPI.Event.RoomJoin) => void): void;
on(event: "userJoin", callback: (data: PlugAPI.Event.UserJoin) => void): void;
on(event: "userLeave", callback: (data: PlugAPI.Event.UserLeave) => void): void;
on(event: "userUpdate", callback: (data: PlugAPI.Event.UserUpdate) => void): void;
on(event: "vote", callback: (data: PlugAPI.Event.Vote) => void): void;
on(event: "command", callback: (data: PlugAPI.Event.Command) => void): void;
on(event: string, callback: (data: any) => void): void;
}
export = PlugAPI;