import { useState } from "react"; import { del, put } from "../../api"; import { confirmDialog, toast } from "../../dialogs"; import { useFetch } from "../../hooks"; import { useT } from "../../i18n"; import { Icon } from "../Icon"; interface Status { configured: boolean; bot: string; paired: boolean; pair_code: string; running: boolean; error?: string | null; } /** Connect a personal Telegram bot as a chat interface. */ export function Telegram() { const t = useT(); const { data, reload } = useFetch("/account/telegram"); const [token, setToken] = useState(""); const [busy, setBusy] = useState(false); const connect = async () => { setBusy(true); try { await put("/account/telegram", { token: token.trim() }); setToken(""); reload(); } catch (e) { toast(e); } finally { setBusy(false); } }; const disconnect = async () => { if (!(await confirmDialog({ message: t("telegram.disconnectConfirm"), danger: true, confirmLabel: t("telegram.disconnect") }))) return; await del("/account/telegram").catch((e) => toast(e)); reload(); }; return (

{t("telegram.title")} {data?.configured && ( )}

{t("telegram.intro")}
{data && !data.configured && ( <>
  1. {t("telegram.step1")}
  2. {t("telegram.step2")}
setToken(e.target.value)} style={{ flex: 1 }} />
)} {data?.configured && ( <>
@{data.bot} {data.running && !data.error ? t("telegram.running") : t("telegram.stopped")} {data.paired && {t("telegram.paired")}}
{!data.paired && data.pair_code && (
{t("telegram.pairHint", { bot: data.bot })}{" "} t.me/{data.bot}
/start {data.pair_code}
)} {data.error &&
{data.error}
} {data.paired &&
{t("telegram.commands")}
} )}
); }