max-telegram-bridge-bot/examples/addon_local.go.example
Andrey Lugovskoy 1235aa05de
Some checks failed
Build / build (push) Has been cancelled
Addon extension framework + crosspost UX/reliability improvements
- Pluggable optional addons via `addon` build tag: Addon interface,
  stub for the public build, generic b.extraCommands injection so the core
  stays agnostic of any extension. README section + working examples/echoaddon.
- publishTgCrosspost: единая точка кросспоста TG→MAX (формат entity→markdown +
  замены), переиспользуется вместо дублирования.
- TG_API_URL local mode: getFile отдаёт абсолютный путь — срезаем префикс до
  токена, чтобы файлы отдавались через статику (nginx).
- Автозамены: понятная инструкция вместо "from | to", человеко-читаемые ошибки.
- Очередь доставки: причина + номер поста при недоставке в MAX, быстрый дроп
  перманентных ошибок (send-message.empty, нет прав) вместо 30 ретраев.
- ForwardOrigin msg_id проброшен в Addon (старт операций с конкретного поста).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:34:17 +04:00

40 lines
1.7 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//go:build addon
// ОБРАЗЕЦ склейки расширения с бриджом.
//
// Как использовать:
// 1. Скопируйте этот файл в КОРЕНЬ проекта под именем addon_local.go
// (оно уже в .gitignore — в публичный репозиторий не попадёт):
// cp examples/addon_local.go.example addon_local.go
// 2. Соберите с тегом addon:
// go build -tags addon -o bridge .
// 3. Запустите бридж — в личке боту заработает команда /echo.
//
// Файл собирается ТОЛЬКО с `-tags addon`. Без тега используется addon_stub.go,
// где loadAddon возвращает nil и расширения выключены.
package main
import (
"context"
"bearlogin-bridge/examples/echoaddon"
)
// loadAddon вызывается ядром при старте. Здесь создаётся экземпляр расширения и
// пробрасываются нужные операции бриджа. Ядро о внутренностях расширения не знает.
func loadAddon(b *Bridge) Addon {
// Команда расширения в меню бота. Ядро покажет её в setMyCommands, не зная
// её семантику (см. b.extraCommands в bridge.go).
b.extraCommands = append(b.extraCommands, BotCommand{
Command: "echo",
Description: "Повторить текст (пример аддона)",
})
return echoaddon.New(echoaddon.Deps{
Reply: func(ctx context.Context, chatID int64, text string) error {
_, err := b.tg.SendMessage(ctx, chatID, text, nil)
return err
},
})
}