74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
from telegram import Update, ForceReply
|
|
import logging
|
|
from pxy_openai.assistants import OpenAIAssistant
|
|
from .models import TelegramBot
|
|
from asgiref.sync import sync_to_async
|
|
from pxy_langchain.models import AIAssistant
|
|
from pxy_langchain.services import LangchainAIService
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
async def dream_city_command(update: Update):
|
|
"""Send a message with a link to the random city generator."""
|
|
message = (
|
|
"Descubre la ciudad de tus sueños! Haz clic en el enlace para explorar una ciudad generada aleatoriamente que podría reflejar tus aspiraciones urbanas: "
|
|
"https://app.polisplexity.tech/city/digital/twin/dream/?innovation=30&technology=30&science=40"
|
|
)
|
|
await update.message.reply_text(message)
|
|
|
|
|
|
async def start(update: Update):
|
|
"""Send a message when the command /start is issued."""
|
|
user = update.effective_user
|
|
await update.message.reply_html(
|
|
rf"Hi {user.mention_html()}!",
|
|
reply_markup=ForceReply(selective=True),
|
|
)
|
|
|
|
|
|
async def help_command(update: Update):
|
|
"""Send a message when the command /help is issued."""
|
|
user = update.effective_user
|
|
await update.message.reply_text(f"Help! How can I assist you, {user.first_name}?")
|
|
|
|
|
|
async def handle_location(update: Update):
|
|
"""Respond to a location message."""
|
|
location = update.message.location
|
|
if location:
|
|
await update.message.reply_text(
|
|
f"Thanks for sharing your location! Latitude: {location.latitude}, Longitude: {location.longitude}"
|
|
)
|
|
else:
|
|
await update.message.reply_text("Please share your location.")
|
|
|
|
|
|
async def respond(update, bot_name):
|
|
"""Respond to user messages using the LangChain AI service."""
|
|
try:
|
|
user_message = update.message.text
|
|
|
|
# Fetch the Telegram bot and its assigned AI assistant asynchronously
|
|
telegram_bot = await sync_to_async(TelegramBot.objects.get)(name=bot_name, is_active=True)
|
|
|
|
if not telegram_bot.assistant:
|
|
raise ValueError(f"No assistant configured for bot '{bot_name}'.")
|
|
|
|
# Fetch the AI assistant linked to this bot
|
|
assistant = await sync_to_async(AIAssistant.objects.get)(name=telegram_bot.assistant.name)
|
|
|
|
# Initialize AI service
|
|
ai_service = LangchainAIService(assistant)
|
|
|
|
# Generate response asynchronously
|
|
bot_response = await sync_to_async(ai_service.generate_response)(user_message)
|
|
|
|
await update.message.reply_text(bot_response)
|
|
|
|
except TelegramBot.DoesNotExist:
|
|
await update.message.reply_text(f"Bot '{bot_name}' not found or inactive.")
|
|
except Exception as e:
|
|
await update.message.reply_text(f"Oops! Something went wrong: {e}")
|