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