import type { DiscordAccessor } from '../../accessor/discord.ts';
import { type ByteSource } from '../../io/types.ts';
import type { DirListing, FileStat, PathSpec } from '../../types.ts';
import { BaseVFS } from '../base.ts';
import type { Handed } from '../types.ts';
export declare const VFS_MD = "```text\n{prefix}\n  <guild-name>__<guild-id>/\n    channels/\n      <channel-name>__<channel-id>/\n        <yyyy-mm-dd>/\n          chat.jsonl                # messages for that date\n          files/                    # attachments shared that day\n            <name>__<att-id>.<ext>  # cat downloads it from Discord's CDN\n    members/\n      <username>__<user-id>.json    # member profile\n```\n\n- A guild, channel, member or attachment name is `<display-name>__<id>`.\n  The display name keeps Discord's spelling (spaces, apostrophes, emoji);\n  only `/` becomes `\u2215` (U+2215). `ls` the parent first to find exact\n  names, and quote a name that has spaces.\n- Messages are JSONL; use `jq` for fields such as `.content`,\n  `.author.username` and `.attachments`. A day's `files/` may be empty.\n- Without `start_time`/`end_time`, a channel lists the latest 30 days up\n  to its newest message; a date glob finds earlier days.\n- With `start_time`/`end_time`, listings cover that scope; messages and\n  attachments outside it are absent, direct paths included. Users and\n  channel metadata stay available as context.\n- `grep` and `rg` read the files they reach, so `grep` needs `-r` for a\n  directory. Under a channel that reads every listed day, attachments\n  included: they download from the CDN, and binary ones such as JPG or\n  PDF produce noise.";
/**
 * Discord's functions over its accessor, which the node and browser
 * packages build over their own transport.
 */
export declare class DiscordVFS extends BaseVFS<DiscordAccessor> {
    readonly readsRanges: boolean;
    readonly handed: {
        readonly readdir: readonly ["entry"];
        readonly read: readonly ["entry", "parent"];
        readonly follow: readonly ["entry", "parent"];
        readonly readMany: readonly ["entry", "parent"];
        readonly stat: readonly ["entry", "parent"];
    };
    readdir(path: PathSpec, handed?: Handed): Promise<FileStat[] | DirListing>;
    read(path: PathSpec, handed?: Handed, offset?: number, size?: number | null, signal?: AbortSignal): Promise<ByteSource> | AsyncIterable<Uint8Array>;
    readMany(paths: PathSpec[], limit: number, handed?: readonly Handed[]): Promise<Map<string, Uint8Array>>;
    follow(path: PathSpec, n: number, interval: number, handed?: Handed): Promise<AsyncIterable<Uint8Array> | null>;
    stat(path: PathSpec, handed?: Handed): Promise<FileStat>;
}
//# sourceMappingURL=discord.d.ts.map