diff --git a/CHANGELOG.md b/CHANGELOG.md index 02f6cfd..b60ccb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). Added: -1. (#429) Add *TelegramBot#getStickerSet* (by @CapacitorSet, @LibertyLocked) +1. Add methods: + * (#429) Add *TelegramBot#getStickerSet* (by @CapacitorSet, @LibertyLocked) + * (#430) Add *TelegramBot#uploadStickerFile* (by @CapacitorSet) * * * diff --git a/doc/api.md b/doc/api.md index e9add98..8863b19 100644 --- a/doc/api.md +++ b/doc/api.md @@ -76,6 +76,7 @@ TelegramBot * [.answerShippingQuery(shippingQueryId, ok, [options])](#TelegramBot+answerShippingQuery) ⇒ Promise * [.answerPreCheckoutQuery(preCheckoutQueryId, ok, [options])](#TelegramBot+answerPreCheckoutQuery) ⇒ Promise * [.getStickerSet(name, [options])](#TelegramBot+getStickerSet) ⇒ Promise + * [.uploadStickerFile(userId, pngSticker, [options])](#TelegramBot+uploadStickerFile) ⇒ Promise * _static_ * [.Promise](#TelegramBot.Promise) @@ -991,6 +992,21 @@ Use this method to get a sticker set. On success, a [StickerSet](https://core.te | name | String | Name of the sticker set | | [options] | Object | Additional Telegram query options | + + +### telegramBot.uploadStickerFile(userId, pngSticker, [options]) ⇒ Promise +Use this method to upload a .png file with a sticker for later use in *createNewStickerSet* and *addStickerToSet* methods (can be used multiple +times). Returns the uploaded [File](https://core.telegram.org/bots/api#file) on success. + +**Kind**: instance method of [TelegramBot](#TelegramBot) +**See**: https://core.telegram.org/bots/api#uploadstickerfile + +| Param | Type | Description | +| --- | --- | --- | +| userId | Number | User identifier of sticker file owner | +| pngSticker | String | stream.Stream | Buffer | A file path or a Stream. Can also be a `file_id` previously uploaded. **Png** image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. | +| [options] | Object | Additional Telegram query options | + ### TelegramBot.Promise diff --git a/src/telegram.js b/src/telegram.js index d3147e3..cf16922 100644 --- a/src/telegram.js +++ b/src/telegram.js @@ -1512,6 +1512,32 @@ class TelegramBot extends EventEmitter { form.name = name; return this._request('getStickerSet', { form }); } + + /** + * Use this method to upload a .png file with a sticker for later use in *createNewStickerSet* and *addStickerToSet* methods (can be used multiple + * times). Returns the uploaded [File](https://core.telegram.org/bots/api#file) on success. + * + * @param {Number} userId User identifier of sticker file owner + * @param {String|stream.Stream|Buffer} pngSticker A file path or a Stream. Can also be a `file_id` previously uploaded. **Png** image with the + * sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. + * @param {Object} [options] Additional Telegram query options + * @return {Promise} + * @see https://core.telegram.org/bots/api#uploadstickerfile + */ + uploadStickerFile(userId, pngSticker, options = {}) { + const opts = { + qs: options, + }; + opts.qs.user_id = userId; + try { + const sendData = this._formatSendData('png_sticker', pngSticker); + opts.formData = sendData[0]; + opts.qs.png_sticker = sendData[1]; + } catch (ex) { + return Promise.reject(ex); + } + return this._request('uploadStickerFile', opts); + } } module.exports = TelegramBot; diff --git a/test/data/sticker.png b/test/data/sticker.png new file mode 100644 index 0000000..8eb5c98 Binary files /dev/null and b/test/data/sticker.png differ diff --git a/test/telegram.js b/test/telegram.js index 22e7f4a..54d1c8f 100644 --- a/test/telegram.js +++ b/test/telegram.js @@ -1371,4 +1371,18 @@ describe('TelegramBot', function telegramSuite() { }); }); }); + + describe('#uploadStickerFile', function sendPhotoSuite() { + before(function before() { + utils.handleRatelimit(bot, 'uploadStickerFile', this); + }); + it('should upload a sticker from file', function test() { + const sticker = `${__dirname}/data/sticker.png`; + return bot.uploadStickerFile(USERID, sticker).then(resp => { + assert.ok(is.object(resp)); + assert.ok(is.string(resp.file_id)); + }); + }); + // Other tests (eg. Buffer, URL) are skipped, because they rely on the same features as sendPhoto. + }); }); // End Telegram