mybot / app.py
djontros's picture
Update app.py
63e29f5 verified
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, ContextTypes, filters, CallbackQueryHandler
import google.generativeai as genai
import os
# === Настройки ===
os.environ["TELEGRAM_BOT_TOKEN"] = "8159814432:AAGPG5YC3vhzNif1oAZbeFaZ74vaGnvTnBM"
os.environ["GEMINI_API_KEY"] = "AIzaSyDo0WsJFk7ibsvRIjXOM_v0WvD7QLrK0Qc"
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
# === Логирование ===
import logging
logging.basicConfig(level=logging.INFO)
# === Инициализация Gemini ===
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-1.5-flash-latest")
# === Главное меню с кнопками ===
def get_menu():
return InlineKeyboardMarkup([
[InlineKeyboardButton("🧠 Задать вопрос", callback_data='ask')],
[InlineKeyboardButton("🧩 Пример запроса", callback_data='example')],
[InlineKeyboardButton("🧹 Очистить контекст", callback_data='clear')],
])
# === Команда /start ===
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("🤖 Выберите действие:", reply_markup=get_menu())
# === Обработка нажатий на кнопки ===
async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer() # Важно! Без этого Telegram будет ждать ответа
if query.data == 'ask':
await query.edit_message_text("✍️ Напишите свой вопрос.")
elif query.data == 'example':
await query.edit_message_text("🧪 Пример: \"Объясни теорию относительности\"")
elif query.data == 'clear':
context.user_data['history'] = []
await query.edit_message_text("🧹 Контекст очищен.")
# === Обработка текстовых сообщений ===
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_input = update.message.text
if 'history' not in context.user_data:
context.user_data['history'] = []
history = context.user_data['history']
history.append({'role': 'user', 'parts': [user_input]})
try:
response = model.generate_content(user_input)
reply_text = response.text
history.append({'role': 'model', 'parts': [reply_text]})
except Exception as e:
reply_text = f"⚠️ Ошибка: {str(e)}"
await update.message.reply_text(reply_text)
# === Запуск бота ===
if __name__ == "__main__":
application = ApplicationBuilder().token(TELEGRAM_BOT_TOKEN).build()
application.add_handler(CommandHandler("start", start))
application.add_handler(CallbackQueryHandler(button_handler)) # ← ВАЖНО!
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
print("✅ Бот успешно запущен...")
application.run_polling()