To-Do Lists

Telegram supports collaborative to-do lists in chats.

Handling To-Do Messages

Receive and display to-do lists in messages:

from pyrogram import Client

app = Client("my_account")


@app.on_message()
async def todo_handler(client, message):
    if message.todo:
        print(f"To-Do List: {message.todo.title}")
        print(f"Total items: {message.todo.total_count}")

        for item in message.todo.items:
            status = "✓" if item.is_checked else "○"
            print(f"{status} {item.text}")

        if message.todo.completions:
            print(f"Completed: {message.todo.completed_count}")


app.run()

Sending To-Do Lists

Send a to-do list to a chat:

from pyrogram import Client
from pyrogram.types import InputMediaTodo

app = Client("my_account")


async def main():
    await app.send_media_group(
        "chat_id",
        media=[
            InputMediaTodo(
                title="Shopping List",
                items=[
                    "Milk",
                    "Bread",
                    "Eggs"
                ]
            )
        ]
    )


with app:
    app.loop.run_until_complete(main())

To-Do Service Messages

Handle to-do completion and task addition service messages:

from pyrogram import Client, enums

app = Client("my_account")


@app.on_message()
async def todo_service_handler(client, message):
    if message.service == enums.MessageServiceType.TODO_COMPLETIONS:
        print("Tasks completed!")

    if message.service == enums.MessageServiceType.TODO_APPEND_TASKS:
        print("New tasks added!")


app.run()