462 lines
17 KiB
JavaScript
462 lines
17 KiB
JavaScript
|
"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 });
|
||
|
},
|
||
|
};
|