feat(client): setStickerSetThumb method
This commit is contained in:
parent
09064bb084
commit
b157b52ff6
4 changed files with 116 additions and 23 deletions
|
@ -91,6 +91,7 @@ import { deleteStickerFromSet } from './methods/stickers/delete-sticker-from-set
|
||||||
import { getInstalledStickers } from './methods/stickers/get-installed-stickers'
|
import { getInstalledStickers } from './methods/stickers/get-installed-stickers'
|
||||||
import { getStickerSet } from './methods/stickers/get-sticker-set'
|
import { getStickerSet } from './methods/stickers/get-sticker-set'
|
||||||
import { moveStickerInSet } from './methods/stickers/move-sticker-in-set'
|
import { moveStickerInSet } from './methods/stickers/move-sticker-in-set'
|
||||||
|
import { setStickerSetThumb } from './methods/stickers/set-sticker-set-thumb'
|
||||||
import {
|
import {
|
||||||
_fetchUpdatesState,
|
_fetchUpdatesState,
|
||||||
_handleUpdate,
|
_handleUpdate,
|
||||||
|
@ -2128,6 +2129,27 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
| tl.TypeInputDocument,
|
| tl.TypeInputDocument,
|
||||||
position: number
|
position: number
|
||||||
): Promise<StickerSet>
|
): Promise<StickerSet>
|
||||||
|
/**
|
||||||
|
* Set sticker set thumbnail
|
||||||
|
*
|
||||||
|
* @param id Sticker set short name or a TL object with input sticker set
|
||||||
|
* @param thumb Sticker set thumbnail
|
||||||
|
* @param params
|
||||||
|
* @returns Modified sticker set
|
||||||
|
*/
|
||||||
|
setStickerSetThumb(
|
||||||
|
id: string | tl.TypeInputStickerSet,
|
||||||
|
thumb: InputFileLike | tl.TypeInputDocument,
|
||||||
|
params?: {
|
||||||
|
/**
|
||||||
|
* Upload progress callback
|
||||||
|
*
|
||||||
|
* @param uploaded Number of bytes uploaded
|
||||||
|
* @param total Total file size
|
||||||
|
*/
|
||||||
|
progressCallback?: (uploaded: number, total: number) => void
|
||||||
|
}
|
||||||
|
): Promise<StickerSet>
|
||||||
/**
|
/**
|
||||||
* Base function for update handling. Replace or override this function
|
* Base function for update handling. Replace or override this function
|
||||||
* and implement your own update handler, and call this function
|
* and implement your own update handler, and call this function
|
||||||
|
@ -2317,6 +2339,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
getInstalledStickers = getInstalledStickers
|
getInstalledStickers = getInstalledStickers
|
||||||
getStickerSet = getStickerSet
|
getStickerSet = getStickerSet
|
||||||
moveStickerInSet = moveStickerInSet
|
moveStickerInSet = moveStickerInSet
|
||||||
|
setStickerSetThumb = setStickerSetThumb
|
||||||
protected _fetchUpdatesState = _fetchUpdatesState
|
protected _fetchUpdatesState = _fetchUpdatesState
|
||||||
protected _loadStorage = _loadStorage
|
protected _loadStorage = _loadStorage
|
||||||
protected _saveStorage = _saveStorage
|
protected _saveStorage = _saveStorage
|
||||||
|
|
|
@ -8,11 +8,15 @@ import { assertTypeIs } from '../../utils/type-assertion'
|
||||||
*/
|
*/
|
||||||
export async function _normalizeFileToDocument(
|
export async function _normalizeFileToDocument(
|
||||||
this: TelegramClient,
|
this: TelegramClient,
|
||||||
file: InputFileLike,
|
file: InputFileLike | tl.TypeInputDocument,
|
||||||
params: {
|
params: {
|
||||||
progressCallback?: (uploaded: number, total: number) => void
|
progressCallback?: (uploaded: number, total: number) => void
|
||||||
},
|
},
|
||||||
): Promise<tl.TypeInputDocument> {
|
): Promise<tl.TypeInputDocument> {
|
||||||
|
if (typeof file === 'object' && tl.isAnyInputDocument(file)) {
|
||||||
|
return file
|
||||||
|
}
|
||||||
|
|
||||||
const media = await this._normalizeInputMedia({
|
const media = await this._normalizeInputMedia({
|
||||||
type: 'document',
|
type: 'document',
|
||||||
file,
|
file,
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
import { TelegramClient } from '../../client'
|
||||||
|
import { tl } from '@mtcute/tl'
|
||||||
|
import { InputFileLike, StickerSet } from '../../types'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set sticker set thumbnail
|
||||||
|
*
|
||||||
|
* @param id Sticker set short name or a TL object with input sticker set
|
||||||
|
* @param thumb Sticker set thumbnail
|
||||||
|
* @param params
|
||||||
|
* @returns Modified sticker set
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export async function setStickerSetThumb(
|
||||||
|
this: TelegramClient,
|
||||||
|
id: string | tl.TypeInputStickerSet,
|
||||||
|
thumb: InputFileLike | tl.TypeInputDocument,
|
||||||
|
params?: {
|
||||||
|
/**
|
||||||
|
* Upload progress callback
|
||||||
|
*
|
||||||
|
* @param uploaded Number of bytes uploaded
|
||||||
|
* @param total Total file size
|
||||||
|
*/
|
||||||
|
progressCallback?: (uploaded: number, total: number) => void
|
||||||
|
},
|
||||||
|
): Promise<StickerSet> {
|
||||||
|
if (typeof id === 'string') {
|
||||||
|
id = {
|
||||||
|
_: 'inputStickerSetShortName',
|
||||||
|
shortName: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await this.call({
|
||||||
|
_: 'stickers.setStickerSetThumb',
|
||||||
|
stickerset: id,
|
||||||
|
thumb: await this._normalizeFileToDocument(thumb, params ?? {})
|
||||||
|
})
|
||||||
|
|
||||||
|
return new StickerSet(this, res)
|
||||||
|
}
|
|
@ -211,29 +211,38 @@ export class StickerSet {
|
||||||
return this.client.addStickerToSet(this.inputStickerSet, sticker)
|
return this.client.addStickerToSet(this.inputStickerSet, sticker)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _getInputDocument(idx: number): tl.TypeInputDocument {
|
||||||
|
if (!this.full) throw new MtCuteEmptyError()
|
||||||
|
|
||||||
|
if (idx < 0) idx = this.full!.documents.length + idx
|
||||||
|
const doc = this.full!.documents[idx] as tl.RawDocument
|
||||||
|
|
||||||
|
if (!doc) throw new RangeError(`Sticker set does not have sticker ${idx}`)
|
||||||
|
|
||||||
|
return {
|
||||||
|
_: 'inputDocument',
|
||||||
|
id: doc.id,
|
||||||
|
accessHash: doc.accessHash,
|
||||||
|
fileReference: doc.fileReference
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a sticker from this set.
|
* Delete a sticker from this set.
|
||||||
*
|
*
|
||||||
* Only for bots, and the sticker set must
|
* Only for bots, and the sticker set must
|
||||||
* have been created by this bot.
|
* have been created by this bot.
|
||||||
*
|
*
|
||||||
|
* Note that this method returns a new
|
||||||
|
* {@link StickerSet} object instead of modifying current.
|
||||||
|
*
|
||||||
* @param sticker
|
* @param sticker
|
||||||
* Sticker File ID. In case this is a full sticker set object,
|
* Sticker File ID. In case this is a full sticker set object,
|
||||||
* you can also pass index (even negative), and that sticker will be removed
|
* you can also pass index (even negative), and that sticker will be removed
|
||||||
*/
|
*/
|
||||||
async deleteSticker(sticker: number | Parameters<TelegramClient['deleteStickerFromSet']>[0]): Promise<StickerSet> {
|
async deleteSticker(sticker: number | Parameters<TelegramClient['deleteStickerFromSet']>[0]): Promise<StickerSet> {
|
||||||
if (typeof sticker === 'number') {
|
if (typeof sticker === 'number') {
|
||||||
if (!this.full) throw new MtCuteEmptyError()
|
sticker = this._getInputDocument(sticker)
|
||||||
|
|
||||||
if (sticker < 0) sticker = this.full!.documents.length + sticker
|
|
||||||
const doc = this.full!.documents[sticker] as tl.RawDocument
|
|
||||||
|
|
||||||
sticker = {
|
|
||||||
_: 'inputDocument',
|
|
||||||
id: doc.id,
|
|
||||||
accessHash: doc.accessHash,
|
|
||||||
fileReference: doc.fileReference
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.client.deleteStickerFromSet(sticker)
|
return this.client.deleteStickerFromSet(sticker)
|
||||||
|
@ -245,6 +254,9 @@ export class StickerSet {
|
||||||
* Only for bots, and the sticker set must
|
* Only for bots, and the sticker set must
|
||||||
* have been created by this bot.
|
* have been created by this bot.
|
||||||
*
|
*
|
||||||
|
* Note that this method returns a new
|
||||||
|
* {@link StickerSet} object instead of modifying current.
|
||||||
|
*
|
||||||
* @param sticker
|
* @param sticker
|
||||||
* Sticker File ID. In case this is a full sticker set object,
|
* Sticker File ID. In case this is a full sticker set object,
|
||||||
* you can also pass index (even negative), and that sticker will be removed
|
* you can also pass index (even negative), and that sticker will be removed
|
||||||
|
@ -252,21 +264,33 @@ export class StickerSet {
|
||||||
*/
|
*/
|
||||||
async moveSticker(sticker: number | Parameters<TelegramClient['moveStickerInSet']>[0], position: number): Promise<StickerSet> {
|
async moveSticker(sticker: number | Parameters<TelegramClient['moveStickerInSet']>[0], position: number): Promise<StickerSet> {
|
||||||
if (typeof sticker === 'number') {
|
if (typeof sticker === 'number') {
|
||||||
if (!this.full) throw new MtCuteEmptyError()
|
sticker = this._getInputDocument(sticker)
|
||||||
|
|
||||||
if (sticker < 0) sticker = this.full!.documents.length + sticker
|
|
||||||
const doc = this.full!.documents[sticker] as tl.RawDocument
|
|
||||||
|
|
||||||
sticker = {
|
|
||||||
_: 'inputDocument',
|
|
||||||
id: doc.id,
|
|
||||||
accessHash: doc.accessHash,
|
|
||||||
fileReference: doc.fileReference
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.client.moveStickerInSet(sticker, position)
|
return this.client.moveStickerInSet(sticker, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set sticker set thumbnail.
|
||||||
|
*
|
||||||
|
* Only for bots, and the sticker set must
|
||||||
|
* have been created by this bot.
|
||||||
|
*
|
||||||
|
* Note that this method returns a new
|
||||||
|
* {@link StickerSet} object instead of modifying current.
|
||||||
|
*
|
||||||
|
* @param thumb
|
||||||
|
* Thumbnail file. In case this is a full sticker set object,
|
||||||
|
* you can also pass index (even negative), and that sticker
|
||||||
|
* will be used as a thumb
|
||||||
|
*/
|
||||||
|
async setThumb(thumb: number | Parameters<TelegramClient['setStickerSetThumb']>[1]): Promise<StickerSet> {
|
||||||
|
if (typeof thumb === 'number') {
|
||||||
|
thumb = this._getInputDocument(thumb)
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.client.setStickerSetThumb(this.inputStickerSet, thumb)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
makeInspectable(StickerSet, ['isFull'])
|
makeInspectable(StickerSet, ['isFull'])
|
||||||
|
|
Loading…
Reference in a new issue