Skip to content

Latest commit

 

History

History
106 lines (77 loc) · 2.87 KB

README.md

File metadata and controls

106 lines (77 loc) · 2.87 KB

pybotx

A little python library for building bots for Express

Travis-CI License Code Style Package version


Introduction

pybotx is a toolkit 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.

Requirements

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.

Installation

$ pip install botx

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 

Example

Let's create a simple echo bot.

  • Create a file main.py with following content:
from botx import Bot, CTS, Message, Status
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
from starlette.status import HTTP_202_ACCEPTED

bot = Bot()
bot.add_cts(CTS(host="cts.example.com", secret_key="secret"))


@bot.default_handler
async def echo_handler(message: Message, bot: Bot):
    await bot.answer_message(message.body, message)


app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


@app.get("/status", response_model=Status)
async def bot_status():
    return await bot.status()


@app.post("/command", status_code=HTTP_202_ACCEPTED)
async def bot_command(message: Message):
    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.

License

This project is licensed under the terms of the MIT license.