Skip to main content

Telegram userbot that automatically translates outgoing messages using Claude and GPT

Project description

Telegram Auto-Translate

PyPI version

A Telegram userbot that automatically translates your outgoing messages using conversation context.

Before After
Before translation After translation

How It Works

Your message → Detect languages → Translate with Claude → Clean output → Edit in place
  1. Watch - Monitors your outgoing messages
  2. Analyze - Gathers recent chat context (default: 10 messages)
  3. Detect - Uses GPT-5 to identify the target language based on who you're replying to
  4. Skip if unnecessary - Won't translate if your message is already in the target language
  5. Translate - Claude translates with full conversation context, matching the chat's tone and style
  6. Clean - Strips any LLM artifacts (preambles, quotes) from the output
  7. Edit - Replaces your original message with the translation

Installation

Via PyPI (Recommended)

pip install telegram-auto-translate

From Source

git clone https://github.com/aimoda/telegram-auto-translate
cd telegram-auto-translate
pip install -e .

Quick Start

# Set required environment variables
# Get TG_API_ID and TG_API_HASH from https://my.telegram.org/apps
export TG_API_ID="your_api_id"
export TG_API_HASH="your_api_hash"
export BEDROCK_AWS_PROFILE="your_aws_profile"
export OPENAI_API_KEY="your_azure_openai_key"

# Run
telegram-auto-translate

On first run, Telethon will prompt for your phone number and login code.


Prerequisites

  • Python 3.10+
  • Telegram API credentials - Get API_ID and API_HASH from my.telegram.org
  • AWS account with Bedrock access and appropriate IAM permissions
  • Azure OpenAI resource (or standard OpenAI API key)

Configuration

Telegram

Variable Description
TG_API_ID Your Telegram API ID (required)
TG_API_HASH Your Telegram API hash (required)
TG_SESSION_NAME Session file name (default: translator_session)

AWS Bedrock (Claude)

  1. Create an IAM user with programmatic access, then attach an IAM policy with Bedrock invoke permissions:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowBedrockModelInvocationInAUSCANNZUKUS",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "us-east-1",
                        "us-east-2",
                        "us-west-1",
                        "us-west-2",
                        "ca-central-1",
                        "ca-west-1",
                        "eu-west-2",
                        "ap-southeast-2",
                        "ap-southeast-4",
                        "unspecified"
                    ]
                }
            },
            "Resource": [
                "arn:aws:bedrock:*::foundation-model/*",
                "arn:aws:bedrock:*:*:provisioned-model/*",
                "arn:aws:bedrock:*:*:imported-model/*",
                "arn:aws:bedrock:*:*:inference-profile/*"
            ]
        }
    ]
}
  1. Add credentials to ~/.aws/credentials:
[telegram-translator-bedrock]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
  1. Set the profile:
export BEDROCK_AWS_PROFILE="telegram-translator-bedrock"
export BEDROCK_AWS_REGION="us-east-1"  # optional, us-east-1 is default

Azure OpenAI (Recommended)

Option A: Azure AD Authentication

export OPENAI_USE_TOKEN_PROVIDER=1
export OPENAI_BASE_URL="https://your-resource.openai.azure.com/openai/v1/"
# Authenticate via: az login

Option B: API Key

export OPENAI_API_KEY="your_azure_openai_key"
export OPENAI_BASE_URL="https://your-resource.openai.azure.com/openai/v1/"

Using Standard OpenAI Instead

export OPENAI_API_KEY="your_openai_key"
export OPENAI_BASE_URL="https://api.openai.com/v1"

Usage

telegram-auto-translate [options]

Command-Line Flags

Flag Description Default
--dry-run Log translations without editing messages Off
--debug Verbose logging of API calls Off
--context-messages N Number of previous messages for context 10
--bedrock-profile NAME AWS profile for Bedrock $BEDROCK_AWS_PROFILE
--bedrock-region REGION AWS region for Bedrock us-east-1
--use-token-provider Use Azure AD instead of API key Off
--anthropic-model MODEL Claude model ID global.anthropic.claude-sonnet-4-5-20250929-v1:0
--openai-model MODEL GPT model for detection/cleaning gpt-5-mini-2025-08-07

Environment Variables Reference

Variable Required Description
TG_API_ID Yes Telegram API ID
TG_API_HASH Yes Telegram API hash
BEDROCK_AWS_PROFILE Yes AWS credentials profile
OPENAI_API_KEY Yes* Azure/OpenAI API key
OPENAI_BASE_URL No API endpoint URL
OPENAI_USE_TOKEN_PROVIDER No Use Azure AD auth (1/true)
BEDROCK_AWS_REGION No AWS region (default: us-east-1)
TG_SESSION_NAME No Session file name
ANTHROPIC_MODEL No Claude model override
OPENAI_MODEL No GPT model override
CONTEXT_MESSAGES No Context message count

*Not required if OPENAI_USE_TOKEN_PROVIDER=1


Examples

Test without editing messages:

telegram-auto-translate --dry-run --debug

Use more context for better translations:

telegram-auto-translate --context-messages 20

Use standard OpenAI API:

OPENAI_BASE_URL="https://api.openai.com/v1" telegram-auto-translate

Troubleshooting

"TG_API_ID and TG_API_HASH are required"

Set both environment variables or pass --api-id and --api-hash flags.

"OPENAI_API_KEY is required"

Either set OPENAI_API_KEY or use --use-token-provider for Azure AD auth.

"BEDROCK_AWS_PROFILE is required"

Set BEDROCK_AWS_PROFILE to your AWS credentials profile name.

Translation not happening

  • Check that there are previous messages in the chat (the bot needs context)
  • Your message might already be in the detected target language
  • Use --debug to see detection results

"AccessDeniedException" from Bedrock

Verify your IAM policy includes bedrock:InvokeModel permission and the model is enabled in your region.

First run hangs

Telethon is waiting for your phone number. Enter it in the terminal.


Development Setup

For local development and contributions:

Create and activate virtual environment

python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

Install the package

# Install in editable mode for development
pip install -e .

Run the application

# Option 1: Use the installed command
telegram-auto-translate

# Option 2: Run as module (without installing)
PYTHONPATH=src python -m telegram_auto_translate

Why Bedrock and Azure?

This bot uses Claude via AWS Bedrock for translation and GPT-5 via Azure OpenAI for language detection and output cleaning.

Task Model Why
Translation Claude (Bedrock) Extended thinking for nuanced, context-aware translations
Language Detection GPT-5 Excellent structured output performance
Output Cleaning GPT-5 Reliable artifact removal

We prefer these services for their data handling policies:

You can use standard OpenAI instead of Azure by setting OPENAI_BASE_URL=https://api.openai.com/v1.

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

telegram_auto_translate-0.1.9.tar.gz (50.8 kB view details)

Uploaded Source

Built Distribution

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

telegram_auto_translate-0.1.9-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file telegram_auto_translate-0.1.9.tar.gz.

File metadata

  • Download URL: telegram_auto_translate-0.1.9.tar.gz
  • Upload date:
  • Size: 50.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for telegram_auto_translate-0.1.9.tar.gz
Algorithm Hash digest
SHA256 20914407d3dd991615f00a6f02eee9c5f29069fdfcf1c16507983ff6592f97a3
MD5 d1c504d9afb53a7d500bf0dd6c730acb
BLAKE2b-256 aa2748fc2728d8b346cf6968ae937404a31ad37e74a2d50751bcbf047d8c62e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for telegram_auto_translate-0.1.9.tar.gz:

Publisher: publish-to-pypi.yml on aimoda/telegram-auto-translate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file telegram_auto_translate-0.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for telegram_auto_translate-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 389e46d63cd81f3428fb7217b26da64ef45a2d54302928ef010d86a6ae5ba088
MD5 fb1fb848cd2556ffb633c6137625a468
BLAKE2b-256 c8793b202575d3ebd01afc4bba754c4dedbff03fd0f2cc3855d8d032dca3998d

See more details on using hashes here.

Provenance

The following attestation bundles were made for telegram_auto_translate-0.1.9-py3-none-any.whl:

Publisher: publish-to-pypi.yml on aimoda/telegram-auto-translate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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