From f93fe9a6a069c48d4a80300700031d97edecaef9 Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Sun, 1 Mar 2026 10:07:24 +0000 Subject: [PATCH] feat: add /anleitung command with tenant list, replace /start and /help with shared guide --- src/telegram/handlers.ts | 71 ++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/telegram/handlers.ts b/src/telegram/handlers.ts index ffb1301..5511a1b 100644 --- a/src/telegram/handlers.ts +++ b/src/telegram/handlers.ts @@ -202,28 +202,46 @@ async function processAlbum( } } +async function buildAnleitung(): Promise { + let tenantList = 'Tenants konnten nicht geladen werden\\.'; + try { + const tenants = await payloadClient.listTenants(); + tenantList = tenants + .map((t) => ` \`${t.id}\` \\— ${escapeMarkdown(t.name)}`) + .join('\n'); + } catch { + log.warn('Could not load tenants for Anleitung'); + } + + return ( + `📷 *Payload Media Upload Bot \\— Anleitung*\n\n` + + `*So funktioniert der Upload:*\n` + + `1️⃣ Tenant wählen: /tenant antippen und Website auswählen\n` + + `2️⃣ Bild senden: Einfach ein Foto in den Chat schicken\n` + + `3️⃣ Fertig\\! Das Bild erscheint in der CMS Media\\-Bibliothek\n\n` + + `💡 *Tipps:*\n` + + `• Für *Originalqualität* das Bild als *Dokument* senden \\(📎 Büroklammer\\-Symbol\\)\n` + + `• Mehrere Bilder als Album senden \\= Bulk\\-Upload\n` + + `• Bildunterschrift wird als Alt\\-Text übernommen\n\n` + + `🏢 *Verfügbare Tenants:*\n${tenantList}\n\n` + + `*Befehle:*\n` + + `/tenant \\— Tenant wechseln\n` + + `/list \\— Letzte 5 Uploads anzeigen\n` + + `/status \\— Bot\\- und API\\-Status\n` + + `/anleitung \\— Diese Anleitung erneut anzeigen` + ); +} + export function registerHandlers(bot: Bot): void { - // /start command + // /start command — Begrüßung mit Anleitung bot.command('start', async (ctx) => { - let tenantLine: string; - if (ctx.session.selectedTenantId !== null) { - const tenantName = await getTenantName(ctx.session.selectedTenantId); - ctx.session.selectedTenantName = tenantName; - tenantLine = `Aktueller Tenant: *${escapeMarkdown(tenantName)}*`; - } else { - tenantLine = `⚠️ *Kein Tenant gewählt* \\- nutze /tenant`; - } - - const text = - `\ud83d\udcf7 *Payload Media Bot*\n\n` + - `Willkommen\\! ${tenantLine}\n\n` + - `*Befehle:*\n` + - `/tenant \\- Tenant wechseln\n` + - `/list \\- Letzte 5 Medien anzeigen\n` + - `/status \\- Bot\\-Status\n` + - `/help \\- Hilfe\n\n` + - `Sende einfach ein Bild oder Dokument zum Hochladen\\.`; + const text = await buildAnleitung(); + await ctx.reply(text, { parse_mode: 'MarkdownV2' }); + }); + // /anleitung command — Anleitung erneut anzeigen + bot.command('anleitung', async (ctx) => { + const text = await buildAnleitung(); await ctx.reply(text, { parse_mode: 'MarkdownV2' }); }); @@ -289,20 +307,9 @@ export function registerHandlers(bot: Bot): void { await ctx.reply(text, { parse_mode: 'MarkdownV2' }); }); - // /help command + // /help command — alias für /anleitung bot.command('help', async (ctx) => { - const text = - `\u2753 *Hilfe*\n\n` + - `Dieser Bot lädt Bilder in die Payload CMS Media\\-Kollektion hoch\\.\n\n` + - `*So geht's:*\n` + - `1\\. Wähle einen Tenant mit /tenant\n` + - `2\\. Sende ein Bild oder mehrere als Album\n` + - `3\\. Der Bot lädt sie automatisch hoch\n\n` + - `*Unterstützte Formate:*\n` + - `jpg, jpeg, png, webp, avif, gif, svg\n\n` + - `\ud83d\udca1 *Tipp:* Sende Bilder als *Dokument* \\(Büroklammer\\-Symbol\\), ` + - `um die Originalqualität beizubehalten\\. Telegram komprimiert Fotos sonst automatisch\\.`; - + const text = await buildAnleitung(); await ctx.reply(text, { parse_mode: 'MarkdownV2' }); });