Skip to content

cuogne/NewsTeleBot

Repository files navigation

🐳 HCMUS News Telegram Bot 🐳

golangmascot

Typing SVG

telegram  go  gemini  status-bot-active

what

tinh nang thong bao tin moi cua bot discord duoc tach ra mot phien ban cho telegram va nang cap hon.

0. How to use

click here (for users)

1. Advanced features

  • 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.

2. News Sources

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

ảnh meme của Gopher:

source image: https://github.com/nlepage/gophers

3. Telegram commands

Command

/start - Giới thiệu và hướng dẫn sử dụng bot
/subscribe - Đăng ký nhận thông báo
/unsubscribe - Hủy nhận thông báo

command-preview
golangmascot
Factos 1:

maybe toi se xoa tinh nang nay ben bot discord va chi phat trien them ben nay (neu co thoi gian) (🐳)

4. Demo

Click here to see demo
PC/Laptop Mobile
Thông báo

5. Tech stack

Factos 2:

t thay code bang golang suong hon js (i'm addicted to golang lol xD)

6. Run (for dev)

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 version

B2. Clone repo này về và di chuyển vào thư mục:

git clone https://github.com/cuogne/NewsTeleBot.git

cd NewsTeleBot

B3. chạy file setup.sh đã được thiết lập sẳn trong repo để setup:

bash setup.sh

shell trên giúp bạn cài đặt các dependency cần thiết của Go, tạo file .env dự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_key

Thay 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õ /newbot và 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 Editor và run nó, sau đó chọn Connect và lấy URL trong Session pooler.

  • Gemini API Key: tạo tài khoản trên Google AI Studio, chọn Get API Key và 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 binary

Hoặ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-bot

Lưu ý khi mở rộng feeds mới:

Nế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,
  }

golangmascot

About

bot telegram crawl tin tuc cua hcmus

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors