import { tl } from '../../../tl/index.js';
import { ITelegramClient } from '../../client.types.js';
import { Message } from '../../types/messages/message.js';
import { TextWithEntities } from '../../types/misc/entities.js';
import { InputPeerLike } from '../../types/peers/index.js';
export interface CommonSendParams {
    /**
     * Message to reply to. Either a message object or message ID.
     *
     * For forums - can also be an ID of the topic (i.e. its top message ID)
     *
     * Can also be a message from another chat, in which case a quote will be sent.
     */
    replyTo?: number | Message;
    /**
     * If this is a reply to a specific todo item, ID of that item
     */
    replyToTodoItem?: number;
    /**
     * If this is a reply to a specific poll option, ID of that option
     */
    replyToPollOption?: Uint8Array;
    /**
     * When the chat is a monoforum you are an admin of, you **must** pass an
     * ID of a peer you are sending the message to.
     *
     * Otherwise, you will get a `REPLY_TO_MONOFORUM_PEER_INVALID` error.
     */
    toMonoforumPeer?: InputPeerLike;
    /**
     * Whether to throw an error if {@link replyTo}
     * message does not exist.
     *
     * If that message was not found, `NotFoundError` is thrown,
     * with `text` set to `MESSAGE_NOT_FOUND`.
     *
     * Incurs an additional request, so only use when really needed.
     *
     * @default  `false`
     */
    mustReply?: boolean;
    /**
     * Message to comment to. Either a message object or message ID.
     *
     * This overwrites `replyTo` if it was passed
     */
    commentTo?: number | Message;
    /**
     * Story to reply to.
     *
     * Must be the story sent by the peer you are sending the message to.
     *
     * Can't be used together with {@link replyTo} or {@link commentTo}.
     */
    replyToStory?: number;
    /**
     * Quoted text. Must be exactly contained in the message
     * being quoted to be accepted by the server (as well as entities)
     */
    quote?: TextWithEntities;
    /**
     * Offset of the start of the quote in the message.
     */
    quoteOffset?: number;
    /**
     * Whether to send this message silently.
     */
    silent?: boolean;
    /**
     * If set, the message will be scheduled to this date.
     * When passing a number, a UNIX time in ms is expected.
     *
     * You can also pass `online` - this will send the message
     * once the peer is online. Note that this requires that
     * peer's online status to be visible to you.
     */
    schedule?: Date | number | 'online';
    /**
     * Whether to clear draft after sending this message.
     *
     * @default  `false`
     */
    clearDraft?: boolean;
    /**
     * Whether to disallow further forwards of this message.
     *
     * Only for bots, works even if the target chat does not
     * have content protection.
     */
    forbidForwards?: boolean;
    /**
     * Peer to use when sending the message.
     */
    sendAs?: InputPeerLike;
    /**
     * If passed, instead of sending the message, it will be saved into the
     * given quick reply shortcut (either its ID or its shortcut string).
     */
    quickReply?: number | string;
    /**
     * Whether to dispatch the returned message to the client's update handler.
     * Doesn't follow `disableNoDispatch`
     */
    shouldDispatch?: true;
    /**
     * Unique identifier of the business connection on behalf of which
     * the message will be sent
     */
    businessConnectionId?: string;
    /**
     * Bots only: if set, allows sending up to 1000 messages per second,
     * ignoring broadcasting limits for a fee of 0.1 Telegram Stars per message.
     * The Stars will be withdrawn from the bot's balance.
     */
    allowPaidFloodskip?: boolean;
    /**
     * Whether to allow payment for messages.
     * If set, the value represents the maximum number of stars to be paid
     */
    allowPaidMessages?: tl.Long;
    abortSignal?: AbortSignal;
    /**
     * ID of a message effect to use when sending the message
     * (see {@link TelegramClient.getAvailableMessageEffects})
     */
    effect?: tl.Long;
}
/**
 * @internal
 * @noemit
 */
export declare function _normalizeQuickReplyShortcut(shortcut: number | string | undefined): tl.TypeInputQuickReplyShortcut | undefined;
/**
 * @internal
 * @noemit
 */
export declare function _processCommonSendParameters(client: ITelegramClient, chatId: InputPeerLike, params: CommonSendParams): Promise<{
    peer: tl.TypeInputPeer;
    replyTo: tl.TypeInputReplyTo | undefined;
    scheduleDate: number | undefined;
    quickReplyShortcut: tl.TypeInputQuickReplyShortcut | undefined;
    chainId: string;
}>;
