This package automates the process of bot creation
Project description
ChatBotMaker
This project aims to automate plateform messaging where the plateform support message forwarding.
Description
This module is based around a bot class in which you inject the necessary code / objects:
- Messenger (An object that sends message or event back)
- Dispatcher (An object that contains all the logic rule)
- Database (An object that allows database interaction)
General Idea
User are in states and define what action should be executed.
A state is composed of 3 event and 1 input event (or main event):
- func(user, user_input): main function called with the user's input
- enter_func(user): called every time before the user sends text in its current state
- pre_func(user): called when entering a state (ie. during change_state)
- post_func(user): called when exiting a state (ie. during change_state)
Components
Messenger
You can create your own messenger class that should inherit the
chatbotmaker.Messenger class.
It must implement a send(user_id: str, message:str)
method and can implement other optional methods.
Dispatcher
The dispatcher recieves your config as a dictionnary in the following format:
{ 'actions': { 'handle_name': { 'enter_func': lambda user: user.send_message('Hi there every time'), 'pref_func': lambda user: user.send_message('Hi there'), 'func': lambda user, user_input: user.change_state('home'), 'post_func': lambda user: user.send_message('You are redirected'), }, 'home': { 'pref_func': lambda user: user.send_message('Welcome back!'), 'func': 'lambda user, user_input: user.change_state(user_input)', }, 'input': { 'func': 'lambda user, user_input: ( user.store_argument('input', user_input), user.change_state('home'), )', }, 'help': Dispatcher.DEFAULT, } }
DEFAULT
You can associate function by their name to make the binding process easier. You must name your functions with {key}_{handle_name} (eg: func_help, pre_func_help, post_func_help). You then must pass the binding table dictionary to the Dispatcher constructor alongside the config __init__(self, config, env=None) . This generally are locals() or globals().
How does it work?
The user is the orm User class to whom we add some method (redirect failing attribute calls):
- send_message(message: str)
- change_state(state: str)
- get_argument(name: str)
- store_argument(name: str, value: str)
- self.messenger, self.dispatcher, self.database (the one onjected in the bot)
Database
The given database database follows the following architecture:
- users:
- id = Column(Integer, primary_key=True)
- fb_id = Column(String)
- state = Column(String)
- arguments = relationship('Argument', back_populates='user', lazy='dynamic')
- arguments:
- id = Column(Integer, primary_key=True)
- name = Column(String)
- value = Column(String)
- user_id = Column(Integer, ForeignKey('users.id'))
- user = relationship('User', uselist=False, back_populates='arguments')
The database expects a config (sqlachemy.config) object to initialize the database. Please check sqlalchemy configuration for more information.
Custom tables / ORM classes
You can add custom tables (thus ORM classes). To do so create your own base (declarative_base() from sqlalchemy) and with it your own models . Then inject it in the database object database([...], base=my_base).
In case you want to create relationships with default classes, it is possible. A function add_relationship(class_to_add, name, value) is available in the database module.
Usage
Default components
To avoid re-inventing the wheel, some "common" components have already been coded. They are in chatbotmaker.default.
- FacebookMessenger(authentication_token)
- facebook_route(request, facebook_check_token, bot)
- this flask routing should be called directly from the routing function
Dev
We have the dev file containing:
- DevMessenger() # prints everythin in console
Installation
Using PIP since its a pip module repository:
42sh$ : pip install chatbotmaker
Contributing
Do no hesitate to make a pull request or launch a discussion. I am looking foreward to expand the default capabilites.
Authors and acknowledgment
Author:
Dominique MICHEL dominique.michel@epita.fr
Status
The project has reached its first final phase. Now there will be:
- need to think about the design and facilitate user-database integration
- Good work done here, maybe allow any orm engiine ine the future
- need of tests (why not make a CI pipeline)
- tests must tests more the content of the calls
- github ci pipeline is so confusing coming from gitlab :o
Once the backend is functional and robust, i aim to make a frontend plateform to allow non-programming people to create bots too.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file chatbotmaker-0.0.13.tar.gz
.
File metadata
- Download URL: chatbotmaker-0.0.13.tar.gz
- Upload date:
- Size: 90.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61dbb6bc9f2497a9ff6175058a12b5805a201586c3f65489a2955ac47179e364 |
|
MD5 | d1e3c06ba4454c18b6da8506215d7e7b |
|
BLAKE2b-256 | f2ea3cfee07152477f79525e955762952386db7e9c0ac361b60dd358fc73c968 |
File details
Details for the file chatbotmaker-0.0.13-py3-none-any.whl
.
File metadata
- Download URL: chatbotmaker-0.0.13-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99e1225a5b835e85e95ede7496220e200b7928bf02c805da68841271c4a828a7 |
|
MD5 | 7124c7c41990ce9061b72f52039e578a |
|
BLAKE2b-256 | f97b2078e2ba0dc0a14cc14316b64a8628fbb294c0e9c756ac4d5c768a301b51 |