from aiogram.utils import executor
from loguru import logger
from aiogram import Bot, Dispatcher, types
from functions import get_audio_messages_func, create_statistic, openai_answer

bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI")  # создаю объект бота
dp = Dispatcher(bot)  # создаю объект слушателя
logger.remove()  # удаляю стандартный логер
logger.add("logs/logging_log.log", level="INFO")  # создаю логер


@dp.message_handler(commands=['start'])  # обрабатываю команду start
async def start(message: types.Message):
    # получаю имя отправителя
    if message.chat.first_name:
        name = message.chat.first_name
    else:
        name = message.chat.title
    logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота")  # записываю в логи
    await bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!')  # отправляю ответное сообщение


@dp.message_handler(commands=['statistic'])
async def statistic(message: types.Message):
    if message.chat.id != "":
        for i in create_statistic.create_statistic():
            await bot.send_message(message.chat.id, i)
        await bot.delete_message(message.chat.id, message.message_id)
    else:
        await bot.delete_message(message.chat.id, message.message_id)
        await bot.send_message(message.chat.id, "У вас нет прав на просмотр статистики")


@dp.message_handler(commands=['response'])
async def answer(message: types.Message):
    openai_answer.get_response(message)
    await message.answer_document(open("response_ru.txt", "rb"), reply=True)
    await message.answer_document(open("resource_ru_not_translate.txt", "rb"), reply=True)


@dp.message_handler(commands=['r'])
async def r(message: types.Message):
    import openai
    openai.api_key = "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"
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=' '.join(message.text.split()[1:]),
        temperature=0.5,
        max_tokens=1000,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.0
    )
    for i in response['choices']:
        await bot.send_message(message.chat.id, f"ChatGPT\n{i['text']}",
                               parse_mode=None, reply_to_message_id=message.message_id)


@dp.message_handler(content_types=['voice', 'video_note', 'video'])  # обрабатываю голосовые сообщения, кружки, видео
async def get_audio_messages(message: types.Message):
    await get_audio_messages_func.get_audio_messages_func(message, logger, bot)  # вызываю функцию


def start_work_bot():  # функция запуска бота
    logger.info("Бот запустился")  # записываю логи
    executor.start_polling(dp, skip_updates=False)  # запускаю pooling без пропуска пропущенных сообщений
