import { Connection } from '../../skychat/Connection.js'; import { RoomManager } from '../../skychat/RoomManager.js'; import { Session } from '../../skychat/Session.js'; import { GlobalPlugin } from '../GlobalPlugin.js'; import { SanitizedPlayerChannel } from './PlayerChannel.js'; import { PlayerChannelManager } from './PlayerChannelManager.js'; import { VideoFetcher } from './fetcher/VideoFetcher.js'; /** * */ export declare class PlayerPlugin extends GlobalPlugin { static readonly FETCHERS: { [fetcherName: string]: VideoFetcher; }; static readonly commandName = "player"; static readonly commandAliases: string[]; static readonly defaultDataStorageValue: { channel: null | number; }; readonly rules: { player: { minCount: number; maxCount: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; playerchannelmanage: { minCount: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; playerchannel: { minCount: number; maxCount: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; playersync: { minCount: number; maxCount: number; maxCallsPer10Seconds: number; }; playersearch: { minCount: number; coolDown: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; playerremovevideo: { minCount: number; maxCount: number; coolDown: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; schedule: { minCount: number; maxCount: number; coolDown: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; unschedule: { minCount: number; maxCount: number; coolDown: number; maxCallsPer10Seconds: number; params: { name: string; pattern: RegExp; }[]; }; }; protected storage: { channels: SanitizedPlayerChannel[]; }; readonly channelManager: PlayerChannelManager; constructor(manager: RoomManager); /** * Plugin entry point */ run(alias: string, param: string, connection: Connection): Promise; /** * Return whether a session has the right to play a media * @param session * @returns */ canAddMedia(session: Session): boolean; /** * Return whether a session has the right to manage the schedule * @param session * @returns */ canSchedule(session: Session): boolean; /** * Manage channels (Only for OP) * @param param * @param connection * @returns */ private handlePlayerChannelManage; /** * Join or leave channels (For anyone) * @param param * @param connection * @returns */ private handlePlayerChannel; /** * Synchronize this connection * @param param * @param connection * @returns */ private handlePlayerSync; /** * Search video/playlists from YT * @param param * @param connection * @returns */ private handlePlayerSearch; /** * Remove a given media from the list * @param param * @param connection */ private handlePlayerRemoveVideo; /** * Schedule a video to play * @param param * @param connection * @returns */ private handlePlayerSchedule; /** * Unschedule a media * @param param * @param connection * @returns */ private handlePlayerUnschedule; /** * Add a video to the queue * @param param * @param connection * @returns */ private handlePlayerFetch; /** * Forward requests to the player * @param param * @param connection * @returns */ private handlePlayer; /** * @hook When a connection is created, send to this connection the list of channels */ onNewConnection(connection: Connection): Promise; /** * @hook When a connection is closed, cleanup the session if required */ onConnectionClosed(connection: Connection): Promise; }