Telegram-Forwarder (UNIX-way) - forwards (or copies) messages from monitored channels and groups to target ones according to specified rules to obtain thematic digests.
$ git clone https://github.com/comerc/budva43.git
$ git submodule init
$ git submodule update
Direct install TDLib on host machine for best dev experience or use DevContainer (some restrictions) for build on Ubuntu.
Install by instruction with this options:
- Install built TDLib to /usr/local instead of placing the files to td/tdlib.
- Choose which compiler you want to use to build TDLib: clang (recommended)
only first time:
$ docker-compose build
...then "Reopen in Container"
$ go install github.com/vektra/mockery/v2@v2.53.3
- Dev Containers
- testcontainers
- mockery
- easyjson
- Docker Compose
- docker multi-stage build
- zsh + ohmyzsh
- golangci-lint + revive
- Makefile
- editorconfig
- git submodule
- goreleaser
- todo-highlight
- git-graph
- Redis
- go-clean-architecture
- SOLID
- DRY
- KISS
- YAGNI
- Dependency Injection
- design-patterns
- Notations Start & Run
- Graceful Shutdown
- Front Controller (microservice)
- CQRS
- samber/lo
- uptrace/bun
- gqlgen
- Grafana + Prometheus
- ClickHouse
- fiber
- zelenin/go-tdlib
- Code Style
- samber/mo
- samber/do
- samber/oops
- samber/slog-*
- testing: Time & Concurrency https://danp.net/posts/synctest-experiment/
- spf13/cobra
- go.mod replace
- comerc/spylog
- go test -race WARNING LC_DYSYMTAB golang/go#61229
- voidint/g
- go mod vendor
- vmihailenco/msgpack
- temporal
- anycable
- gocritic
- OpenTelemetry
- gostackparse
- grafana-loki
- pplog
- pprof
- time.AfterFunc() & context.AfterFunc()
- init() - dependency chain: config -> log -> spylog
- closures (currying and partial application)
- tail recursion
- errors.Is & errors.As
- generics
- PUB/SUB
- table (call-)tests
- integration tests
- separate config for e2e tests
- dynamic config engine.yml
- structured logs and errors
- cliAutomator
- codecov.io (as uber/atomic)
- snapshot tests
- LocalAI
- go-prompt
- Gemma for NLP?
- uber-go/automaxprocs
- uber-go/goleak
- magefile/mage
- oklog/ulid
- Go to Implementation
- jq
- task
- unused-interface-methods
- BDD
- godog
Register an application to obtain an api_id and api_hash
# ./config/.private/.env
BUDVA43__TELEGRAM__API_ID=1234567
BUDVA43__TELEGRAM__API_HASH=XXXXXXX
BUDVA43__TELEGRAM__PHONE_NUMBER=+78901234567
./config/app.yml
./config/engine.yml
$ make run
// How to add InlineKeyboardButton
row := make([]*client.InlineKeyboardButton, 0)
row = append(row, &client.InlineKeyboardButton{
Text: "123",
Type: &client.InlineKeyboardButtonTypeUrl{
Url: "https://google.com",
},
})
rows := make([][]*client.InlineKeyboardButton, 0)
rows = append(rows, row)
_, err := tdlibClient.SendMessage(&client.SendMessageRequest{
ChatId: dstChatId,
InputMessageContent: &client.InputMessageText{
Text: formattedText,
DisableWebPagePreview: true,
ClearDraft: true,
},
ReplyMarkup: &client.ReplyMarkupInlineKeyboard{
Rows: rows,
},
})
- marperia/fwdbot
- wcsiu/telegram-client-demo + article
- Создание и развертывание ретранслятора Telegram каналов, используя Python и Heroku
Exclude #COIN
Include #TSLA
case #COIN
Check +
Other -
To -
case #TSLA
Check -
Other -
To +
case #ARK
Check -
Other +
To -
- Text
- Forward.SendCopy (or forward)
- and edit sync for double copy
- Forward.CopyOnce (edit sync)
- Forward.Indelible (delete sync)
- Filters Mode (see above)
- Forward.IncludeSubmatch
- ReplaceMyselfLinks + DeleteExternal
- ReplaceFragments (and not equal len)
- Sources.Link + Title
- Sources.Sign
- AutoAnswers
- MediaAlbum
- Forward.SendCopy (or forward)
- Forward.CopyOnce (edit sync)
- Forward.Indelible (delete sync)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
go install github.com/cucumber/godog/cmd/godog@latest