TelegramPWA/src/api/gramjs/methods/management.ts

70 lines
1.5 KiB
TypeScript

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;
}