Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

iRunCode Telegram Bot

A professional Telegram bot for executing code snippets in multiple programming languages using the Piston API.

Features

  • Multi-language Support: Execute code in 50+ programming languages
  • Interactive Interface: Button-based language selection and command-line interface
  • Professional Architecture: Modular, maintainable code structure
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Rate Limiting: Built-in rate limiting to prevent abuse
  • Channel Membership: Optional requirement for users to join a specific channel
  • Health Monitoring: Automatic health checks and resource management
  • Docker Support: Containerized deployment with health checks
  • Graceful Shutdown: Proper cleanup on termination
  • Logging: Comprehensive logging with rotation and colored output

Project Structure

iRunCode/
├── src/ # Source code
│ ├── config/ # Configuration management
│ │ └── __init__.py # Config class and constants
│ ├── handlers/ # Telegram message handlers
│ │ ├── commands.py # Command handlers (/start, /help, etc.)
│ │ └── messages.py # Message handlers
│ ├── services/ # Business logic services
│ │ ├── piston.py # Piston API integration
│ │ └── state.py # User state management
│ ├── utils/ # Utility functions
│ │ ├── logger.py # Logging configuration
│ │ ├── helpers.py # Helper functions and decorators
│ │ └── health.py # Health monitoring
│ └── main.py # Application entry point
├── logs/ # Log files (auto-created)
├── .env # Environment variables
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── docker-compose.yaml # Docker Compose configuration
├── run.py # Startup script
└── README.md # This file

Installation

Prerequisites

  • Python 3.8+
  • Docker (optional, for containerized deployment)

Local Development

  1. Clone the repository

    git clone <your-repo-url>cd iRunCode
  2. Create and activate virtual environment

    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Install dependencies

    pip install -r requirements.txt
  4. Configure environment variables

    cp .env.example .env
    # Edit .env with your Telegram Bot API key
  5. Run the bot

    python run.py
    # or
    python -m src.main

Docker Deployment

  1. Configure environment

    # Make sure .env file exists with your API_KEYecho"API_KEY=your_telegram_bot_token_here"> .env
  2. Build and run with Docker Compose

    docker-compose up -d --build
  3. View logs

    docker-compose logs -f iruncode-bot
  4. Stop the bot

    docker-compose down

Configuration

Channel Membership Requirements

The bot supports optional channel membership requirements to encourage users to join your channel before using the bot:

  1. Enable the feature by setting REQUIRE_CHANNEL_MEMBERSHIP=true in your .env file
  2. Set the channel using REQUIRED_CHANNEL_ID with either:
    • Public channel: @your_channel_username
    • Private channel: -1234567890123 (channel ID)

When enabled, users who aren't members of the specified channel will receive a message prompting them to join before they can use the bot's features.

Getting Channel ID for Private Channels

For private channels, you need the channel ID:

  1. Add your bot as an admin to the channel
  2. Forward a message from the channel to @userinfobot
  3. Use the channel ID (negative number) in your configuration

Environment Variables

Create a .env file in the root directory with the following variables:

# RequiredAPI_KEY=your_telegram_bot_token_here# Optional - with defaultsLOG_LEVEL=INFOLOG_FILE=logs/bot.logPISTON_API_URL=https://emkc.org/api/v2/piston/executePISTON_TIMEOUT=30PISTON_RETRY_ATTEMPTS=3PISTON_RETRY_DELAY=1.0BOT_TIMEOUT=30POOLING_TIMEOUT=30CONNECTION_POOL_SIZE=8RATE_LIMIT_WINDOW=60RATE_LIMIT_MAX_REQUESTS=10HEALTH_CHECK_INTERVAL=300MAX_MEMORY_USAGE=256# Channel Membership Requirements (Optional)REQUIRE_CHANNEL_MEMBERSHIP=falseREQUIRED_CHANNEL_ID=@area51_blog

Usage

Commands

  • /start - Start the bot and show language selection
  • /help - Show help message with usage instructions
  • /about - Show information about the bot
  • /langs - List all supported programming languages
  • /run <language> <code> - Execute code directly

Examples

Button Interface:

  1. Send /start
  2. Click on a language button (e.g., "🐍 Python")
  3. Send your code
  4. Receive the output

Command Interface:

/run python
print("Hello, World!")

Supported Languages: Python, C++, C#, JavaScript, Java, Go, Rust, PHP, C, Bash, and 40+ more languages.

Key Improvements

Stability Fixes

  1. Connection Pooling: Efficient HTTP connection management
  2. Retry Mechanisms: Automatic retries with exponential backoff
  3. Error Handling: Comprehensive error catching and user feedback
  4. Rate Limiting: Prevents API abuse and bot overload
  5. Health Monitoring: Automatic resource monitoring and cleanup
  6. Graceful Shutdown: Proper cleanup on termination
  7. Memory Management: Automatic cleanup of inactive users

Architecture Improvements

  1. Modular Design: Separated concerns into logical modules
  2. Configuration Management: Centralized configuration with validation
  3. Professional Logging: Structured logging with rotation and colors
  4. Type Hints: Full type annotations for better code quality
  5. Async/Await: Proper asynchronous programming throughout
  6. Docker Support: Production-ready containerization
  7. Channel Integration: Optional channel membership requirements

User Management Features

  1. Channel Membership: Configurable requirement for users to join a specific channel before using the bot
  2. Automatic Verification: The bot automatically checks if users are members of the required channel
  3. Flexible Configuration: Can be enabled/disabled and configured for any public or private channel

Performance Enhancements

  1. Async HTTP Client: Non-blocking HTTP requests
  2. Connection Reuse: Persistent HTTP connections
  3. Memory Optimization: Automatic cleanup of old data
  4. Efficient State Management: Optimized user state storage

Monitoring

The bot includes comprehensive monitoring:

  • Health Checks: Automatic system health monitoring
  • Memory Usage: Tracks and limits memory consumption
  • User Activity: Monitors and cleans up inactive users
  • API Performance: Tracks API response times and errors
  • Logging: Detailed logs with different levels

Development

Adding New Features

  1. Commands: Add to src/handlers/commands.py
  2. Message Handlers: Add to src/handlers/messages.py
  3. Services: Add business logic to src/services/
  4. Configuration: Update src/config/__init__.py

Testing

# Run with debug logging
LOG_LEVEL=DEBUG python run.py
# Monitor resource usage
docker stats iruncode

Troubleshooting

Common Issues

  1. Bot stops responding: Check logs and restart the container
  2. High memory usage: Adjust MAX_MEMORY_USAGE in environment
  3. API timeouts: Increase PISTON_TIMEOUT setting
  4. Rate limiting: Adjust rate limit settings in configuration

Logs

Logs are written to:

  • Console (with colors)
  • logs/bot.log (with rotation)

Use different log levels for different environments:

  • DEBUG: Development
  • INFO: Production
  • WARNING: Production with minimal logs
  • ERROR: Only errors

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the existing code style
  4. Add tests if applicable
  5. Submit a pull request

Credits

License

This project is open source. See the LICENSE file for details.

About

Telegram bot that uses Piston API to execute codes and send the output directly within Telegram!

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages