Skip to content

tarcisioe/roboto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7358eab · Jun 26, 2020
May 31, 2020
Jun 26, 2020
Jun 26, 2020
Jun 26, 2020
Jun 18, 2020
Apr 5, 2020
Apr 21, 2020
Jun 18, 2020
Jun 12, 2020
Apr 3, 2020
Jun 25, 2020
Jun 25, 2020
May 23, 2020
Jun 18, 2020
Jun 25, 2020
Jun 12, 2020
Jun 18, 2020

Repository files navigation

Roboto

codecov

A type-hinted async Telegram bot library, supporting trio, curio and asyncio.

Roboto's API is not perfectly stable nor complete yet. It will be kept a 0.x.0 until the Telegram Bot API is completely implemented, and will be bumped to 1.0.0 when it is complete.

Basic usage

Roboto is still a low-level bot API, meaning it does not provide much abstraction over the Bot API yet (that is planned, though).

Currently, a basic echo bot with roboto looks like:

from roboto import Token, BotAPI
from trio import run  # This could be asyncio or curio as well!


api_token = Token('your-bot-token')


async def main() -> None:
    async with BotAPI.make(api_token) as bot:
        offset = 0

        while True:
            updates = await bot.get_updates(offset)

            for update in updates:
                if update.message is not None and update.message.text is not None:
                    await bot.send_message(
                        update.message.chat.id,
                        update.message.text,
                    )

            if updates:
                offset = updates[-1].update_id + 1


# In asyncio it should be "main()".
run(main)

Being statically-typed, Roboto supports easy autocompletion and mypy static checking.

Contributing

Check our contributing guide to know how to develop on Roboto and contribute to our project.

Goals

Principles

  • Ease of static checking for client code, especially static typing.
  • Forwards compatibility (additions to the bot HTTP API should not break older versions of Roboto easily).

Achieved milestones

Next milestones

Acknowledgements

This used to be a disclaimer that we were vendoring asks. We are not anymore (the feature we needed is now on upstream), but I will still keep the acknowledgemente because it (through anyio) gives us the ability to support the three major async event loops, asyncio, trio and curio!