Skip to main content

MetricsFirst SDK for Python - Analytics for Telegram bots

Project description

MetricsFirst Python SDK

Official Python SDK for MetricsFirst - Analytics for Telegram bots.

Installation

# Basic installation (sync only)
pip install metricsfirst

# With async support
pip install metricsfirst[async]

# With aiogram middleware
pip install metricsfirst[aiogram]

# Everything
pip install metricsfirst[all]

Quick Start

Synchronous Client

from metricsfirst import MetricsFirst, CommandEventData, ServiceEventData

# Initialize
mf = MetricsFirst(
    bot_id="your_bot_id",
    api_key="your_api_key",
)

# Track a command
mf.track_command(CommandEventData(
    user_id=123456789,
    command="/start",
    response_time_ms=150,
))

# Track a service
mf.track_service(ServiceEventData(
    user_id=123456789,
    service_name="image_generation",
    is_free=False,
    price=10,
    currency="USD",
))

# Don't forget to shutdown
mf.shutdown()

Asynchronous Client

import asyncio
from metricsfirst import AsyncMetricsFirst, CommandEventData

async def main():
    # Initialize
    mf = AsyncMetricsFirst(
        bot_id="your_bot_id",
        api_key="your_api_key",
    )
    await mf.start()

    # Track events
    await mf.track_command(CommandEventData(
        user_id=123456789,
        command="/start",
    ))

    # Shutdown
    await mf.shutdown()

asyncio.run(main())

Context Manager

# Sync
with MetricsFirst(bot_id="...", api_key="...") as mf:
    mf.track_command(...)

# Async
async with AsyncMetricsFirst(bot_id="...", api_key="...") as mf:
    await mf.track_command(...)

Aiogram Integration

from aiogram import Bot, Dispatcher, Router
from aiogram.types import Message
from metricsfirst import AsyncMetricsFirst
from metricsfirst.middleware import create_aiogram_middleware

bot = Bot(token="BOT_TOKEN")
dp = Dispatcher()
router = Router()

# Initialize MetricsFirst
mf = AsyncMetricsFirst(bot_id="your_bot_id", api_key="your_api_key")

# Add middleware - automatically tracks all commands and interactions
middleware = create_aiogram_middleware(mf)
router.message.middleware(middleware)
router.callback_query.middleware(middleware)

@router.message(commands=["start"])
async def start_handler(message: Message):
    await message.answer("Hello!")

dp.include_router(router)

async def main():
    await mf.start()
    try:
        await dp.start_polling(bot)
    finally:
        await mf.shutdown()

Using Decorators

from metricsfirst import AsyncMetricsFirst
from metricsfirst.middleware import async_track_command, async_track_service

mf = AsyncMetricsFirst(bot_id="...", api_key="...")

@async_track_command(mf, lambda msg: msg.from_user.id)
async def start_handler(message):
    await message.answer("Hello!")

@async_track_service(mf, "download", lambda msg: msg.from_user.id, is_free=False, price=5)
async def download_handler(message):
    # Your download logic
    pass

Available Events

Method Description
track_command() Track bot commands
track_interaction() Track user interactions
track_service() Track services provided
track_error() Track errors
track_error_from_exception() Track error from exception
track_purchase_initiated() Track purchase start
track_purchase_completed() Track successful purchase
track_purchase_error() Track failed purchase
track_recurring_charge_success() Track subscription charge
track_recurring_charge_failed() Track failed charge
identify() Identify user with properties

Configuration

mf = MetricsFirst(
    bot_id="your_bot_id",
    api_key="your_api_key",
    api_url="https://api.metricsfirst.com",  # Custom API URL
    batch_events=True,      # Batch events before sending
    batch_size=10,          # Events per batch
    batch_interval=5.0,     # Seconds between flushes
    debug=False,            # Enable debug logging
    timeout=10.0,           # HTTP timeout
)

License

MIT

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

metricsfirst-0.1.0.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metricsfirst-0.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file metricsfirst-0.1.0.tar.gz.

File metadata

  • Download URL: metricsfirst-0.1.0.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for metricsfirst-0.1.0.tar.gz
Algorithm Hash digest
SHA256 22e5d37fef93d3614d5b7b40d7e2898c3bb864d6cf1c3b7741a7826e7bdd632a
MD5 ceb89ce647d0fd9b987366b7a0af3599
BLAKE2b-256 51171ebccc2392d8e36858db63f06074d091760483c7b9ca914ebce36176def3

See more details on using hashes here.

File details

Details for the file metricsfirst-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: metricsfirst-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for metricsfirst-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81e205f6668f64e6fed2a60748f96bb8232463819fd980ce5b72e6b57abe43d5
MD5 82750c0a5b59b6c629cc04a152160fa3
BLAKE2b-256 bb21fa80a4b7d11d143ea972239b69062952bda986ba4d4699b63e85cd4e0f88

See more details on using hashes here.

Supported by

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