diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 9f776b66..744a9f0b 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -240,6 +240,7 @@ import { getUsers } from './methods/users/get-users' import { iterProfilePhotos } from './methods/users/iter-profile-photos' import { resolvePeer } from './methods/users/resolve-peer' import { resolvePeerMany } from './methods/users/resolve-peer-many' +import { setEmojiStatus } from './methods/users/set-emoji-status' import { setGlobalTtl } from './methods/users/set-global-ttl' import { setOffline } from './methods/users/set-offline' import { setProfilePhoto } from './methods/users/set-profile-photo' @@ -4887,6 +4888,20 @@ export interface TelegramClient extends BaseTelegramClient { * @param force (default: `false`) Whether to force re-fetch the peer from the server */ resolvePeer(peerId: InputPeerLike, force?: boolean): Promise + /** + * Set an emoji status for the current user + * + * @param emoji Custom emoji ID or `null` to remove the emoji + */ + setEmojiStatus( + emoji: tl.Long | null, + params?: { + /** + * Date when the emoji status should expire (only if `emoji` is not `null`) + */ + until?: number | Date + }, + ): Promise /** * Changes the current default value of the Time-To-Live setting, * applied to all new chats. @@ -5254,6 +5269,7 @@ export class TelegramClient extends BaseTelegramClient { iterProfilePhotos = iterProfilePhotos resolvePeerMany = resolvePeerMany resolvePeer = resolvePeer + setEmojiStatus = setEmojiStatus setGlobalTtl = setGlobalTtl setOffline = setOffline setProfilePhoto = setProfilePhoto diff --git a/packages/client/src/methods/users/set-emoji-status.ts b/packages/client/src/methods/users/set-emoji-status.ts new file mode 100644 index 00000000..edbdeb6b --- /dev/null +++ b/packages/client/src/methods/users/set-emoji-status.ts @@ -0,0 +1,45 @@ +import { tl } from '@mtcute/core' + +import { TelegramClient } from '../../client' +import { normalizeDate } from '../../utils' + +/** + * Set an emoji status for the current user + * + * @param emoji Custom emoji ID or `null` to remove the emoji + * @internal + */ +export async function setEmojiStatus( + this: TelegramClient, + emoji: tl.Long | null, + params?: { + /** + * Date when the emoji status should expire (only if `emoji` is not `null`) + */ + until?: number | Date + }, +): Promise { + const { until } = params ?? {} + + let emojiStatus: tl.TypeEmojiStatus + + if (emoji === null) { + emojiStatus = { _: 'emojiStatusEmpty' } + } else if (until) { + emojiStatus = { + _: 'emojiStatusUntil', + documentId: emoji, + until: normalizeDate(until), + } + } else { + emojiStatus = { + _: 'emojiStatus', + documentId: emoji, + } + } + + await this.call({ + _: 'account.updateEmojiStatus', + emojiStatus, + }) +} diff --git a/packages/client/src/utils/misc-utils.ts b/packages/client/src/utils/misc-utils.ts index 8fae3c0f..8070dd68 100644 --- a/packages/client/src/utils/misc-utils.ts +++ b/packages/client/src/utils/misc-utils.ts @@ -53,6 +53,9 @@ export function extractChannelIdFromUpdate(upd: tl.TypeUpdate): number | undefin return res } +export function normalizeDate(date: Date | number): number +export function normalizeDate(date: Date | number | undefined): number | undefined + export function normalizeDate(date: Date | number | undefined): number | undefined { return date ? ~~((typeof date === 'number' ? date : date.getTime()) / 1000) : undefined }