import { Api as GramJs } from '../../../lib/gramjs'; import { invokeRequest } from './client'; import { buildInputEntity, buildInputPeer } from '../gramjsBuilders'; import { ApiChat, OnApiUpdate } from '../../types'; let onUpdate: OnApiUpdate; export function init(_onUpdate: OnApiUpdate) { onUpdate = _onUpdate; } export async function checkChatUsername( { username }: { username: string }, ) { try { const result = await invokeRequest(new GramJs.channels.CheckUsername({ channel: new GramJs.InputChannelEmpty(), username, }), undefined, true); return result!; } catch (err) { return false; } } export async function setChatUsername( { chat, username }: { chat: ApiChat; username: string }, ) { const result = await invokeRequest(new GramJs.channels.UpdateUsername({ channel: buildInputEntity(chat.id, chat.accessHash) as GramJs.InputChannel, username, })); if (result) { onUpdate({ '@type': 'updateChat', id: chat.id, chat: { username }, }); } } export async function updatePrivateLink({ chat, usageLimit, expireDate, }: { chat: ApiChat; usageLimit?: number; expireDate?: number; }) { const result = await invokeRequest(new GramJs.messages.ExportChatInvite({ peer: buildInputPeer(chat.id, chat.accessHash), usageLimit, expireDate, })); if (!result) { return undefined; } onUpdate({ '@type': 'updateChatFullInfo', id: chat.id, fullInfo: { inviteLink: result.link, }, }); return result.link; }