budva43

о проекте - 项目介绍 - परियोजना के बारे में - プロジェクトについて - acerca del proyecto - about project
[!IMPORTANT]
My best learning project to apply technology - from MVP to Enterprise Level 🚀
Telegram-Forwarder (UNIX-way) - forwards (or copies) messages from monitored channels and groups to target ones according to specified rules to obtain thematic digests.
How to clone project with submodules
$ git clone https://github.com/comerc/budva43.git
$ git submodule init
$ git submodule update
How to Dev Start
Direct install TDLib on host machine for best dev experience or use DevContainer (some restrictions) for build on Ubuntu.
With direct TDLib
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)
With DevContainer
only first time:
$ docker-compose build
...then "Reopen in Container"
Install Mockery V2
$ go install github.com/vektra/mockery/v2@v2.53.3
Applied Technologies
.env
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 example
./config/app.yml
./config/engine.yml
First start for Telegram auth
$ task engine
$ task facade
Examples for go-tdlib
// 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,
},
})
Inspired by
Filters Mode for Forward...
Exclude #COIN
Include #TSLA
case #COIN
Check +
Other -
To -
case #TSLA
Check -
Other -
To +
case #ARK
Check -
Other +
To -
Test-plan for Config...
- 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)
Dependencies
# golangci-lint
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# godog
go install github.com/cucumber/godog/cmd/godog@latest
# protobuf
brew install protobuf
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
# for `task extract`
brew install yt-dlp
brew install ffmpeg
# for `task cleanup_git`
brew install git-filter-repo
How to check grpc
brew install grpcurl
grpcurl -plaintext localhost:50051 list