Skip to content

TCP Chat Bot

STEP 1, Install Tiny-listener:

$ pip install tiny-listener

STEP 2, Create python file tcp_chat_bot.py:

from asyncio import StreamReader, StreamWriter, start_server

from tiny_listener import Data, Depends, EventNotFound, Listener

ADDRESS = ("127.0.0.1", 12345)


class App(Listener):
    @staticmethod
    async def tcp_handler(reader: StreamReader, writer: StreamWriter):
        while True:
            payload = await reader.readline()
            if not payload:
                break

            try:
                app.trigger_event(payload.strip().decode(), data={"writer": writer})
            except EventNotFound:
                writer.write(b"Huh, go on.\n")

    async def listen(self):
        await start_server(self.tcp_handler, *ADDRESS)


app = App()


async def get_writer(writer: Data):
    return writer


@app.on_event("{_}?")
async def ask(writer: StreamWriter = Depends(get_writer)):
    writer.write(b"I am confused, may be you should google it.\n")


@app.on_event("{_}.")
async def answer(writer: StreamWriter = Depends(get_writer)):
    writer.write(b"Yes, it makes sense to me.\n")

STEP 3, Run your app:

$ tiny-listener tcp_chat_bot:app

STEP 4, Open a new terminal with:

$ nc -I 60 localhost 12345

STEP 5, Chat with your bot:

$ hello!
Huh, go on.

$ who are you?
I am confused, may be you should google it.

$ earth is flat.
Yes, it makes sense to me.