Skip to main content

A lib to create chatbots

Project description

Build Status

eddie is a library you can use to create your own chat bots in seconds.

This is a very young library, any request/suggestion/help will be very appreciated. For them, create an issue or contact me!

Install

You can install eddie using just pip:

$ pip install eddie

If you want the latest version download this repository in your project or using pip:

$ pip install git+https://github.com/greenkey/eddie.git

Usage

You have to define your bot class, extending the default Bot class:

>>> from eddie.bot import Bot
>>> class MyBot(Bot):
...     pass
...
>>> b = MyBot()
>>> b
<__main__.MyBot object at 0x7f16e79f3940>

Of course you’ll want to define some bahaviour, the following chapters teach you how to do it.

Defining a default response

>>> from eddie.bot import Bot
>>> class MyBot(Bot):
...     def default_response(self, in_message):
...         # setting echo as default response
...         return in_message
...
>>> b = MyBot()
>>> b.process("Hello!")
'Hello!'
>>> b.process("Goodbye!")
'Goodbye!'

Defining commands

Just define a method of your Bot class using the command decorator.

>>> from eddie.bot import Bot, command
>>> class MyBot(Bot):
...     @command
...     def hello(self):
...             return "hello!"
...
>>> bot = MyBot()
>>> bot.process("/hello") # the default command prepend is "/"
'hello!'

Defining interfaces

A bot running in local would be pretty useless, isn’t it?

The simplest interface we can give to our bot is the http one.

>>> from eddie.bot import Bot
>>> from eddie.endpoints import HttpEndpoint
>>> class MyBot(Bot):
...     def default_response(self, in_message):
...             return in_message
...
>>> bot = MyBot()
>>> ep = HttpEndpoint()
>>> bot.add_endpoint(ep)
>>> bot.run()

Then you can send message to the bot using simple GET requests: http://localhost:8000/process?in_message=hello

Note: default port is 8000, if it is already used, HttpEndpoint will use the first free port after 8000 (8001, 8002…).

The output using the example will be a json with the message: {"out_message": "hello"}

Telegram

Yes, you can easily connect your bot with the Telegram API, thanks to the python-telegram-bot library.

You don’t have to worry about nothing, except getting a token from the BotFather and passing it to your bot.

>>> from eddie.bot import Bot
>>> from eddie.endpoints import TelegramEndpoint
>>> class MyBot(Bot):
...     def default_response(self, in_message):
...             return in_message
...
>>> bot = MyBot()
>>> ep = TelegramEndpoint(
...     token='123:ABC'
... )
>>> bot.add_endpoint(ep)
>>> bot.run()

Twitter

It’s not a proper bot framework, but with eddie you can have a bot in Twitter too, thanks to the tweepy library.

Just follow the instrunction on how to create a Twitter App , get all the tokens and use them to instantiate the TwitterEndpoint.

>>> from eddie.bot import Bot
>>> from eddie.endpoints import TwitterEndpoint
>>> class MyBot(Bot):
...     def default_response(self, in_message):
...             return in_message
...
>>> bot = MyBot()
>>> ep = TwitterEndpoint(
...     consumer_key='your consumer_key',
...     consumer_secret='your consumer_secret',
...     access_token='your access_token',
...     access_token_secret='your access_token_secret'
... )
>>> bot.add_endpoint(ep)
>>> bot.run()

Logging

This library uses the logging module. To set up logging to standard output, put:

import logging
logging.basicConfig(level=logging.DEBUG)

at the beginning of your script.

Get involved

If you want to contribute, download the repository, then:

$ virtualenv ~/.venv/eddie # not required but highly suggested
$ source ~/.venv/eddie/bin/activate
$ pip install -r requirements-dev.txt # install all the requirements
$ pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
eddie-0.9.5.tar.gz (14.8 kB) Copy SHA256 hash SHA256 Source None May 7, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page