import telebot import gradio as gr from gradio_client import Client import os import logging import socks import socket import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry import threading # Proxy configuration PROXY_HOST = '64.29.87.81' PROXY_PORT = 48558 PROXY_USERNAME = 'KNaDX4iRd2t6El0' PROXY_PASSWORD = 'NleyoQHQJwHbqSH' # Configure SOCKS proxy socks.set_default_proxy(socks.SOCKS5, PROXY_HOST, PROXY_PORT, username=PROXY_USERNAME, password=PROXY_PASSWORD) socket.socket = socks.socksocket # Create a custom requests session with proxy session = requests.Session() session.proxies.update({ 'http': f'socks5://{PROXY_USERNAME}:{PROXY_PASSWORD}@{PROXY_HOST}:{PROXY_PORT}', 'https': f'socks5://{PROXY_USERNAME}:{PROXY_PASSWORD}@{PROXY_HOST}:{PROXY_PORT}', }) # Add retry strategy to the session retry_strategy = Retry( total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount('http://', adapter) session.mount('https://', adapter) # Initialize the client for image generation client_image = Client("mukaist/DALLE-4K") # Define resolutions resolutions = { "896x1152": (896, 1152), "1024x1024": (1024, 1024), "1216x832": (1216, 832) } # Define the default style DEFAULT_STYLE = "3840 x 2160" # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Initialize the bot with your API token API_TOKEN = 'YOUR_TELEGRAM_BOT_API_TOKEN' bot = telebot.TeleBot(API_TOKEN) def generate_image(prompt, resolution_key, style=DEFAULT_STYLE): resolution = resolutions.get(resolution_key, (1024, 1024)) width, height = resolution full_prompt = f"{prompt}, Canon EOS R5, 4K, Photo-Realistic, appearing photorealistic with super fine details, high resolution, natural look, hyper realistic photography, cinematic lighting, --ar 64:37, --v 6.0, --style raw, --stylize 750" try: result = client_image.predict( prompt=full_prompt, negative_prompt="(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation", use_negative_prompt=True, style=style, seed=0, width=width, height=height, guidance_scale=5, randomize_seed=True, api_name="/run" ) logger.info("Image generation successful.") return result except Exception as e: logger.error(f"Error generating image: {e}") return None def gradio_interface(prompt, resolution_key): result = generate_image(prompt, resolution_key) if result and result[0]: file_path = result[0][0].get('image') if file_path and os.path.exists(file_path): return file_path, "The image was generated successfully." else: return None, "The image file is not available. Please try again later." else: return None, "There was an error processing your photo. Please try again later." def create_gradio_interface(username): description = f"Welcome, {username}! Generate images based on prompts." with gr.Blocks() as interface: gr.HTML(f"

{description}

") prompt_input = gr.Textbox(label="Prompt", placeholder="Enter your prompt here...") resolution_dropdown = gr.Dropdown(choices=list(resolutions.keys()), label="Resolution", value="1024x1024") generate_button = gr.Button("Generate") result_output = gr.Image(label="Generated Image", type="pil") message_output = gr.Textbox(label="Result", placeholder="Results will be shown here", interactive=False) generate_button.click(fn=lambda prompt, resolution_key: gradio_interface(prompt, resolution_key), inputs=[prompt_input, resolution_dropdown], outputs=[result_output, message_output]) # Add custom CSS to hide the specific footer element gr.HTML(""" """) return interface def launch_gradio(username=None): if not username: username = "Guest" # Launch the Gradio interface interface = create_gradio_interface(username) interface.launch() @bot.message_handler(commands=['start']) def handle_start(message): # Extract username from message username = message.from_user.username or "Guest" # Construct URL with username encoded_url = f"https://measmonysuon-webapp.hf.space/?username={username}" # Send a message with the inline button to open the web app markup = telebot.types.InlineKeyboardMarkup() button = telebot.types.InlineKeyboardButton( text="Open Web App", web_app=telebot.types.WebAppInfo(url=encoded_url) ) markup.add(button) bot.send_message( message.chat.id, f"Welcome, {username}! Click the button below to open the web app:", reply_markup=markup ) def run_telegram_bot(): bot.polling() # Run Gradio and Telegram bot concurrently if __name__ == "__main__": # Launch Gradio in a separate thread gradio_thread = threading.Thread(target=lambda: launch_gradio("Guest")) gradio_thread.start() # Start Telegram bot polling run_telegram_bot()