feat: add /anleitung command with tenant list, replace /start and /help with shared guide

This commit is contained in:
Martin Porwoll 2026-03-01 10:07:24 +00:00
parent 132acf0ae7
commit f93fe9a6a0

View file

@ -202,28 +202,46 @@ async function processAlbum(
}
}
export function registerHandlers(bot: Bot<BotContext>): void {
// /start command
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`;
async function buildAnleitung(): Promise<string> {
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');
}
const text =
`\ud83d\udcf7 *Payload Media Bot*\n\n` +
`Willkommen\\! ${tenantLine}\n\n` +
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 Medien anzeigen\n` +
`/status \\- Bot\\-Status\n` +
`/help \\- Hilfe\n\n` +
`Sende einfach ein Bild oder Dokument zum Hochladen\\.`;
`/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<BotContext>): void {
// /start command — Begrüßung mit Anleitung
bot.command('start', async (ctx) => {
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<BotContext>): 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' });
});