Skip to main content

A lightweight Python framework for building chatbots.

Project description

Chatter

codecov Documentation Status

Welcome to Chatter!

Chatter is a framework with the goal of allowing you to quickly and easily create chatbots. It hides away the things you want to just work, exposing a simple API, so that you can focus on writing your custom features and delivering a working chatbot.

Take a look:

from chatter_py import ChatClient, Feature, Bot, Message
from typing import Any


# Define your feature
class Echo(Feature):
    def receive(self, message):
        self.send_to_chat(message)


# Write a handler for your chat client, for example:
class MyChatClient(ChatClient):
    def __init__(self):
        self.chat_client_connection = Any

    def on_chat_message(self, message: dict):
        """Receive your chat messages and convert them to bot friendly messages"""
        bot_message = Message(text=message["text"], room=message["room_id"])
        self.send_to_bot(bot_message)

    def start_listening(self) -> None:
        """connect to your chat client"""
        self.chat_client_connection.register_callback(self.on_chat_message)
        self.chat_client_connection.start_listening()

    def send_to_client(self, message):
        """Format your bot messages and send them off to your chat client"""
        text = "<p>" + " ".join(message.text) + "</p>"
        self.chat_client_connection.send(text)


def main():
    # Let Chatter put it all together
    Bot(MyChatClient(), [Echo]).start()


if __name__ == '__main__':
    # Start your bot!
    main()

Chatter encourages you to separate concerns by keeping your chat client specific message transformations in your ChatClient classes and letting all your Feature classes handle standardised Messages. This:

  • Makes your code more testable
  • Makes your bot super portable - being able to handle a new chat client is as simple as creating a new ChatClient subclass and writing your custom logic for transforming messages between Bot and Presentation format.

You could even use a command-line frontend for testing your bot's logic:

from chatter_py import ChatClient, Message


class CommandLine(ChatClient):
    def send_to_client(self, message: Message):
        print("Chatter-bot: " + " ".join(message.text))

    def start_listening(self) -> None:
        while True:
            input_message = input("You: ")
            message_to_bot = Message(text=input_message.split(" "), room="")
            self.send_to_bot(message_to_bot)

Now every time you write a new chat client class, all you have to focus on testing is given a Bot message, you receive the correct chat message, and vice versa - simple!

Project details


Download files

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

Source Distribution

chatter_py-1.0.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

chatter_py-1.0.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file chatter_py-1.0.1.tar.gz.

File metadata

  • Download URL: chatter_py-1.0.1.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for chatter_py-1.0.1.tar.gz
Algorithm Hash digest
SHA256 037ae2965bee9bcb1da405a24bf4ceaf1f89a3516d54439ebfc39003e48bcf70
MD5 cccc1efb682ef74ccb3ce72f223b722d
BLAKE2b-256 f609c465d1ea0a11d58537b32142d417c95716b0439bbbb8dcfd144fb4fa4226

See more details on using hashes here.

File details

Details for the file chatter_py-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: chatter_py-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for chatter_py-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b90b54ce8d4eecd2e28b5ca4070cc125681caa8fb199a9100901449d642d443
MD5 91fd9b4766c515a9d006af70137142d1
BLAKE2b-256 3668a0525bfab79775d55c91214e5e51381aa4be5999ed3205832820159064c8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page