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!
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
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.
>>> 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!'
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!'
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"}
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()
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()
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.
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