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. You can postpone the database creation using create_database=False, add your own ORM classes using the database.base attribute and construct the database using database.create_database().
Custom tables / ORM classes
You can add custom tables (thus ORM classes) by potponing the final creation of the database (ie create_database=False) and using the database base object to identify your custom tables OR you can create your models with your own base and 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
Hashes for chatbotmaker-0.0.12-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf220dd7b0f1cdad5fef6cffcd7e9ac79e6def03446f9fbdfbf5f350af1316a8 |
|
MD5 | 30c84c4f8b750535f8d14c2e5a15de51 |
|
BLAKE2b-256 | 07902e2c17a20cbeed105f2a03ff7941bc6d49f710e7ad5aa522bdfa2353972d |