Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import os | |
| from dotenv import load_dotenv | |
| import requests | |
| import asyncio | |
| from telegram import Update | |
| from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes | |
| # Page config | |
| st.set_page_config(page_title="Meme Bot Setup", page_icon="π") | |
| # Load environment variables | |
| load_dotenv() | |
| TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") | |
| IMAGE_API_KEY = os.getenv("IMAGE_API_KEY") | |
| # Initialize session state | |
| if 'bot_running' not in st.session_state: | |
| st.session_state.bot_running = False | |
| def format_meme_prompt(user_input): | |
| """Format user input into a meme-specific prompt""" | |
| return f"Create a funny meme that shows: {user_input}. Make it in classic meme style with impact font text. Make it humorous and shareable. The image should be meme-worthy and entertaining." | |
| def save_credentials(telegram_token, openai_key | |
| ): | |
| """Save credentials to .env file""" | |
| try: | |
| with open('.env', 'w') as f: | |
| f.write(f'TELEGRAM_BOT_TOKEN="{telegram_token}"\n') | |
| f.write(f'IMAGE_API_KEY="{openai_key}"\n') | |
| return True | |
| except Exception as e: | |
| st.error(f"Error saving credentials: {str(e)}") | |
| return False | |
| async def test_meme_generation(prompt): | |
| """Test meme generation with OpenAI API""" | |
| api_key = os.getenv("IMAGE_API_KEY") | |
| if not api_key: | |
| return None, "OpenAI API key not found" | |
| formatted_prompt = format_meme_prompt(prompt) | |
| headers = {"Authorization": f"Bearer {api_key}"} | |
| data = { | |
| "prompt": formatted_prompt, | |
| "size": "1024x1024", | |
| "model": "dall-e-3" | |
| } | |
| try: | |
| response = requests.post( | |
| "https://api.openai.com/v1/images/generations", | |
| json=data, | |
| headers=headers, | |
| timeout=100 | |
| ) | |
| if response.status_code == 200: | |
| return response.json()["data"][0]["url"], None | |
| else: | |
| return None, f"API Error: {response.status_code} - {response.text}" | |
| except Exception as e: | |
| return None, f"Request failed: {str(e)}" | |
| # Main UI | |
| st.title("π Meme Bot Setup") | |
| st.markdown("Configure your Telegram bot to generate memes!") | |
| # Credentials Section | |
| st.header("Bot Configuration") | |
| with st.form("credentials_form"): | |
| telegram_token = st.text_input( | |
| "Telegram Bot Token", | |
| value=os.getenv("TELEGRAM_BOT_TOKEN", ""), | |
| type="password", | |
| help="Get this from @BotFather on Telegram" | |
| ) | |
| openai_key = st.text_input( | |
| "OpenAI API Key", | |
| value=os.getenv("IMAGE_API_KEY", ""), | |
| type="password", | |
| help="Get this from OpenAI Platform" | |
| ) | |
| save_button = st.form_submit_button("Save Credentials") | |
| if save_button: | |
| if telegram_token and openai_key: | |
| if save_credentials(telegram_token, openai_key): | |
| st.success("Credentials saved successfully!") | |
| load_dotenv() | |
| else: | |
| st.error("Please provide both API keys") | |
| # Test Meme Generation | |
| st.header("Test Meme Generation") | |
| test_prompt = st.text_input( | |
| "Enter your meme idea", | |
| placeholder="e.g., 'When you forget to save your work'" | |
| ) | |
| if st.button("Generate Test Meme"): | |
| if not os.getenv("IMAGE_API_KEY"): | |
| st.error("Please set the OpenAI API key first") | |
| else: | |
| with st.spinner("Creating your meme..."): | |
| image_url, error = asyncio.run(test_meme_generation(test_prompt)) | |
| if error: | |
| st.error(error) | |
| else: | |
| st.image(image_url, caption="Your Generated Meme") | |
| st.success("Meme generated successfully!") | |
| # Bot Status | |
| st.header("Bot Status") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| if st.button("Start Bot" if not st.session_state.bot_running else "Stop Bot"): | |
| if not st.session_state.bot_running: | |
| if not os.getenv("TELEGRAM_BOT_TOKEN"): | |
| st.error("Please set the Telegram Bot Token first") | |
| else: | |
| st.session_state.bot_running = True | |
| st.success("Bot started!") | |
| st.rerun() | |
| else: | |
| st.session_state.bot_running = False | |
| st.warning("Bot stopped") | |
| st.rerun() | |
| with col2: | |
| status = "π’ Running" if st.session_state.bot_running else "π΄ Stopped" | |
| st.write(f"Status: {status}") | |
| # Instructions | |
| with st.expander("How to Use"): | |
| st.markdown(""" | |
| ### Setup Steps: | |
| 1. Get a Telegram Bot Token from [@BotFather](https://t.me/botfather) | |
| 2. Get an OpenAI API key from [OpenAI Platform](https://platform.openai.com) | |
| 3. Enter both keys above and save | |
| 4. Start the bot | |
| ### Using the Bot: | |
| 1. Find your bot on Telegram | |
| 2. Send /start to begin | |
| 3. Send any text to generate a meme | |
| ### Example Prompts: | |
| - "When the code works on first try" | |
| - "Me explaining why I need another monitor" | |
| - "That moment when you forget to git commit" | |
| """) | |
| # Footer | |
| st.markdown("---") | |
| st.markdown("Made for generating awesome memes π") |