В боте есть функция диалога с ИИ openAI.
Я запускаю бот.
Пишу любое сообщение и мне API openAI выдаёт ответ. Тоесть почему-то запускается функция диалога. Но я хочу, чтобы эта функция запускалась лишь после нажатия на инлайн кнопку, предназначеную для диалога. И отключалась функция после нажатия кнопки завершения диалога.
Но не получается. Функция диалога работает автоматически после старта бота. Почему?
Главный файл
import logging
from aiogram import Dispatcher, types, executor
import asyncio
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import filters
from aiogram.types import *
import env
from env import bot
import buttons
import chatGPThandler
from chatGPThandler import *
bot=env.bot
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
#СТАРТ
async def start_handler(message: types.Message):
await message.answer("Привет!", reply_markup=buttons.mainbtns)
#ХЭНДЛЕРЫ
def register_start_message(dp: Dispatcher):
dp.register_message_handler(start_handler, commands="start")
def register_chatGPT_inline(dp: Dispatcher):
dp.register_callback_query_handler(lambda query: chatGPT_handler(query, dp.current_state(chat=query.message.chat.id)), lambda query: query.data == "chatGPT")
dp.register_message_handler(chatGPT_text, content_types=ContentTypes.TEXT)
dp.register_callback_query_handler(lambda query: chatGPT_handler(query, dp.current_state(chat=query.message.chat.id)), lambda query: query.data == "endchatGPT")
async def register_handlers():
register_start_message(dp)
register_chatGPT_inline(dp)
#ЗАПУСК
async def on_startup(dp):
await register_handlers()
logging.basicConfig(level=logging.INFO)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True, on_startup=on_startup)
Модуль с openAI
from aiogram import types
from types import *
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher import filters
from aiogram.dispatcher.filters import Command, Text
from aiogram.types import ContentTypes
from aiogram.dispatcher import Dispatcher
import openai
import buttons
openai.api_key = ("Токен")
STATE_QUESTION = 0
STATE_ANSWER = 1
async def chatGPT_handler(query: types.CallbackQuery, state: FSMContext):
if query.data == "chatGPT":
await query.message.answer(text="Задай вопрос:")
await state.set_state(STATE_QUESTION)
async def chatGPT_text(message: types.Message, state: FSMContext):
question = message.text
response = openai.Completion.create(
engine="text-davinci-002",
prompt=f"Answer the following question: {question}",
temperature=0.5,
max_tokens=1024,
n = 1,
stop=None,
timeout=60,
)
# Отправляем полученный ответ пользователю
await state.set_state(STATE_ANSWER)
answer = response.choices[0].text.strip()
await message.answer (answer, reply_markup=buttons.endchatGPT)
async def chatGPT_ends(query: types.CallbackQuery, state: FSMContext):
if query.data == "btn3":
await state.finish()
await query.message.edit_text(text="Главное меню", reply_markup=buttons.mainbtns)
Модуль с кнопками
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
#КНОПКА ЗАВЕРШИТЬ ДИАЛОГ
btn3 = InlineKeyboardButton("Завершить диалог", callback_data="btn3")
endchatGPT = InlineKeyboardMarkup(row_width=1).add(btn3)
#ГЛАВНОЕ МЕНЮ
btn1 = InlineKeyboardButton("chatGPT", callback_data="btn1")
btn2 = InlineKeyboardButton("кнопка2", callback_data="btn2")
mainbtns = InlineKeyboardMarkup(row_width=1).add(btn1, btn2)