Petbot/start_petbot.sh
megaproxy 915aa00bea Implement comprehensive rate limiting system and item spawn configuration
Major Features Added:
- Complete token bucket rate limiting for IRC commands and web interface
- Per-user rate tracking with category-based limits (Basic, Gameplay, Management, Admin, Web)
- Admin commands for rate limit management (\!rate_stats, \!rate_user, \!rate_unban, \!rate_reset)
- Automatic violation tracking and temporary bans with cleanup
- Global item spawn multiplier system with 75% spawn rate reduction
- Central admin configuration system (config.py)
- One-command bot startup script (start_petbot.sh)

Rate Limiting:
- Token bucket algorithm with burst capacity and refill rates
- Category limits: Basic (20/min), Gameplay (10/min), Management (5/min), Web (60/min)
- Graceful violation handling with user-friendly error messages
- Admin exemption and override capabilities
- Background cleanup of old violations and expired bans

Item Spawn System:
- Added global_spawn_multiplier to config/items.json for easy adjustment
- Reduced all individual spawn rates by 75% (multiplied by 0.25)
- Admins can fine-tune both global multiplier and individual item rates
- Game engine integration applies multiplier to all spawn calculations

Infrastructure:
- Single admin user configuration in config.py
- Enhanced startup script with dependency management and verification
- Updated documentation and help system with rate limiting guide
- Comprehensive test suite for rate limiting functionality

Security:
- Rate limiting protects against command spam and abuse
- IP-based tracking for web interface requests
- Proper error handling and status codes (429 for rate limits)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 20:10:43 +00:00

103 lines
No EOL
2.7 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# PetBot Startup Script
# Complete one-command startup for PetBot with all dependencies
#
# Usage: ./start_petbot.sh
#
set -e # Exit on any error
echo "🐾 Starting PetBot..."
echo "===================="
# Get script directory (works even if called from elsewhere)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
echo "📁 Working directory: $SCRIPT_DIR"
# Check if virtual environment exists
if [ ! -d "venv" ]; then
echo "❌ Virtual environment not found!"
echo "🔧 Creating virtual environment..."
python3 -m venv venv
echo "✅ Virtual environment created"
fi
# Activate virtual environment
echo "🔄 Activating virtual environment..."
source venv/bin/activate
# Check if requirements are installed
echo "🔄 Checking dependencies..."
if ! python -c "import aiosqlite, irc, dotenv" 2>/dev/null; then
echo "📦 Installing/updating dependencies..."
# Create requirements.txt if it doesn't exist
if [ ! -f "requirements.txt" ]; then
echo "📝 Creating requirements.txt..."
cat > requirements.txt << EOF
aiosqlite>=0.17.0
irc>=20.3.0
python-dotenv>=0.19.0
aiohttp>=3.8.0
EOF
fi
pip install --upgrade pip
pip install -r requirements.txt
echo "✅ Dependencies installed"
else
echo "✅ Dependencies already satisfied"
fi
# Verify core modules can be imported
echo "🔄 Verifying core modules..."
python3 -c "
import sys
sys.path.append('.')
try:
from src.database import Database
from src.game_engine import GameEngine
from src.rate_limiter import RateLimiter
from src.irc_connection_manager import IRCConnectionManager
from config import ADMIN_USER, IRC_CONFIG, RATE_LIMIT_CONFIG
print('✅ Core modules verified')
print(f' Admin user: {ADMIN_USER}')
except ImportError as e:
print(f'❌ Module import error: {e}')
sys.exit(1)
"
# Create data directory if it doesn't exist
if [ ! -d "data" ]; then
echo "📁 Creating data directory..."
mkdir -p data
fi
# Create backups directory if it doesn't exist
if [ ! -d "backups" ]; then
echo "📁 Creating backups directory..."
mkdir -p backups
fi
# Check if database exists, if not mention first-time setup
if [ ! -f "data/petbot.db" ]; then
echo " First-time setup detected - database will be created automatically"
fi
# Display startup information
echo ""
echo "🚀 Launching PetBot with Auto-Reconnect..."
echo "🌐 Web interface will be available at: http://localhost:8080"
echo "💬 IRC: Connecting to irc.libera.chat #petz"
echo "📊 Features: Rate limiting, auto-reconnect, web interface, team builder"
echo ""
echo "Press Ctrl+C to stop the bot"
echo "===================="
echo ""
# Launch the bot
exec python run_bot_with_reconnect.py