462 lines
17 KiB
JavaScript
Raw Normal View History

2023-08-13 16:48:04 +03:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.InlineQueryResultBuilder = void 0;
function inputMessage(queryTemplate) {
return {
...queryTemplate,
...inputMessageMethods(queryTemplate),
};
}
function inputMessageMethods(queryTemplate) {
return {
text(message_text, options = {}) {
const content = {
message_text,
...options,
};
return { ...queryTemplate, input_message_content: content };
},
location(latitude, longitude, options = {}) {
const content = {
latitude,
longitude,
...options,
};
return { ...queryTemplate, input_message_content: content };
},
venue(title, latitude, longitude, address, options) {
const content = {
title,
latitude,
longitude,
address,
...options,
};
return { ...queryTemplate, input_message_content: content };
},
contact(first_name, phone_number, options = {}) {
const content = {
first_name,
phone_number,
...options,
};
return { ...queryTemplate, input_message_content: content };
},
invoice(title, description, payload, provider_token, currency, prices, options = {}) {
const content = {
title,
description,
payload,
provider_token,
currency,
prices,
...options,
};
return { ...queryTemplate, input_message_content: content };
},
};
}
/**
* Holds a number of helper methods for building `InlineQueryResult*` objects.
*
* For example, letting the user pick one out of three photos can be done like
* this.
*
* ```ts
* const results = [
* InlineQueryResultBuilder.photo('id0', 'https://grammy.dev/images/Y.png'),
* InlineQueryResultBuilder.photo('id1', 'https://grammy.dev/images/Y.png'),
* InlineQueryResultBuilder.photo('id2', 'https://grammy.dev/images/Y.png'),
* ];
* await ctx.answerInlineQuery(results)
* ```
*
* If you want the message content to be different from the content in the
* inline query result, you can perform another method call on the resulting
* objects.
*
* ```ts
* const results = [
* InlineQueryResultBuilder.photo("id0", "https://grammy.dev/images/Y.png")
* .text("Picked photo 0!"),
* InlineQueryResultBuilder.photo("id1", "https://grammy.dev/images/Y.png")
* .text("Picked photo 1!"),
* InlineQueryResultBuilder.photo("id2", "https://grammy.dev/images/Y.png")
* .text("Picked photo 2!"),
* ];
* await ctx.answerInlineQuery(results)
* ```
*
* Be sure to check the
* [documentation](https://core.telegram.org/bots/api#inline-mode) on inline
* mode.
*/
exports.InlineQueryResultBuilder = {
/**
* Builds an InlineQueryResultArticle object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultarticle. Requires you
* to specify the actual message content by calling another function on the
* object returned from this method.
*
* @param id Unique identifier for this result, 1-64 Bytes
* @param title Title of the result
* @param options Remaining options
*/
article(id, title, options = {}) {
return inputMessageMethods({ type: "article", id, title, ...options });
},
/**
* Builds an InlineQueryResultAudio object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultaudio.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title
* @param audio_url A valid URL for the audio file
* @param options Remaining options
*/
audio(id, title, audio_url, options = {}) {
return inputMessage({
type: "audio",
id,
title,
audio_url: typeof audio_url === "string"
? audio_url
: audio_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedAudio object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedaudio.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param audio_file_id A valid file identifier for the audio file
* @param options Remaining options
*/
audioCached(id, audio_file_id, options = {}) {
return inputMessage({ type: "audio", id, audio_file_id, ...options });
},
/**
* Builds an InlineQueryResultContact object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcontact.
*
* @param id Unique identifier for this result, 1-64 Bytes
* @param phone_number Contact's phone number
* @param first_name Contact's first name
* @param options Remaining options
*/
contact(id, phone_number, first_name, options = {}) {
return inputMessage({ type: "contact", id, phone_number, first_name, ...options });
},
/**
* Builds an InlineQueryResultDocument object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultdocument with
* mime_type set to "application/pdf".
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param document_url A valid URL for the file
* @param options Remaining options
*/
documentPdf(id, title, document_url, options = {}) {
return inputMessage({
type: "document",
mime_type: "application/pdf",
id,
title,
document_url: typeof document_url === "string"
? document_url
: document_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultDocument object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultdocument with
* mime_type set to "application/zip".
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param document_url A valid URL for the file
* @param options Remaining options
*/
documentZip(id, title, document_url, options = {}) {
return inputMessage({
type: "document",
mime_type: "application/zip",
id,
title,
document_url: typeof document_url === "string"
? document_url
: document_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedDocument object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcacheddocument.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param document_file_id A valid file identifier for the file
* @param options Remaining options
*/
documentCached(id, title, document_file_id, options = {}) {
return inputMessage({ type: "document", id, title, document_file_id, ...options });
},
/**
* Builds an InlineQueryResultGame object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultgame.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param game_short_name Short name of the game
* @param options Remaining options
*/
game(id, game_short_name, options = {}) {
return { type: "game", id, game_short_name, ...options };
},
/**
* Builds an InlineQueryResultGif object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultgif.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param gif_url A valid URL for the GIF file. File size must not exceed 1MB
* @param thumbnail_url URL of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result
* @param options Remaining options
*/
gif(id, gif_url, thumbnail_url, options = {}) {
return inputMessage({
type: "gif",
id,
gif_url: typeof gif_url === "string" ? gif_url : gif_url.href,
thumbnail_url: typeof thumbnail_url === "string"
? thumbnail_url
: thumbnail_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedGif object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedgif.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param gif_file_id A valid file identifier for the GIF file
* @param options Remaining options
*/
gifCached(id, gif_file_id, options = {}) {
return inputMessage({ type: "gif", id, gif_file_id, ...options });
},
/**
* Builds an InlineQueryResultLocation object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultlocation.
*
* @param id Unique identifier for this result, 1-64 Bytes
* @param title Location title
* @param latitude Location latitude in degrees
* @param longitude Location longitude in degrees
* @param options Remaining options
*/
location(id, title, latitude, longitude, options = {}) {
return inputMessage({ type: "location", id, title, latitude, longitude, ...options });
},
/**
* Builds an InlineQueryResultMpeg4Gif object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultmpeg4gif.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param mpeg4_url A valid URL for the MPEG4 file. File size must not exceed 1MB
* @param thumbnail_url URL of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result
* @param options Remaining options
*/
mpeg4gif(id, mpeg4_url, thumbnail_url, options = {}) {
return inputMessage({
type: "mpeg4_gif",
id,
mpeg4_url: typeof mpeg4_url === "string"
? mpeg4_url
: mpeg4_url.href,
thumbnail_url: typeof thumbnail_url === "string"
? thumbnail_url
: thumbnail_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedMpeg4Gif object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedmpeg4gif.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param mpeg4_file_id A valid file identifier for the MPEG4 file
* @param options Remaining options
*/
mpeg4gifCached(id, mpeg4_file_id, options = {}) {
return inputMessage({ type: "mpeg4_gif", id, mpeg4_file_id, ...options });
},
/**
* Builds an InlineQueryResultPhoto object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultphoto with the
* thumbnail defaulting to the photo itself.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param photo_url A valid URL of the photo. Photo must be in JPEG format. Photo size must not exceed 5MB
* @param options Remaining options
*/
photo(id, photo_url, options = {
thumbnail_url: typeof photo_url === "string"
? photo_url
: photo_url.href,
}) {
return inputMessage({
type: "photo",
id,
photo_url: typeof photo_url === "string"
? photo_url
: photo_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedPhoto object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedphoto.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param photo_file_id A valid file identifier of the photo
* @param options Remaining options
*/
photoCached(id, photo_file_id, options = {}) {
return inputMessage({ type: "photo", id, photo_file_id, ...options });
},
/**
* Builds an InlineQueryResultCachedSticker object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedsticker.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param sticker_file_id A valid file identifier of the sticker
* @param options Remaining options
*/
stickerCached(id, sticker_file_id, options = {}) {
return inputMessage({ type: "sticker", id, sticker_file_id, ...options });
},
/**
* Builds an InlineQueryResultVenue object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultvenue.
*
* @param id Unique identifier for this result, 1-64 Bytes
* @param title Title of the venue
* @param latitude Latitude of the venue location in degrees
* @param longitude Longitude of the venue location in degrees
* @param address Address of the venue
* @param options Remaining options
*/
venue(id, title, latitude, longitude, address, options = {}) {
return inputMessage({
type: "venue",
id,
title,
latitude,
longitude,
address,
...options,
});
},
/**
* Builds an InlineQueryResultVideo object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultvideo with mime_type
* set to "text/html". This will send an embedded video player. Requires you
* to specify the actual message content by calling another function on the
* object returned from this method.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param video_url A valid URL for the embedded video player
* @param thumbnail_url URL of the thumbnail (JPEG only) for the video
* @param options Remaining options
*/
videoHtml(id, title, video_url, thumbnail_url, options = {}) {
// require input message content by only returning methods
return inputMessageMethods({
type: "video",
mime_type: "text/html",
id,
title,
video_url: typeof video_url === "string"
? video_url
: video_url.href,
thumbnail_url: typeof thumbnail_url === "string"
? thumbnail_url
: thumbnail_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultVideo object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultvideo with mime_type
* set to "video/mp4".
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param video_url A valid URL for the video file
* @param thumbnail_url URL of the thumbnail (JPEG only) for the video
* @param options Remaining options
*/
videoMp4(id, title, video_url, thumbnail_url, options = {}) {
return inputMessage({
type: "video",
mime_type: "video/mp4",
id,
title,
video_url: typeof video_url === "string"
? video_url
: video_url.href,
thumbnail_url: typeof thumbnail_url === "string"
? thumbnail_url
: thumbnail_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedVideo object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedvideo.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Title for the result
* @param video_file_id A valid file identifier for the video file
* @param options Remaining options
*/
videoCached(id, title, video_file_id, options = {}) {
return inputMessage({ type: "video", id, title, video_file_id, ...options });
},
/**
* Builds an InlineQueryResultVoice object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultvoice.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Voice message title
* @param voice_url A valid URL for the voice recording
* @param options Remaining options
*/
voice(id, title, voice_url, options = {}) {
return inputMessage({
type: "voice",
id,
title,
voice_url: typeof voice_url === "string"
? voice_url
: voice_url.href,
...options,
});
},
/**
* Builds an InlineQueryResultCachedVoice object as specified by
* https://core.telegram.org/bots/api#inlinequeryresultcachedvoice.
*
* @param id Unique identifier for this result, 1-64 bytes
* @param title Voice message title
* @param voice_file_id A valid file identifier for the voice message
* @param options Remaining options
*/
voiceCached(id, title, voice_file_id, options = {}) {
return inputMessage({ type: "voice", id, title, voice_file_id, ...options });
},
};