Router for chatbot


License
MIT
Install
pip install chatrouter==1.0.4

Documentation

status workflow test status workflow build Downloads

Chatrouter is an enhanced router for chatbots and easily integrates with any bot library.

key features

  1. turned complexity into simplicity.

from:

if user_session == "A":
    ...
elif user_session == "B":
    ...
elif user_session == "C":
    ...
else:
    ...

to:

chatbot = chatrouter.group(user_session)
r = chatrouter.run(chatbot, msg)
  1. Readable route.
@chatbot.add_command("call me {my_name}")
# or 
chatbot.add_command("call me {my_name} and {my_friend}")
# etc
  1. case sensitive and insensitive.

default case is insensitive but you can add strict=True to a route/command to make it case sensitive.

  1. public and private command.

command start with "/" and have description is public command, for example:

@chatbot.add_command("/test", description="test command", strict=True)
  1. invoke callback anywhere.
func = chatrouter.util.get_func("group_name", "command_name")
  1. auto generated /start and /help command.

  2. object storage chatrouter.data_user.

  3. support asynchronous.

  4. support midleware

@chatbot.midleware()
def limit_user():
  allowed_user_id = (123, 456)
  return chatrouter.data_user.id in allowed_user_id

installation

pip install chatrouter

quick example

# -*-coding:utf8;-*-
import chatrouter


chatbot = chatrouter.group("test", "this is test bot!")


@chatbot.add_command("call me {name}")
def say_handler(name):
    return f"hello {name}, nice to meet you!"


@chatbot.add_command("repeat me {one} and {two}")
def repeat_handler(one, two):
    return f"ok {one}.. {two}"


@chatbot.add_default_command()
def default_handler(command):
    return f"command {command} not found!"


if __name__ == '__main__':
    print(chatrouter.run(chatbot, "/start"))
    while True:
        try:
            i = input("you: ")
            r = chatrouter.run(chatbot, i)
            print(f"bot: {r}")
        except BaseException as e:
            print("bot: byebye!")
            exit(0)

asynchronous example

#-*-coding:utf8;-*-
import asyncio
import chatrouter


chatbot = chatrouter.group("test", asynchronous=True)

@chatbot.add_command("call me {name}")
async def test(name):
    return f"hello {name}!"

async def main():
    user_input = "call me human"
    response = await chatrouter.async_run(chatbot, user_input)
    print(response)

if __name__ == '__main__':
    asyncio.run(main())

for more complex example, please open demo/telegram_bot.