-
Prepare
.telegram-bot-confunder/BadmintonCourtAgent. Get your Bot Token from BotFather in Telegram, and fill it in.$ cp .telegram-bot-conf.Example .telegram-bot-conf -
Run the Bot Now we only support type
polling,webhookis under development.- Run in local, with venv
$ python3 -m venv .venv$ source ./.venv/bin/activate$ python3 -m pip install -r requirements.txt$ python3 app.py -t polling - Run in a container
use
docker-compose(v1.x) ordocker compose(v2.x) depends on the version of your docker engine$ docker compose up -d
- Run in local, with venv
-
/help:Check all supported commands,
/help [COMMAND]. -
/set_token:set 17-fit token,
/set_token ["help"] -
/check_courts:check available courts.
/check_courts ("help"|DATE COURT) -
/snap_court:set a repeating job to reserve a court every
INTERVALseconds, no matter if the court is available or not./snap_court ("help"|"check"|DATE COURT TIME)
COMMAND: either "set_token", "check_courts", "snap_court"
DATE: "month-date". Like 06-03, remember to pad zero in the front.
COURT: 1~6
TIME: hour:00. Like 08:00, remember to pad zero in the front.
- resource/: Some static files like json
- src/: Bot source code
- src/handler: Each handler corresponds to a command supported in our bot.
- tests/: all kinds of tests to ensure our bot works properly
-
app.py:
bot main entry point, includes
AyeServerto start the whole bot service. -
server.py:
sets up telegram-bot-conf, handlers, logger, and decide service type (either
pollingorwebhook). -
logger.py:
provides a pre-configured logger, a static logger instance shared accross the whole service.
-
json_reader.py:
read messages defined in
resource/messages.json, so that messages won't be hard-coded in source code. -
db_mgr.py:
abstract db manager that provides basic db operations, pass in different db engine (defaults to Sqlite) in
AyeServer. -
db_models.py:
ORM models mapping to db tables, we use
sqlalchemyas ORM framework. -
agent.py:
Interact with 17Fit API, provides
check()andgo()to check current vacant courts and reserve a specific vacant courts respectively. -
object.py
Defined some useful object representing the concept we used across the bot service. For instance,
Userrepresents a specific user interacting with our bot, andVacantCourtrepresents court available on 17Fit right now. -
service.py
Serves the corresponding objects in
objects.py.You can think of this (XxxService) as a service courter, when you ask XxxService, it returns the object(Xxx) or performs some operations related to the object(Xxx).
-
parser.py
Parses the arguments provided, implementing a simple recursive descent parser here with a simple grammar inside.