tinh nang thong bao tin moi cua bot discord duoc tach ra mot phien ban cho telegram va nang cap hon.
click here (for users)
-
Click vào link và start bot: https://t.me/hcmus_tintuc_bot
- Bot crawl tin tức của HCMUS và gửi thông báo đến user thông qua Telegram.
- New feature: Tóm tắt nội dung chính của bài viết bằng Gemini, giúp nắm nhanh thông tin trước khi đọc tiếp.
- Quét tin tức mới 10 phút/lần, gửi ngay tới user khi có tin mới.
- Tập trung vào 1 feature chính là thông báo tin mới (không tích hợp quá nhiều tính năng như bot discord).
- Sử dụng goroutines, channel và worker pool của Go để xử lý đồng thời, tăng hiệu suất.
Lưu ý: Bot chỉ hỗ trợ private chat (chat riêng/cá nhân), không hỗ trợ group chat.
| Category | URL |
|---|---|
| Thông tin dành cho sinh viên | https://hcmus.edu.vn/category/dao-tao/dai-hoc/thong-tin-danh-cho-sinh-vien |
| Lịch thi - Phòng khảo thí | https://ktdbcl.hcmus.edu.vn/index.php/cong-tac-kh-o-thi/l-ch-thi-h-c-ky |
| Thông báo - Phòng khảo thí | https://ktdbcl.hcmus.edu.vn/index.php/thong-bao |
| Khoa CNTT - FIT@HCMUS | https://www.fit.hcmus.edu.vn/tin-tuc |
| CLC/APCS - CTĐA@HCMUS | https://www.ctda.hcmus.edu.vn/vi/thong-bao/ |
Note: Chương trình đại trà sài chung với khoa CNTT
|
Command
|
|
Factos 1:
maybe toi se xoa tinh nang nay ben bot discord va chi phat trien them ben nay (neu co thoi gian) (🐳)
- Language: Go 1.26.1
- Database: Supabase (PostgreSQL), pgx/v5
- Crawler: Colly (HTML), gofeed (RSS)
- Content extractor: go-readability
- AI Summarization: Gemini
- Telegram Bot: Telebot v4
- Scheduler: gocron
- Concurrency: Goroutines, Channels, sync.WaitGroup, Worker Pool
- Deployment: Docker + CI/CD pipeline (GitHub Actions)
Factos 2:
t thay code bang golang suong hon js (i'm addicted to golang lol xD)
click here (if u want to run it locally)
B1. Đảm bảo đã cài Go 1.26.1 thông qua: https://go.dev/doc/install
brew install go # for homebrew (macOS)
go version # check versionB2. Clone repo này về và di chuyển vào thư mục:
git clone https://github.com/cuogne/NewsTeleBot.git
cd NewsTeleBotB3. chạy file setup.sh đã được thiết lập sẳn trong repo để setup:
bash setup.shshell trên giúp bạn cài đặt các dependency cần thiết của Go, tạo file
.envdựa theo mẫu .env.example và thiết lập hot reload.
B4. Sau khi chạy xong, bạn sẽ có file .env trong thư mục với các biến môi trường cần thiết.
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
SUPABASE_URL=your_supabase_url
GEMINI_API_KEY=your_gemini_api_keyThay các token trong file .env vừa được tạo bằng token của bạn, cách lấy như sau:
-
Telegram Bot Token: Cài đặt Telegram (link có ở trên), tạo bot trên Telegram bằng cách nhắn tin với BotFather, gõ
/newbotvà làm theo hướng dẫn. -
Supabase URL: Login và tạo project trên Supabase, dán script tạo database trong db/database.sql vào
SQL Editorvà run nó, sau đó chọnConnectvà lấy URL trongSession pooler. -
Gemini API Key: tạo tài khoản trên Google AI Studio, chọn
Get API Keyvà lấy key.
B5. Run bot:
go run ./cmd/bot # chạy trực tiếp
make run # chạy bằng Makefile, lệnh như chạy trực tiếp
make dev # chạy ở chế độ dev, có hot reload (sử dụng air)
go build -o ./bin/bot ./cmd/bot # build thành binaryHoặc run thông qua docker:
docker build -t hcmus-news-tele-bot .
docker run -d --env-file .env --name my-tele-bot hcmus-news-tele-botNếu bạn muốn phát triển thêm nhiều feeds mới tuân theo cấu trúc hiện có, vui lòng đảm bảo:
B1. Tạo feeds mới trong resource.go với cấu trúc của type Resource và thêm vào slice Feeds:
// resource.go
type Resource struct {
URL string
Name string
Category string
Format string
}
// thêm feeds mới ở đây
var Feeds = []Resource{
// ...
{
URL: "https://example.com/new-feed",
Name: "the name of your feed",
Category: "the category of your feed (must match with table name in database.sql)",
Format: "the format of your feed (must match with case in crawl.go)",
},
}B2. Tạo table mới trong database.sql theo cấu trúc schema đã có:
-- database.sql
create table <name_of_table_is_equal_to_category> (
url text primary key,
title text not null,
send_at timestamp,
prompt_token int,
completion_token int
);B3. Tên Category trong resource.go phải trùng với tên table trong database.sql. Ví dụ: nếu bạn tạo feeds có category = "tinmoi", bạn phải tạo table "tinmoi" trong db/database.sql.
- Vì thiết lập tên table trong db = category trong feeds để dễ quản lý và tránh lỗi khi thêm feeds mới. Nếu không khớp, bot sẽ không select và insert được dữ liệu.
Hoặc bạn sẽ phải sửa code trong repository hoặc service để khớp với lựa chọn của bạn =))
B4. Ngoài ra, bạn phải viết thêm file crawler cho feeds mới của bạn trong thư mục crawler (vì web bạn thêm vào sẽ có cấu trúc html không khớp với script hiện tại) và thêm nó vào case trong file crawl.go.
Và case format trong crawl.go phải khớp với Format trong resource.go của bạn.
// crawl.go
// ...
case "your_format": // your_format = config.Feeds[idx].Format
listArticles, err := your_crawl_function(feed.URL, feed.Category)
ch <- model.ListArticles{
Articles: listArticles,
Category: feed.Category,
Err: err,
}





