feat(client): set profile photo from file id or input photo
This commit is contained in:
parent
d0e3ebda80
commit
94a65b1a74
2 changed files with 26 additions and 3 deletions
|
@ -3096,6 +3096,8 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
/**
|
/**
|
||||||
* Set a new profile photo or video.
|
* Set a new profile photo or video.
|
||||||
*
|
*
|
||||||
|
* You can also pass a file ID or an InputPhoto to re-use existing photo.
|
||||||
|
*
|
||||||
* @param type Media type (photo or video)
|
* @param type Media type (photo or video)
|
||||||
* @param media Input media file
|
* @param media Input media file
|
||||||
* @param previewSec
|
* @param previewSec
|
||||||
|
@ -3104,7 +3106,7 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
*/
|
*/
|
||||||
setProfilePhoto(
|
setProfilePhoto(
|
||||||
type: 'photo' | 'video',
|
type: 'photo' | 'video',
|
||||||
media: InputFileLike,
|
media: InputFileLike | tl.TypeInputPhoto,
|
||||||
previewSec?: number
|
previewSec?: number
|
||||||
): Promise<Photo>
|
): Promise<Photo>
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
import { TelegramClient } from '../../client'
|
import { TelegramClient } from '../../client'
|
||||||
import { InputFileLike, Photo } from '../../types'
|
import { InputFileLike, MtCuteArgumentError, Photo } from '../../types'
|
||||||
import { tl } from '@mtcute/tl'
|
import { tl } from '@mtcute/tl'
|
||||||
|
import { fileIdToInputPhoto, tdFileId } from '../../../../file-id/dist'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a new profile photo or video.
|
* Set a new profile photo or video.
|
||||||
*
|
*
|
||||||
|
* You can also pass a file ID or an InputPhoto to re-use existing photo.
|
||||||
|
*
|
||||||
* @param type Media type (photo or video)
|
* @param type Media type (photo or video)
|
||||||
* @param media Input media file
|
* @param media Input media file
|
||||||
* @param previewSec
|
* @param previewSec
|
||||||
|
@ -15,9 +18,27 @@ import { tl } from '@mtcute/tl'
|
||||||
export async function setProfilePhoto(
|
export async function setProfilePhoto(
|
||||||
this: TelegramClient,
|
this: TelegramClient,
|
||||||
type: 'photo' | 'video',
|
type: 'photo' | 'video',
|
||||||
media: InputFileLike,
|
media: InputFileLike | tl.TypeInputPhoto,
|
||||||
previewSec?: number
|
previewSec?: number
|
||||||
): Promise<Photo> {
|
): Promise<Photo> {
|
||||||
|
// try parsing media as file id or input photo
|
||||||
|
if (tdFileId.isFileIdLike(media) || typeof media === 'object' && tl.isAnyInputPhoto(media)) {
|
||||||
|
if (typeof media === 'string' && media.match(/^https?:\/\//)) {
|
||||||
|
throw new MtCuteArgumentError('Profile photo can\'t be set from URL.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tdFileId.isFileIdLike(media)) {
|
||||||
|
media = fileIdToInputPhoto(media)
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await this.call({
|
||||||
|
_: 'photos.updateProfilePhoto',
|
||||||
|
id: media
|
||||||
|
})
|
||||||
|
|
||||||
|
return new Photo(this, res.photo as tl.RawPhoto)
|
||||||
|
}
|
||||||
|
|
||||||
const res = await this.call({
|
const res = await this.call({
|
||||||
_: 'photos.uploadProfilePhoto',
|
_: 'photos.uploadProfilePhoto',
|
||||||
[type === 'photo' ? 'file' : 'video']: await this._normalizeInputFile(
|
[type === 'photo' ? 'file' : 'video']: await this._normalizeInputFile(
|
||||||
|
|
Loading…
Reference in a new issue