Найти в Дзене

Код бота:

import openai
import logging
from telegram import Update, ReplyKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters

# Токены
TELEGRAM_TOKEN = 'ваш_токен_от_BotFather'  # Замените на ваш токен
OPENAI_API_KEY = 'ваш_API_ключ_от_OpenAI'  # Замените на ваш API-ключ

openai.api_key = OPENAI_API_KEY

# Выбор модели OpenAI (можно менять модель)
OPENAI_MODEL = "gpt-4"  # Можно использовать gpt-3.5-turbo или другую модель

# Словарь для хранения контекста диалогов
user_contexts = {}

# Клавиатура с кнопкой "Начать новый диалог"
keyboard = ReplyKeyboardMarkup([['Начать новый диалог']], resize_keyboard=True)

# Функция для общения с OpenAI
async def chat_with_gpt(user_id, message):
    context = user_contexts.get(user_id, [])
    context.append({"role": "user", "content": message})

    response = openai.ChatCompletion.create(
        model=OPENAI_MODEL,
        messages=context
    )

    answer = response['choices'][0]['message']['content'].strip()
    context.append({"role": "assistant", "content": answer})
    user_contexts[user_id] = context
   
    return answer

# Обработка команды /start
async def start(update: Update, context) -> None:
    await update.message.reply_text(
        'Привет! Я бот, использующий GPT. Задай мне любой вопрос!',
        reply_markup=keyboard
    )

# Обработка нажатия кнопки "Начать новый диалог"
async def new_dialog(update: Update, context) -> None:
    user_id = update.message.from_user.id
    user_contexts[user_id] = []  # Очищаем контекст
    await update.message.reply_text(
        'Начинаем новый диалог. Задай мне новый вопрос!',
        reply_markup=keyboard
    )

# Обработка текстовых сообщений
async def handle_message(update: Update, context) -> None:
    user_id = update.message.from_user.id
    user_message = update.message.text

    if user_message == 'Начать новый диалог':
        await new_dialog(update, context)
        return

    response = await chat_with_gpt(user_id, user_message)
    await update.message.reply_text(response, reply_markup=keyboard)

# Основная функция запуска бота
def main() -> None:
    application = ApplicationBuilder().token(TELEGRAM_TOKEN).build()

    application.add_handler(CommandHandler("start", start))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))

    application.run_polling()

if __name__ == '__main__':
    main()
1 минута