export declare class DiscordPoller { private readonly botToken; private readonly channelId; private lastMessageId; private queue; private readonly owners; private _onCommand; setOnCommand(cb: (cmd: string) => void): void; /** * @param botToken Discord bot token * @param channelId Discord channel snowflake ID * @param ownersStr Comma-separated list of usernames or user IDs allowed to send tasks */ constructor(botToken: string, channelId: string, ownersStr: string); /** * Seed lastMessageId with the current latest message in the channel so that * only messages arriving AFTER this point are treated as new tasks. * Call this once before starting the polling loop. */ initialize(): Promise; /** * Poll the channel for new messages and append the first queued task to TODO.md. * Returns true if a task was appended (caller should break out of its wait sleep). */ pollAndAppend(todoPath: string, workspaceRoot?: string): Promise; private _fetchNewMessages; private _drainQueue; }