Last commit not found
import logging | |
import httpx | |
import asyncio | |
import nest_asyncio | |
import os | |
from telegram import Update | |
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackContext | |
import subprocess # to remove | |
# import socket # maybe to remove | |
# maybe remove | |
# # Force using Google's DNS | |
# def set_dns(): | |
# try: | |
# socket.setdefaulttimeout(5) # Set timeout for connections | |
# socket.getaddrinfo("api.telegram.org", 443, proto=socket.IPPROTO_TCP) # Force resolution | |
# print("DNS resolution successful!") | |
# except Exception as e: | |
# print(f"DNS resolution failed: {e}") | |
# set_dns() | |
# Logging setup | |
logging.basicConfig(format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO) | |
# Get environment variables | |
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") | |
if not TOKEN: | |
raise ValueError("Missing Telegram token. Please set TELEGRAM_BOT_TOKEN in environment variables.") | |
# URL of the FastAPI server (running on Hugging Face) | |
API_URL = "https://demaking-decision-helper-bot.hf.space/generate_response" | |
async def fetch_response(user_text: str): | |
async with httpx.AsyncClient(timeout=45.0) as client: | |
try: | |
response = await client.post(API_URL, json={"text": user_text}) | |
response.raise_for_status() # throws exception if the API returns 4XX/5XX errors | |
return response.json() | |
except httpx.HTTPStatusError as e: | |
logging.error(f"HTTP Error: {e.response.status_code} - {e.response.text}") | |
return {"response": "Error: API returned an error."} | |
except httpx.RequestError as e: | |
logging.error(f"Request Error: {e}") | |
return {"response": "Error: Could not reach API."} | |
except Exception as e: | |
logging.error(f"Unexpected Error: {e}") | |
return {"response": "Error: Unexpected error occurred."} | |
async def handle_message(update: Update, context: CallbackContext): | |
user_text = update.message.text | |
logging.info(f"User message: {user_text}") | |
# Send request to HF API | |
result = await fetch_response(user_text) | |
response_text = result.get("response", "Error generating response.") | |
logging.info(f"API Response: {response_text}") | |
await update.message.reply_text(response_text) | |
async def start(update: Update, context: CallbackContext): | |
await update.message.reply_text("Hello! Tell me your decision-making issue, and I'll try to help.") | |
logging.info("Start command received.") | |
nest_asyncio.apply() | |
async def main(): | |
application = Application.builder().token(TOKEN).build() | |
# Handlers | |
application.add_handler(CommandHandler("start", start)) | |
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) | |
# Start polling | |
logging.info("Starting bot in polling mode...") | |
await application.initialize() | |
await application.run_polling() | |
# to remove | |
async def test_telegram_connection(): | |
try: | |
async with httpx.AsyncClient() as client: | |
response = await client.get("https://api.telegram.org") | |
print(f"Telegram API Status: {response.status_code}") | |
except Exception as e: | |
print(f"Error connecting to Telegram API: {e}") | |
asyncio.run(test_telegram_connection()) # to remove | |
# to remove | |
def check_dns(): | |
try: | |
result = subprocess.run(["nslookup", "api.telegram.org"], capture_output=True, text=True) | |
print("DNS Lookup Result:\n", result.stdout) | |
except Exception as e: | |
print(f"Error running nslookup: {e}") | |
check_dns() | |
if __name__ == "__main__": | |
asyncio.run(main()) | |