A little python framework for building bots for eXpress messenger.
pybotx
is a framework for building bots for eXpress providing a mechanism for simple
integration with your favourite web frameworks.
Main features:
- Simple integration with your web apps.
- Asynchronous API with synchronous as a fallback option.
- 100% test coverage.
- 100% type annotated codebase.
NOTE: This library is under active development and its API may be unstable. Please lock the version you are using at the minor update level. For example, like this in poetry
.
[tool.poetry.dependencies]
botx = "^0.14.0"
Python 3.6+
pybotx
use the following libraries:
- pydantic for the data parts.
- httpx for making HTTP calls to BotX API.
- loguru for beautiful and powerful logs.
- Optional. Starlette for tests.
$ pip install botx
Or if you are going to write tests:
$ pip install botx[tests]
You will also need a web framework to create bots as the current BotX API only works with webhooks. This documentation will use FastAPI for the examples bellow.
$ pip install fastapi uvicorn
Let's create a simple echo bot.
- Create a file
main.py
with following content:
from botx import Bot, ExpressServer, IncomingMessage, Message, Status
from fastapi import FastAPI
from starlette.status import HTTP_202_ACCEPTED
bot = Bot(known_hosts=[ExpressServer(host="cts.example.com", secret_key="secret")])
@bot.default(include_in_status=False)
async def echo_handler(message: Message) -> None:
await bot.answer_message(message.body, message)
app = FastAPI()
app.add_event_handler("shutdown", bot.shutdown)
@app.get("/status", response_model=Status)
async def bot_status() -> Status:
return await bot.status()
@app.post("/command", status_code=HTTP_202_ACCEPTED)
async def bot_command(message: IncomingMessage) -> None:
await bot.execute_command(message.dict())
- Deploy a bot on your server using uvicorn and set the url for the webhook in Express.
$ uvicorn main:app --host=0.0.0.0
This bot will send back every your message.
This project is licensed under the terms of the MIT license.