mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
113 lines
3.4 KiB
Python
113 lines
3.4 KiB
Python
"""
|
|
Bot Runner Test - Run the full negoT8 bot with all features
|
|
Run this from anywhere: python test/bot_runner_test.py
|
|
|
|
Runs Bot A AND Bot B simultaneously so the full /pending cross-bot flow works:
|
|
Phone A → /coordinate @userB → enters preferences
|
|
Phone B → /pending → sees request, taps Accept
|
|
Phone B → enters preferences → agents negotiate live
|
|
"""
|
|
import sys
|
|
import os
|
|
import asyncio
|
|
|
|
# Add backend to path so we can import modules
|
|
backend_path = os.path.join(os.path.dirname(__file__), '..', 'backend')
|
|
sys.path.insert(0, backend_path)
|
|
|
|
# Now import the bot creator and config
|
|
from config import TELEGRAM_BOT_TOKEN_A, TELEGRAM_BOT_TOKEN_B
|
|
import database as db
|
|
|
|
# Import bot after path is set
|
|
telegram_bots_path = os.path.join(backend_path, 'telegram-bots')
|
|
sys.path.insert(0, telegram_bots_path)
|
|
|
|
from bot import create_bot
|
|
from telegram import Update
|
|
|
|
|
|
async def setup_database():
|
|
"""Initialize database tables if needed."""
|
|
print("🗄️ Initializing database...")
|
|
await db.init_db()
|
|
print("✅ Database ready!")
|
|
|
|
|
|
async def run_bots_async():
|
|
"""Start both Bot A and Bot B concurrently so pending_coordinations is shared."""
|
|
bots = []
|
|
|
|
if TELEGRAM_BOT_TOKEN_A:
|
|
bot_a = create_bot(TELEGRAM_BOT_TOKEN_A)
|
|
bots.append(("A", bot_a))
|
|
print(f"✅ Bot A configured: {TELEGRAM_BOT_TOKEN_A[:20]}...")
|
|
else:
|
|
print("⚠️ TELEGRAM_BOT_TOKEN_A not set — skipping Bot A")
|
|
|
|
if TELEGRAM_BOT_TOKEN_B:
|
|
bot_b = create_bot(TELEGRAM_BOT_TOKEN_B)
|
|
bots.append(("B", bot_b))
|
|
print(f"✅ Bot B configured: {TELEGRAM_BOT_TOKEN_B[:20]}...")
|
|
else:
|
|
print("⚠️ TELEGRAM_BOT_TOKEN_B not set — skipping Bot B (only 1 bot)")
|
|
|
|
if not bots:
|
|
print("❌ No bot tokens found. Check your .env file.")
|
|
return
|
|
|
|
print(f"\n🚀 Launching {len(bots)} bot(s) in parallel...")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
# Initialize all bots and run them concurrently
|
|
tasks = []
|
|
for name, app in bots:
|
|
await app.initialize()
|
|
await app.start()
|
|
print(f"▶️ Bot {name} is polling...")
|
|
tasks.append(app.updater.start_polling(allowed_updates=Update.ALL_TYPES))
|
|
|
|
await asyncio.gather(*tasks)
|
|
|
|
|
|
def main():
|
|
"""Run Bot A (and optionally Bot B) with full feature set."""
|
|
print("=" * 60)
|
|
print("🤖 Starting negoT8 Bots (Full Feature Set)")
|
|
print("=" * 60)
|
|
print()
|
|
print("📋 Features enabled:")
|
|
print(" • /start — Welcome message")
|
|
print(" • /personality — Set agent negotiation style (5 types)")
|
|
print(" • /coordinate @u — Start a coordination request (User A)")
|
|
print(" • /pending — View & accept incoming requests (User B)")
|
|
print(" • /help — View all commands")
|
|
print()
|
|
|
|
if not TELEGRAM_BOT_TOKEN_A and not TELEGRAM_BOT_TOKEN_B:
|
|
print("❌ ERROR: No bot tokens found in environment!")
|
|
print(" Make sure your .env file has TELEGRAM_BOT_TOKEN_A (and optionally _B) set.")
|
|
return
|
|
|
|
# Setup database
|
|
asyncio.run(setup_database())
|
|
|
|
print("🚀 Bots are now running... Press Ctrl+C to stop")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
try:
|
|
asyncio.run(run_bots_async())
|
|
except KeyboardInterrupt:
|
|
print("\n\n👋 Bots stopped by user")
|
|
except Exception as e:
|
|
print(f"\n\n❌ Bot crashed: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|