price-tracker-bot is a telegram bot that can trace the price on momoshop.
Telegram bot search @momo_price_tracker_bot
- 從 Github clone 此專案
git clone https://github.com/chen-tf/price-tracker-bot.git
- 安裝 Python,推薦版本 3.9
- 在專案資料夾內,安裝相關套件
pip install -r requirements.txt
- 安裝 Docker
- 安裝 PostgreSQL 環境
- 在專案資料夾內,執行
docker-compose up
,創建並啟動 PostgreSQL 環境
- 在專案資料夾內,執行
- 加入 Telegram
- 在對話視窗內呼叫 @BotFather,依照提示建立一個機器人,取得建立的 Telegram bot 的 Token
- Creating a new bot
- Token Sample:
110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
- 在專案資料夾內建立一個檔名為
.env
檔案,內容如下 - 將 BOT_TOKEN 內容變更為建立 Telegram bot 時取得的 Token
BOT_TOKEN = "{replace_me}"
DB_HOST = "localhost"
DB_NAME = "postgres"
DB_PASSWORD = "postgres"
DB_USER = "postgres"
DB_PORT = 5432
LOGGING_LEVEL = "INFO"
TELEGRAM_BOT_MODE = "polling"
- 在專案資料夾內執行檔案
python app.py
/my 顯示追蹤清單
/clearall 清空全部追蹤清單
/clear 刪除指定追蹤商品
/add 後貼上momo商品連結可加入追蹤清單或是可以直接使用指令選單方便操作
- PostgreSQL 10
執行 sqls folder底下放置的SQL file,或者可以自行使用其他db migration 工具
環境變數 | 說明 |
---|---|
DB_HOST | Database host |
DB_NAME | Database name |
DB_USER | Database user |
DB_PASSWORD | Database user's password |
BOT_TOKEN | Telegram bot token |
WEBHOOK_URL(Optional) | For deploy your app to cloud provides |
PERIOD_HOUR | Resync latest good's price time period |
TELEGRAM_BOT_MODE | default: polling, [polling,webhook] |
加入 telegram botfather並建立一個機器人,取得 token ,後續須設定環境變數 BOT_TOKEN
設定環境變數 TELEGRAM_BOT_MODE
- polling 測試使用上方便,不需要對外網址,效能上較webhook差
- webhook 如果要在local 測試 webhook,可使用 ngrok
- Run a Python App
- Install Flyctl and Login
- Inside fly toml
- Procfile 一樣使用
web: python3 app.py
- fly postgres 目前因為一些原因建議可以使用 Supabase Postgres
This is indeed a timeout due to the fact that Fly.io put HAproxy in front of the PostgreSQL instance, and the HAproxy has a 30m timeout. (This was confirmed via email support with Fly.io)
This means you will either want to a make sure your PostgreSQL adapter can deal with (or automatically) reconnects, or fire some kind of idle timer that runs a query at least once every 30 min, to keep the connection alive.
環境變數可以設定至 fly.toml 中
使用 isort (sort imports)
# cheat
echo "$(git diff --name-only --diff-filter=ACMR HEAD *.py)" | xargs isort
# usage - never use
isort **/*.py
使用 black (formatter)
# cheat
echo "$(git diff --name-only --diff-filter=ACMR HEAD *.py)" | xargs black
# find py file which place would be reformatted
echo "$(git diff --name-only --diff-filter=ACMR HEAD *.py)" | xargs black --diff
# use black for specific file
black foo.py
# usage - never use, it will reformat py file at all
black *.py
使用 pylint (lint)
# cheat
echo "$(git diff --name-only --diff-filter=ACMR HEAD *.py)" | xargs pylint -sn
# usage - never use, cause too many output
pylint *.py
確認 pre-commit 是否已安裝至專案環境底下
# check
pre-commit -V
# install with requirements.txt
pip install -r requirements.txt
# or directly install
pip install pre-commit
將 pre-commit hook 安裝至專案裡的 .git/hooks 資料夾底下
# init hook, will create .git/hooks/pre-commit
pre-commit install --install-hooks
執行 git commit
git commit -m 'feat: hello world'
成功時畫面如下
失敗時,需要調整相對應的檔案,並重新將檔案加入 git 版控,再重新進行 commit
對話輸入momo商品網址可直接加入追蹤
- /start 顯示目前所支援的指令
- /my 顯示目前所有追蹤物品清單,以及當下所記錄價格
- /clear 清除目前所有追蹤物品清單
You need to say these to @BotFather.
歡迎所有貢獻、提交錯誤報告、協助錯誤修復、文檔改進、功能增強和提供你的想法。
你可以移至"Issue"選項並開始查看你認為有趣的問題。文檔下列出了許多問題,您可以從這裡開始。
或者,您有了自己的想法,或者正在程式碼中尋找某些東西並認為“這可以改進”……您可以為此做點什麼!
作為本項目的貢獻者和維護者,您應該遵守 price-tracker-bot 的行為準則。