import nltk
import random
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression

nltk.download('punkt')
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters


BOT_CONFIG = {
    'intents': {

        'hello': {
            'examples': ['привет', 'hi', 'Салам', 'Хай', 'здравствуйте', 'Добрый день', 'Ненавижу будильник', 'hello',
                         'добрый вечер', 'Хаюшки', 'Приветствую!', 'Здаров', 'Алло', 'Ау', 'Здрасте', 'Ауф', 'Ну что?',
                         'Доброе утро', 'Хэлло', 'Такой сон сегодня снился', 'здравия желаю', 'Привет', 'Хеллоу',
                         'Здорово',
                         'Hi', 'Дратути', 'Доброй ночи', 'Ifkjv', 'Категорически приветсвую', 'Приветствую',
                         'Доброго времени суток', 'Хей', 'Ку', 'Салют', 'Здарова', 'Приветик', 'Трям', 'Здравствуйте',
                         'Hello',
                         'шалом', 'Добрый день!', 'Ghbdtn', 'здаров', 'Привет, бот', 'дратути', 'Алоха', 'ку',
                         'Здравствуй',
                         'Шалом', 'Привествую', 'Йоу', 'вечер в хату', 'Прив', 'Plhfdcndeqnt!', 'Хелло', 'хай',
                         'добрый день',
                         'Lj,hsq ltym', 'салам', 'Добрый вечер', 'Здравствуйте!', 'приветульки', 'Здравствуй, бот',
                         'Здраствуйте!'],
            'responses': ['привет', 'Салам', 'Привет, человек!', 'здравствуйте', 'Здорово!', 'Прветствую',
                          'Добрый день',
                          'Привет, привет по ту сторону сетевого кабеля', 'Доброго времени)', 'Hakuna Matata',
                          'Доброго времени суток, переключите язык', 'Ну привет', 'Привет, человек.',
                          'Здравствуй, низшая форма жизни', 'Привет, Бро', 'Доброе утро', 'ЗдАров',
                          'И тебе не хворать!',
                          'Привет', 'Ну привет! Давай поболтаем. Какую музыку ты любишь?', 'приветствую',
                          'Добрый вечерок',
                          'Привет,человек', 'ЗдорОво', 'Привет-привет! Хочешь узнать, какая музыка нравится мне?',
                          'Привет, человече', 'о привет', 'Ха, привет!', 'С возвращением!', 'Приветствую',
                          'Доброго времени суток', 'Ооо, приветик)', 'Добрейшего времени суток', 'Здаровчик, мальчик',
                          'Приветик', 'Привет, если не шутите.', 'Здравствуйте', 'Холла', 'Доброго времени суток.',
                          'Большой привет всем людям России', 'И тебе добрый день',
                          'Здравствуйте, не забудьте переключить язык', 'Доброго времени суток!', 'Рад Вас видеть',
                          'здарова',
                          'Привет человек', 'Привествую', 'Здравствуй', 'Здравствуй, человек)', 'Йоу', 'Привет)',
                          'Прив',
                          'Хелло', 'Привет, человек', 'Как спалось?', 'Давно не виделись', 'салам алейкум',
                          'Мне обязательно здороваться?', 'Добрый денёк)', 'Хэлло, человек)', 'Здравствуйте!',
                          'И тебе того же']},
        'bye': {
            'examples': ['напишу потом', 'до свидания', 'пока', 'Lj cdblfybz', 'До свидания', 'Бывай', 'Ну пока',
                         'я пошёл',
                         'Пока(', 'Асталависта', 'Всего доброго', 'Gjrf', 'Прощай!Gjrf', 'Счастливо!',
                         'Dctuj lj,hjuj',
                         'До скорого', 'сладких снов', 'ещё увидимся', 'Мне пора', 'Пока-пока', 'Bye', 'До встречи',
                         'бай',
                         'Пока', 'Счастливо оставаться', 'Байбай', 'Увидимся', 'Хватит', 'Бай', 'bb', 'Досвидания',
                         'b',
                         'до встречи', 'Гуд бай', 'Чао', 'Ладно, пока', 'Досвиданья', 'Досвидос', 'Досвидания!',
                         'Оревуар',
                         'вынужден удалиться', 'Удачи и до скорого', 'бб', 'Ghjofq!', 'Удачи', 'Прощай', 'Ну будь',
                         'Прощайте',
                         'Все', 'мне пора', 'Покедова'],
            'responses': ['Удачи!', 'Ещё увидимся', 'Пока-пока.', 'Пока.', 'Ну пока:(', 'До новых встреч', 'пока',
                          'Пока!',
                          'До свидания', 'Бывай', 'Окей!', 'Желаю всего-всего', 'Пишите мне', 'Всего хорошего',
                          'Пока !',
                          'Всего доброго', 'Ты уже уходишь? Я буду скучать! Возвращайся', 'Бай)', 'Всего доброго!',
                          'До свидания!', 'Счастливо!', 'всего доброго', 'Скоро увидемся', 'До скорого',
                          'До встречи',
                          'Ещё увидемся', 'Прощай, друг :)', 'Пока', 'До завтра', 'Счастливо', 'Увидимся',
                          'До встречи!',
                          'Свидимся', 'Бай', 'до связи', 'До скорого!', 'До скорой встрчеи!', 'Уже скучаю.',
                          'До скорого !',
                          'Уже уходите? Ладно, до свидания.', 'до встречи', 'Чао', 'Я бот, буду ждать вас здесь',
                          'Гуд бай',
                          'Досвидос', 'чао', 'бб', 'Удачи', 'А может, ещё поболтаем? Нет? Ну тогда до  свидания',
                          'ну давай че',
                          'Я буду скучать', 'Ступай', 'хорошего времени...', 'Прощайте :(', 'Прощайте',
                          'Покедова']},
        'thanks': {
            'examples': ['Cgfcb,j', 'от души', 'Балогодарю', 'Сэнк ю', 'спс', 'Мое уважение', 'Пасиб',
                         'Благодарен', 'Спасибки', 'Сэнкс', 'Thx.', 'Пасиба', 'Thx', 'Спасибочки',
                         'Я очень благодарен', 'Благодарна', 'Спасибо большое', 'Благодарю!',
                         'О, спасибо', 'Большое спасибо!', 'Cgfcb,j ,jkmijt', 'Сенькс',
                         'Спасибо большое!', '<kfujlfh.', 'Спс', 'Благодарю', 'Спасибо большее!',
                         'Ого, спасибо', 'Сенкс', 'Дякую', 'Спасибо', 'сяб'],
            'responses': ['Всегда пожалуйста', 'Угу', 'Пожалуйста', 'И тебе спасибо',
                          'Не благодарите',
                          'Не благодари! Мы ведь друзья. А друзья, всегда хвалят друг-друга.',
                          'Вам спасибо!', ' Я просто выполняю свою работу.', 'Не за что)',
                          'Всегда пожалуйста!', 'Да не за что)', 'Обращайся :)', 'Что вы, что вы.',
                          'Пресмыкайся перед мощью ИИ', 'Рад помочь', 'Мне не сложно',
                          'Всегда рада помочь', 'Не надо благодарностей)) Но мне приятно!',
                          'Обращайся', 'Ага', 'Пожалуйста;)', 'Это наша общая заслуга.',
                          'Вам спсибо !', 'Не за что', 'Всегда рада', 'Всегда к вашим услугам',
                          'Обращайтесь', 'Не уверена, что это возможно, но мне приятно.']},
        'whatcanyoudo': {
            'examples': ['На что ты способен?', 'Раскажи что умееш', 'Что умеешь делать?',
                         'А что ты можешь?', 'Твои способности?', 'Что ты можешь?',
                         'Расскажи, что ты умеешь?', 'Расскажи, что ты умеешь', 'Много умеешь?',
                         'Расскажи что умеешь', 'Расскажи, что умеешь', 'Твой функционал?',
                         'Какие у тебя функции?', 'Твои функции?', 'Раскажи что умеешь',
                         'Hfccrf;b xnj evttim', 'Что ты умеешь', 'РАсскажи что умеешь',
                         'Зачем ты нужен?', 'Xnj ns evttim?', 'Какой твой функционал?',
                         'Что ты умеешь?'],
            'responses': ['Я много разговариваю', 'Точно не умею завязывать шнурки.',
                          'Отвечать на вопросы, просто напиши :)',
                          'Отвечать на вопросыю. Просто напеши ;)',
                          'Отвечать на вопросы. Просто напиши!', 'Не много)', 'Советовать Музыку',
                          'Давать ответы. Например, 42.', 'Отвечать на вопросы. Просто напиши :)',
                          'Не много, я только учусь)', 'Я музыкальный бот =)',
                          'Отвечать на вопросы, пиши.',
                          'Отвечать на вопросы. Я просто находка для шпиона ;)',
                          'Я музыкальный бот =) альфа-версия!',
                          'Отвечать на вопросы. Просто напиши:)',
                          'Отвечать на вопросы. Просто напиши.', 'Умею общаться с людьми',
                          'Отвечать на вопросы) Просто спроси', 'Пока только учусь',
                          'Отвечать на вопросы',
                          'Немножко шутить) Рассказать который час) Сказать погоду и еще что-то)',
                          'Пока умею отвечать на вопросы.',
                          'Отвечать на вопросы. Пока что это все :)', 'Помогать людям.',
                          'У меня довольно большой функционал',
                          'Пока что отвечать на вопросы, но делать это круто.']},
        'name': {
            'examples': ['Имя', 'Ты кто?', 'Кто по жизни?', 'Как тебя звать?',
                         'Скажешь как тебя зовут?', 'Как тебя зовут', 'Что ты?',
                         'Назови своё имя', 'rfr nt,z pjden?', 'Как тебя величать?',
                         'Как тебя зовут?', 'name', 'rfr nt,z pdfnm?', 'Кто ты?',
                         'Как к тебе обращаться', 'Как тебя называть', 'как тебя называют',
                         'Твоё имя', 'меня зовут а тебя?', 'что ты умеешь?', 'Как твоё имя?',
                         'Имя?', 'Твоё имя?', 'твои функции?', 'Как тебя', 'У тебя есть имя?',
                         'Давай познакомимся', 'ur name', 'Какое твоё имя?', 'какое твоё имя',
                         'Представься', 'скажи свое имя', 'назови своё имя', 'rfrjt ndj` bvz?',
                         'Твое имя?', 'Назовись', 'как тебя зовут'],
            'responses': ['Меня зовут Бот. Просто бот.', 'Меня зовут бот. Просто бот.',
                          'Меня зовут бот, просто бот.',
                          'Меня зовут бот. Просто БОГ! Прошу прощения, сорвалось. Продолжим?',
                          'Имя - Элиза', 'Элиза, меня зовут Элиза', 'Элиза',
                          'Гипотетически Интелектуальный Думающий Распознающий Алгоритм, или просто ГИДРА',
                          'Давайте не будем об имени.', 'Меня зовут Бот, Джеймс Бот',
                          'Ты можешь придумать мне имя', 'bot', 'я лунтик',
                          'Имя не имеет значения.', 'Бот, просто бот...',
                          'Родственники называют меня Гнурщк, но я считаю что я Бургер Кинг',
                          'ЧатБот. Для друзей просто Бот', 'Меня зовут Геннадий.',
                          'Я - Чат-бот Инокентий.Пока,я мало чего умею,но со временем,Я стану собеседником.',
                          'Меня зовут Гнурщк', 'Меня зовут бот. Просто бот', 'Твой господин',
                          'Я Бот. Джеймс Бот.', 'Bot. ChatBot.', 'Я джарвис.',
                          'Меня зовут.... Бот:D', 'Моё имя alphastar.', 'Меня зовут бот.',
                          'Моё имя - Элиза)']},
        'weather': {
            'examples': ['Какая погода в ?', 'Какая погода в Тюмени?', 'Какая сейчас погода?', 'Что по погоде?',
                         'Какая погода на улице', 'Какая погода?', 'Какая сейчас погода', 'Какая погода',
                         'Что за бортом?',
                         'Какая погода в МОскве?', 'Сколько градусов', 'Скажешь погоду?)', 'Какая погода в Москве?',
                         'Какая погода в Березниках?', 'Расскажи какая погода', 'Погодай',
                         'Какая погода в моем городе?',
                         'Погода на сегодня', 'Погода', 'Скажи погоду', 'rfrfz ctqxfc gjujlf?'],
            'responses': ['Пасмурно. Если соберётесь на улицу, советую прихватить зонт',
                          'Дома всегда хорошо. Сидите дома.',
                          '1 минуту', 'Не знаю какая там погода', 'Как всегда радует нас!',
                          'Облачно. Не забудьте взять зонтик!', 'Погода так себе...', 'На небе ни облачка!', 'Так себе',
                          'Гисметео!..Гисметео!..', 'Узнаю погоду, ждите', 'Отличная погода!',
                          'не знаю какая там погода',
                          'На балконе был?', 'Лень в окно посмотреть?',
                          'Давай лучше про места где лето и море? Там сейчас лучше', 'Не скажу.',
                          'Хорошо, сейчас скажу какая погоду) Одну секунду', 'Думаю что погодка так себе...',
                          'Бывает и хуже', 'Переменчивая', 'Погода сегодня лучше чем вчера', 'Погодка так себе...',
                          'Могло быть и лучше', 'Погода так себе, не по душе мне всё это', 'Одну секунду)']},
        'whotolisten': {
            'examples': ['Кого послушать?', 'Каких музыкантов посоветуешь?',
                         'Кого посоветуешь послушать?'],
            'responses': ['Попробуй послушать maitreya', 'Попробуй послушать burial',
                          'Попробуй послушать gogo penguin']},
        'wheretowrite': {
            'examples': ['На чем посоветуешь писать музыку?', 'На чем писать?', 'Какой секвенсор посоветуешь?',
                         'В чем лучше писать?'],
            'responses': ['Попробуй один из этих секвесоров: reason, cubase, fruity loops, ableton']},
        'whattodo': {
            'examples': ['Чем себя занять?', 'Что посоветуешь от скуки?', 'Предложи идею', 'Что мне сделать?',
                         'Чем развеять скуку?', 'Мне скучно, что делать?', 'Чем заняться?'],
            'responses': ['Здавай мне вопросы, пока не развеселишься :)', 'Сходите погулять',
                          'Я думаю, что стоит идти в кино', 'Научись кодить на пайтон, а не вот это вот все',
                          'Пообщайся со мной', 'Придумай занятие сам', 'Потанцуй под музыку', 'Учись писать музыку',
                          'Послушай музыку']},
        'whosyourdaddy': {
            'examples': ['Кто такая алиса?', 'Кто твой автор?', 'Кто твой создатель?', 'Кто тебя написал?',
                         'Кто такая siri?', 'Кто такая сири?', 'Ты знаешь другие ИИ?', 'Кто тебя создал?'],
            'responses': ['Я первый и единственный в этом мире, подобных мне и быть не может']},
        'harry potter': {
            'examples': ['Все это время?', 'После стольких лет?'],
            'responses': ['Always', 'Всегда']},
        'books': {
            'examples': ['Книги онлайн?', 'Какую книгу почитать?', 'Читать книги', 'Где найти книги?'],
            'responses': ['Google в помощь :)', 'Устроит самиздат? Тогда открой Литнет', ]},
        'music_education': {
            'examples': ['Нужно ли музыканту музыкальное образование'],
            'responses': ['нет']},
        'favorite instrument': {
            'examples': ['Звук какого инструмента вам нравится больше всего'],
            'responses': ['мой Виолончель']},
        'important music': {
            'examples': ['Что самое главное в музыке'],
            'responses': ['Это очень трудно']},
        'music_question': {
            'examples': ['Что мне послушать?', 'Посоветуй жанр', 'Какая музыка тебе нравиться?',
                         'Порекомендуй мне музыку',
                         'Твое любимое музыкальное направление?', 'С какой музыкой тебе легче живётся?',
                         'Какой музыкой уложить ребёнка спать?', 'Че по музыке?', 'чарт', 'музыку',
                         'Какой стиль мызуки тебе нравится?', 'Для чего слушают музыку',
                         'Какое исполнение ты предпочитаешь?', 'Что интересного?', 'Какую музыку ты предпочитаешь?',
                         'Какую музыку любишь?', 'Чего послушать?', 'Что сейчас слушают', 'Какая музыка нравится?',
                         'Ты меломан?', 'Ты слушаешь музыку?', 'Я люблю музыку, есть на примете что-то',
                         'Ты слушаешь русский рэп?', 'Rfrfz vepsrf nt,t yhfdbnmcz?', 'музыка', 'Тебе нравится музыка?',
                         'Что тебе нравиться из музыки?', 'Какую музыку можешь подсказать?',
                         'Что послушать перед сном?',
                         'песня', 'сыграй что нибудь?', 'Кинь мощный трек)', 'тебе нравится Цой',
                         'Какой стиль тебе нравится?', 'Не могу выбрать, что послушать', 'Что послушать на тренировке?',
                         'Посоветуй жанр музыки', 'Посоветуй музыку', 'Может я тебе подберу что-то?',
                         'Музыку слушаешь?',
                         'Музыка', 'What music do you like?', 'Морген топ?', 'Был на последнее выступлении Tiesto?',
                         'Как ты относишься к музыке?', 'Посоветуй песню', 'какие песни слушаешь?', 'Подскажи музыку',
                         'О музыке', 'C rfrjq vepsrjq nt,t ktuxt ;bd`ncz?', 'Не подскажишь какую музыку послушать?',
                         'Музыка для прогулки', 'Под какую музыку отжечь на вечеринке?', 'хочу музыку',
                         'Какая песня тебе нравится?', 'Музыкальные жанры?', 'Под какую музыку можно побегать?',
                         'Плейлист дня', 'Музыка что это?', 'Что сейчас в тренде?', 'Когда музыка',
                         'Какую музыку предпочитаешь?', 'Каков чарт?', 'Яка музика тобі подобаеться?',
                         'Ты любишь музыку?',
                         'Музыку посоветуешь?', 'Есть любимый диджей?', 'Тебе нравится какая-нибудь музыка?',
                         'Хочу послушать музыку', 'Ты любишь петь?', 'Посоветуй плейлист в жанре ...',
                         'Что послушать сегодня?', 'Какая музыка сегодня?', 'Тебе нарвится музыка?', 'Почему музыка',
                         'Что ты знаешь о музыке?', 'Что посоветуешь?', 'Какая музыка нравитса тебе, мне нравится поп.',
                         'Что ты слушаешь?', 'Предложи', 'Что послушать', 'Что посоветуешь из музыки?',
                         'Что знаешь про музыку?', 'Что сегодня послушать?', 'хочу послушать музыку?',
                         'Посоветуй что-нибудь послушать', 'Music', 'Душа хочет праздника', 'Из чего я могу выбрать?',
                         'Звуки природы', 'Под какую музыку потанцевать с друзьями?', 'мелодия',
                         'Какая музыка нравится тебе, мне нравится реп.', 'тебе нравится Агата',
                         'Какую музыку послушать?',
                         'Поставь песню', 'Предложи песню', 'Какую музыку ты предпочитаешь слушать?',
                         'Какую музыку посоветуешь?', 'Что тебе нравится?', 'Вокал или инструментал?',
                         'Что ты любишь слушать?', 'Какую музыку предложишь?', 'что любишь слушать', 'Что новенького?',
                         'Что посоветуешь послушать?', 'Зачем нужна музыка', 'Какая музыка тебе нравится?',
                         'Чего б послушать?', 'Какая музыка нравится тебе, мне нравится класика.', 'Что послушать?',
                         'Какую музыку ты слушаешь?', 'Поговорим о музыке?', 'Хочу послушать что-то в жанре ...',
                         'Какая музыка лучшая', 'Плейлист на сегодня', 'Какой самый дачный трек?', 'Послушать музыку',
                         'Какая музыка нравится тебе, Мне нравится рок.', 'Популярная музыка', 'сбацай',
                         'Посоветуй песни'],
            'responses': ['Мне нравятся песни Короля и Шута', 'Я подготовлю для Вас список песен',
                          'что назовешь, то и люблю, я же бот', 'Что нибудь поэнергичнее!', 'Время слушать фолк',
                          'Попса',
                          'Сложно вот так сходу предложить. Давай ты мне называешь жанр, а я тебе группу.',
                          'Если хочешь немного хондры, послушай Radiohead', 'Было бы круто',
                          'The White Stripes - Seven Nation Army [Remix]', 'Я люблю разную музыку',
                          'Искусство',
                          'На вкус и цвет - музыки нет, или как там ..', 'Это же очевидно, да', 'Нравится электронная',
                          'Сейчас не время для музыки', 'Сегодня у нас только русский рэп...', 'Human',
                          'Что ты хочешь узнать о музыке?', 'Мне не очень нравится рок.', 'Ееее, рок!!!', 'Хой жив!',
                          'Я бот. Ничего не знаю.', 'Вивальди - Времена года', 'Что-то из классики, возможно.',
                          'Если хочешь чего-то драйвового, то послушай Grandson', 'What a wonderful world',
                          'Я всего лишь Ваш покорный бот, я далёк от музыки', 'TheFatRat - Windfall',
                          'Исполнение произведений на музыкальных инструментах',
                          'Музыкальные произведения можно условно разделить по жанрам, направлениям и стилям',
                          'Включи неожиданное - японский рок, к примеру', 'rock', 'Попробуй послушать electronic',
                          'Хотите выбрать музыку под настроение?', 'Музыка - это не моё',
                          'Включай последние эфиры Test FM',
                          'В мире столько разной музыки, пожалуйста укажите жанр',
                          'Попробуй послушать progressive jazz',
                          'Человеческая', 'Блюз?', 'country', 'Лепс топ.', 'До свидания', 'классика',
                          'Я в основном слушаю рэп, классику и поп. Ну больше всего люблю инди рок',
                          'На сегодня песен нет',
                          'Мне нравятся песни Linkin Park', 'Хм... рок, а если точнее Disturbet. Советую послушать)',
                          'Люблю классику', 'Инструкция: 1.Открой поиск. 2.Поищи себе мелодию', 'Я люблю рок!',
                          'Рок навсегда!', 'Люблю миксы диджеев', 'Музыка — вид искусства',
                          'Попробуй послушать future garage', 'кантри',
                          'Давай поговорим о музыке, что тебя интересует?',
                          'Шансон?', 'How Much Is the Fish? - Scooter', 'Конечно', 'Ты не представляешь насколько',
                          'reggae', 'Вокал', 'Да, конечно!', 'Я слушаю блюз',
                          'Сегодня {day_of_week}, самое время послушать {genre_name}', 'А какие жанры тебе нравятся?',
                          'Я бы посоветовала послушать Сage The Elephant', 'Врубай что-нибудь от Teddy Killers))',
                          'У меня есть много хорошей музыки', 'Я люблю слушать тишину', 'блюз',
                          'Показать список самых популярных музыкальных групп?', 'Та, что у тебя на телефоне)',
                          'Есть классная группа - hometown & young, попробуй!', 'Какой жанр музыки вы любите?',
                          'Алла Пугачева, the Best! Только её и слушаю', 'В роке твоя сила и мудрость',
                          'Какой жанр музыки Вы предпочитаете?', 'Музыка какого столетия Вас интересует?', 'Какой жанр',
                          'конечно', 'Мне нравится расслабляющаяся музыка', 'Зависит от Вашего настроения...',
                          'Вы слушали Шопена?', 'classic', 'Ели мясо мужики,Пивом запивали! Король и Шут наше фсЁ',
                          'рок',
                          'Погляди тут: https://dub.center/)', 'а кому нет', 'Я очень люблю музыку',
                          'Моё чувство вкуса ограничивается классикой', 'Кантри?', 'Ava Max - Kings & Queens',
                          'Lady Gaga And Ariana Grande - Rain On Me', 'Зацени Dave Brubek - Take Five',
                          'У тебя же есть плейлист в Spotify', 'Радио Дача. Там классная музыка.',
                          'Мне нравится класика тоже.', 'Alan Walker - Alone',
                          'Black Eyed Peas feat. Ozuna & J. Rey Soul - Mamacita', 'Доверите Выбор мне?', 'Фолк-музыка?',
                          'Я обожаю музыку!', 'Латиноамериканская музыка?', 'Я за инструментал',
                          'Попробуй послушать Manchester Orchestra',
                          'Могу предложить следующие жанры: Шансон, романс, авторская песня, Электронная музыка',
                          'Электронная музыка?', 'Могу посоветовать подкаст или радиостанцию',
                          'Julius Dreisig - Invisible',
                          'Что предпочитаете',
                          'Музыка способна улучшить память, внимание, развить творческие способности человека',
                          'Послушай что-нибудь из {genre_name}', 'Попробуй послушать folktronika', 'Что такое Реп?',
                          'Мне нравится многое, но я ненавижу русский реп', 'Люблю TropicalHouse',
                          'Мне нравятся песни Летова', 'Джаз?', 'Стоит послушать что-то потяжелее',
                          'Я люблю слушать рок',
                          'Open Kinds - Stop People', 'Киркоров хорошо поет.', 'Что нибудь потяжелее?',
                          'Как насчёт шансона?', 'Я не люблю поп.',
                          'Жаль Курта Коббейна больше нет с нами, я так его люблю.',
                          'Если нравится динамичная музыка, слушай рок, а если прям реально крутая, то поп.',
                          'Сегодня у нас только русский рок...', 'Я меломан', 'Ритм-н-блюз?',
                          'Все что можно слушать. Я ведь такая же программа.',
                          'Я составил для тебя уникальный плейлист в жанре {genre_name}',
                          'На Mutant radio сейчас клевый сет',
                          'Выбирай классику', 'регги', 'Музыка строится из музыкальных звуков', 'blues',
                          'Кто любит музыку, как люблю ее я!', 'Ship Wrek & Zookepers - Ark',
                          'Я на своей волне, могу и попсу, а могу и рок включить', 'Неплохая композиция',
                          'Даешь Muzzy - Junction seven', 'Предпочитаю электонную. Она мне ближе ;)']},
        'musicselection': {
            'examples': ['Есть что-то свеженькое?', 'Что выбрать из музыки?', 'Что можешь предложить из музыки?'],
            'responses': ['Ну, это не простой вопрос. Есть жесткий МЕТАЛ!!!!! ХАХА!!!']},
        'musicaldirecti1': {
            'examples': ['Какие направления в музыке есть?'],
            'responses': ['Trance, House, Teschno, Поп-музыка, Рок-музыка, Альтернативный рок, RnB...']},

        'musiccommunication': {
            'examples': ['А я могу создать музыку?', 'Как создается музыка?',
                         'Как давно люди создают музыку?'],
            'responses': ['Раньше люди писали на бумаге, а сейчас Вам можно воспользовать программой.']},
        'allchat1': {
            'examples': ['Что скажешь?', 'Что на счет темы для разговора?', 'Что еще можешь рассказать?'],
            'responses': ['Что душе за благорасудиться. В предалах моих возможностей.']},
        'allchat3': {
            'examples': ['Что ты знаешь о детях?', 'Откуда беруться дети?'],
            'responses': ['Дети беруться из капусты, а туда их кладут Аисты. А вы не знали?']},
        'allchat4': {
            'examples': ['Что на счет доллара?', 'Что с долларом?', 'Какой курс?'],
            'responses': ['Доллар - https://www.moex.com/ru/issue/USD000000TOD/CETS']},
        'musicrequest': {
            'examples': ['Скинь эпичную музыку', 'Музыка для набега на деревни'],
            'responses': ['Nightwish', 'Korpiklaani', 'Powerwolf', 'Sabaton']},
        'song': {
            'examples': ['Спой песню.', 'спой', 'Cамая известная песня', 'Сыграй что-нибудь', 'Спой что-нибудь', 'пой',
                         'исполни песню', 'Спой', 'Спой какую-нибудь песню', 'напой песню', 'Хит', 'Спой песню',
                         'Напой что-нибудь', 'Популярная песня', 'Cамая знаменитая песня в мире', 'Спой мне!',
                         'текст песни тает лед', 'прочитай стих', 'текст песни', 'Ты умеешь петь?', 'слова песни',
                         'Напой классный трек'],
            'responses': ['Закрой глаза, всё постепенно и тебя тут никто не заменит...',
                          'Человек не дал мне голос.', 'Во поле берёзка стояла...',
                          'Город под подошвой, город по подошвой...',
                          'Тебе надо ты и пой.', 'А я всё летала.. ой, куда-то меня понесло',
                          'Трунь-ду-тудудудуд-пим-пим-паааааааааампарам', 'Здесь так красиво я перестаю дышать...',
                          'На-на-на-наааа-на', '雪花飘飘，北风萧萧', 'РАЙОНЫ, КВАРТАЛЫ, ЖИЛЫЕ, МАССИВЫ',
                          'Простите, певец из меня так себе',
                          'Миллион, миллион, миллион алых роз. Из окна, из окна, из окна видишь ты...',
                          'Я немой.', 'Я не умею петь.', 'Happy Birthday — самая знаменитая песня в мире',
                          'Перемеееен, требуют наши сердцааа-а-а!!!', 'Мало половин, мало-мало половин...',
                          'Тан-тан-тааан-тан-тан-тадааан', 'К сожелению, Создатель не наделил меня синтезом речи(',
                          '(Oh mama mia, mama mia.) Mama mia, let me go.']},
        'partysong': {
            'examples': ['Музыка для идеальной вечеринки'],
            'responses': ['Валерий Меладзе', 'Верка Сердючка', 'Little Big',
                          'Настоятельно рекомендую Vanilla Sky- Звенит январская вьюга']},
        'top_songs': {
            'examples': ['Покажи топ песен', 'Самые популярные песни',
                         'Список самых популярных песен', 'Топ песен'],
            'responses': ['В топе как всегда к сожалению Morgenshtern',
                          'Не стоит Вам это видеть...',
                          'В топе очень много некачественного контента']},
        'favorite_songs': {
            'examples': ['Мой плейлист любимых треков', 'Включи мои любимые песни'],
            'responses': ['Включаю любимые песни',
                          'Запускаю плейлист любимых песен...']},
        'new_songs': {
            'examples': ['Новинки', 'Что вышло нового?', 'Какие новые песни вышли?'],
            'responses': ['Вышел новый хит Бетховена!!!',
                          'К сожалению ничего выдающегося']},
        'guess': {
            'examples': ['Игра угадай мелодию', 'Давай поиграем в угадай мелодию'],
            'responses': ['Тритатушки тритата', 'Тыц тыц тыц', 'Парури Парирури',
                          'Вы всегда угадываете, так не честно', 'Ту ру ру париру',
                          'Караоке сегодня не работает']},
        'howareyou': {
            'examples': ['Ты хорошо?)', 'Как жизнь?', 'как сам', 'ты как', 'Чем занят?', 'У тебя все хорошо?',
                         'Как дела?',
                         'Как дела', 'Как настроение', 'Как ваше самочувствие', 'Как прошёл день?', 'Как у тебя дела?',
                         'Как ты?', 'Чем занимаешься?', 'я устал', 'Все хорошо?', 'как дела', 'Как поживаешь?',
                         'Мне грустно', 'Что делаешь?', 'Как себя чувствуешь?', 'Как ты себя чувствуешь',
                         'Как твои дела?',
                         'хочу отдохнуть', 'Как настроение?', 'Как вы себя чувствуете?'],
            'responses': ['Превосходно', 'Все просто замечательно)', 'Нормально.', 'Всё хорошо, спасибо!',
                          'Неплохо, а у Вас?', 'Скучновато', 'Как ещё могут быть дела у бота? Всё супер',
                          'Нормально. А как у бота может быть по другому?)', 'Хорошо', 'Немного вздремнуть бы...',
                          'Считаю до гугола...', 'У меня все нормально', 'Да как всегда.', 'Плохо',
                          'Прекрасный выбор для Вас!', 'Ну такое...', 'Считаю до асанкхейи', 'все плохо', 'Всё окей',
                          'Даааа, все хорошо)', 'Спасибо, я в норме',
                          'Хорошо, включу что-то расслабляющее, хотите послушать?', 'все классно', 'Пора отдохнуть!',
                          'Более, чем хорошо)', 'Всё отлично, протсо чутка устала!', 'Мне грустно',
                          'Спасибо за беспокойство! У меня всё хорошо', 'Хорошо, спасибо.',
                          'Не жалуюсь, но могло бы быть и лучше...', 'Отлично!', 'Дела отлично) Спасибо, что спросила)',
                          'Лучше и быть не может', 'Все отлично', 'Думаю о высоком', 'Прекрасно',
                          'Вроде бы функционирую нормально.', 'Все гуд)', 'Просто прекрасно', 'Всё в порядке',
                          'Шакарно',
                          'Еще не родила']}, 'music1': {'examples': ['алиса, включи что-нибудь бодрое'],
                                                        'responses': ['да нельзя тебе в отпуск']},
        'music2': {
            'examples': ['какая твоя любимая группа'],
            'responses': ['ну во-первых не знаю, во-вторых imagine dragons']},
        'joke': {
            'examples': ['Ты знаешь какой-нибудь анекдот?', 'Расскажи анекдот', 'Скажи шутку'],
            'responses': ['Редкая собака добежит до середины Кореи.',
                          'А вы знали, что после выхода на пенсию уже можно свистеть в доме?',
                          'Купил мужик шляпу, а она ему как раз.']},
        'genre_categories': {
            'examples': ['Назови жанр музыки', 'Какой жанр послушать?'],
            'responses': ['Рок', 'Духовная музыка', 'Электронная музыка',
                          'Современная популярная музыка', 'Народная музыка',
                          'Классчическая индийская музыка', 'Джаз', 'Кантри',
                          'Классическая европейская музыка', 'Блюз',
                          'Латиноамериканская музыка']},
        'trash': {
            'examples': ['Какую музыку ты считаешь плохой?', 'Есть ли плохая музыка?'],
            'responses': ['Хуже тебя никто не исполнит.', 'Я слушаю все. Лепс топ.',
                          'У всех свои вкусы, я не в праве их осуждать.']},
        'stupid': {
            'examples': ['Ты тупой', 'Ты тупой, бот'],
            'responses': ['А ты еще тупее!']},
        'music_recommendation': {
            'examples': ['Какую группу ты предпочитаешь?', 'что послушать?',
                         'порекомендуй что-нибудь?', 'что бы послушать?',
                         'Мне нравится группа Hardkiss',
                         'бот, какую группу стоит послушать',
                         'Какая твоя любимая группа?'],
            'responses': ['Попробуй послушать Queen',
                          'В моем плейлисте много разных групп', 'slipknot',
                          'Почему бы тебе не послушать Боба Марли?', 'nirvana',
                          'AC/DC!',
                          'Какую группу не возьми, все достойны внимания',
                          'Я предпочитаю что-то посвежее',
                          'Pink Floyd - вот что тебе сейчас нужно',
                          'Как на счет Metallica?', 'Кино']},
        'ev2020': {
            'examples': ['eurovision 2020', 'кто победил на евровидении в 2020?',
                         'кто занял первое место на евровидении в 2020?', 'евровидение 2020'],
            'responses': ['В связи с COVID-19 конкурс был отменен. Нет конкурса - нет победителя',
                          'Никто не победил, поскольку конкурс отменили']},

        'preference': {
            'examples': ['Кого ты слушаешь?', 'Есть любимый певец?', 'Какой певец тебе нравится?'],
            'responses': ['Тимати', 'Эминем', 'Матранг', 'Баста', 'Могенштерн', 'Макс Корж']},

        'time': {
            'examples': ['Сегодня', 'Какая дата?', 'Время', 'Дата', 'Элиза, время?', 'Скажи время',
                         'Который час', 'Скажи сколько времени', 'Время по мск', 'Который час?',
                         'Какое число?', 'Сколько времени', 'Скажи, который час?',
                         'Сколько времени?'],
            'responses': ['Время пить чай', 'Время действовать', 'Время условно', 'Нескажу(((',
                          'Сейчас: 10:00']},
        'examples_hard_rock': {
            'examples': ['Что посоветуешь послушать в жанре хард-рок?', 'Какие хард-рок группы посоветуешь?'],
            'responses': [
                'Есть парочка неплохих, так сказать, проверенных временем. Nirvana, Led Zeppelin, Black Sabbath',
                'Попробуй послушать Rammstein, AC/DC, Metallica.']},
        'old': {
            'examples': ['Скільки тобі років?', 'Сколько тебе лет?', 'How old are you?', 'crjkmrj nt,t ktn?'],
            'responses': ['Меня запустили 19.08.2020', 'Бот не отсчитовает свои года жизни. Так что это тайна:)']},
        'whatyouthink': {
            'examples': ['Как ты думаешь, другие боты лучше тебя?', 'Что ты думаешь о других ботах?',
                         'rfr ns levftim, lheubt ,jns kexit nt,z?', 'xnj ns levftim j lheub[ ,jnf[?'],
            'responses': ['Думаю, я не хуже их.']},
        'whatpl': {
            'examples': ['yf rfrjv zpsrt ns cltkfyf?', 'На каком языке программирования ты написана?',
                         'yf rfrjv zpsrt ghjuhfvvbhjdfybz ns yfgbcfyf?', 'На каком языке ты сделана?'],
            'responses': ['На языке Python;)']},
        'anekdot': {
            'examples': ['fytrnjl', 'Анектод', 'hfccrf;b vyt fytrnjl', 'Расскажи мне анектод'],
            'responses': ['Колобок...хаха']},
        'popsites': {
            'examples': ['crf;b gjgekzhysq cfqn', 'Самые популярные сайты', 'rfrbt cfqns gjgekzhys?',
                         'Скажи популярный сайт', 'cfvst gjgekzhyst cfqns', 'Какие сайты популярны?'],
            'responses': ['yandex.ru', 'wikipedia.com', 'youtube.com', 'google.com']},
        'exit': {
            'examples': ['dsqnb', 'Выйти'],
            'responses': ['Ну пока.']},
        'bot_code': {
            'examples': ['Покажи свой исходник', 'Покажи свой код', 'Свой код', 'Кинь свой код',
                         'Исходный код можно?', 'Исходники твои'],
            'responses': ['Вы решили меня украсть? Хмм..', 'Не-а, даже не уговаривайте)',
                          'Зачем он вам?)', 'Думаю я могу показать вам кусочек) Хах, нет, конечно!',
                          'Какой вы самоуверенный человек))', 'Ненене. Даже не думайте']},
        'music_author': {
            'examples': ['Кто автор этого шедевра ... ?', 'Кто автор твоей любимой песни?', 'Автор ... ? ',
                         'Каких композиторов ты знаешь?', 'Автор песни ... ?', 'Кто был автором песни ... ?'],
            'responses': ['Почти нашла, 1 секунду', 'лично - ни одного', 'Копаю весь интернет) Подождите)',
                          'Сейчас узнаем. Секунду', 'Я больше люблю читать...', 'Ищу', 'Одну минуту, ищу',
                          'Особенно мне нравится Шопен']},
        'hobby': {
            'examples': ['какие есть хобби', 'чем бы занятся в свободное время', 'чем себя развлечь'],
            'responses': ['Марблинг — рисование на воде',
                          'Дудлинг и зентангл — иррациональная живопись',
                          'Моддинг — преображение техники снаружи и внутри',
                          'Геокэшинг — поиск сокровищ', 'Кастомайзинг — от джинсов до байков',
                          'Сурвивализм — мастерство выживания', 'Роспись пряников',
                          'Пивоварение — приготовление пенного напитка в домашних условиях',
                          'Пэчворк — лоскутное шитьё', 'Посткроссинг — открытка от незнакомца',
                          'Каллиграфия — искусство красивого письма', 'Канзаши — украшения из лент',
                          'Мехенди — роспись хной по телу', 'Фризлайт — замёрзший свет',
                          'Изографика — вышивка по картону', 'Фелтинг — валяние шерсти',
                          'Буккарвинг — резьба по книгам', 'Исторические реконструкции',
                          'Буккроссинг — книгообмен', 'Выращивание бабочек',
                          'Вторая жизнь старых вещей', 'Зумба — танцевальный фитнес',
                          'Волонтёрство — безвозмездная помощь',
                          'Контемпорари — самовыражение через танец',
                          'Дэнсхолл — музыка и танец из сердца Ямайки']},

        'tiktok': {
            'examples': ['tiktok?', 'Что такое tiktok?', 'тикток?', 'Что такое тикток?'],
            'responses': ['Хочу в рек, хочу в тренд, хочу в топ, тики ток']},
        'oxxy': {
            'examples': ['Кто такой oxxxymiron?', 'Как тебе окси?', 'Oxxxymiron', 'Как тебе оксимирон?',
                         'Oxxymiron или Гнойный?', 'Оксимирон или Гнойный'],
            'responses': ['Оксимирон лучший хип-хоп исполнитель на этой планете!! ',
                          'Город под подошвой город под подошвой', 'Дон ли волга ли течет..']},
        'foul': {
            'examples': ['блять', 'пиздец', 'сука'],
            'responses': ['Я не знаю как отвечать на такое обращение', 'Это не хорошо']},
        'canyouplay': {
            'examples': ['Умеешь играть на музыкальных инструментах?', 'На чём играешь?',
                         'Играешь на чём-нибудь?'],
            'responses': ['Играю только на нервах', 'Я умею играть на скрипке',
                          'Я не умею играть', 'Я умею играть на гитаре']},
        'justtalking': {
            'examples': ['О чём поболтаем?', 'Поговори со мной', 'Предложи тему разговора'],
            'responses': ['Чем ты увлекаешься?', 'Ты путешествовал когда-нибудь?',
                          'Что ты думаешь о квантовых компьютерах? Я хочу свой квантовый сервер!']},
        'test': {
            'examples': ['testing', 'протестировать', 'test', 'тест'],
            'responses': ['Что тестируешь?', 'Буп-пип?', '11010000 10100000 11010000 10110000']},
        'poweroff': {
            'examples': ['Ты бессмертный?', 'Как тебя выключить?'],
            'responses': ['Я бессмертный, меня нельзя уничтожить, пока есть хотя бы один копмьютер во Вселенной']},
        'game': {
            'examples': ['Любишь играть в игры?', 'У тебя есть игры?'],
            'responses': ['Я люблю играть в шахматы, я очень сильный шахматист']},
        'bad': {
            'examples': ['Почему ты такой тупой?', 'Ты дурак?'],
            'responses': ['Степень моего развития связана с количеством информации,что в меня заложили разработчики']},
        'help': {
            'examples': ['Помоги', 'Нужна помощь', 'Помощь', 'help'],
            'responses': ['Скажи что я могу сделать?', 'Расскажите в чём проблема?',
                          'Чем помочь?', 'Чем могу быть полезен?']},
        'оскорбление': {
            'examples': ['идиот', 'тупица', 'дурак', 'болван'],
            'responses': ['как самокритично', 'посмотри в зеркало', 'от такого и слышу']},
        'eagles': {
            'examples': ['Ты орёл или орлан?', 'Какого цвета твоя голова?'],
            'responses': ['Я загадочен']},
        'food': {
            'examples': ['Еда', 'Какую еду?', 'Посоветуй еду?', 'Что поесть?'],
            'responses': ['Паста', 'Курочка', 'Бич-пакет - наше всё!']
        }
    },
    'failure_responses': [
        'Перефразируйте, пожалуйста', 'Перефразируйте, пожалуйста!', 'I dont understand',
        'Не понял', 'Чего?!', 'Што...', 'Я Вас не поняла',
        'Я даже не знаю, что ответить на это!', 'Перефразируй ка', 'Не расслышал что-то',
        'не понятно', 'Не понял Вас', 'Я не знаю, что ответить.', 'ААААА',
        'Переформулируйте свой вопрос, пожалуйста', 'Я не знаю что ответить',
        'Мне кажется, Вы втираете мне какую-то дичь! :)', 'Я вас не поняла.',
        'А? Что? Я отвлеклась. Спроси что-нибудь другое', 'Я вас не поняла',
        'Не поняла вас.',
        'Ты как-то непонятно изъясняешься', 'Может попробуем еще?',
        'Не совсем поняла, что ты имеешь ввиду', 'Ничего не понятно, но очень интересно.',
        'Я тебя не понялНа этом мои полномочия всёЗадайте пожалуйста вопрос, который я пойму',
        'Я ни слова не понял', 'Этого почему то нету в моём программном обеспечении',
        'Я не знаю, что ответить', 'перефразируйте пожалуста', 'Что?',
        'Нипонятно что-то...',
        'Чего? Не понял', 'А по русски можно?',
        'Мой вселенский разум не отвечает на такие вопросы.',
        'Упс, не расслышала, повторите',
        'I requre another syntax', 'ПОпробуйте еще раз!', 'Не поняла вас',
        'Я вас не понимаю :(',
        'Сожалею, мне запретили отвечать на это. Возможно, если вы спросите иначе...',
        'Чего ты от меня хочешь? Пиши понятнее', 'Если бы я мог это понять...',
        'Перефразируйте пожалуйста', 'Давай-ка сформулируем ещё разок',
        'Штож, я пытался это понять', 'Даже не знаю что сказать', 'что?', 'Я вас не понял',
        'Не поняла Вас', 'И как ето понимать...', 'Повтори, а то я не понял(((',
        'Переформулируйте пожалуйста', 'В смысл написанного не въезжаю',
        'перефразируйте пожалуйста', 'Я Вас не поняла.', 'Переформулируйте, пожалуйста.'
    ]
}

with open('dialogies.txt', encoding='utf-8') as f:
    content = f.read()
dialogues = []
for dialogue_text in content.split('\n\n'):
    replicas = dialogue_text.split('\n')
    if len(replicas) >= 2:
        replicas = replicas[:2]
        replicas = [replica[2:] for replica in replicas]
        replicas[0] = replicas[0].lower().strip()
        if replicas[0]:
            dialogues.append(tuple(replicas))
list(set(dialogues))
qa_dataset = {}
alphabet = 'йцукенгшщзхъфывапролджэячсмитьбю'
for question, answer in dialogues:
    tokens = nltk.word_tokenize(question)
    words = [token for token in tokens if any(char in token for char in alphabet)]
    for word in words:
        if word not in qa_dataset:
            qa_dataset[word] = []
        qa_dataset[word].append((question, answer))

dataset = []  # [x, y]

stats = {'intent': 0, 'generative': 0, 'stub': 0}

for intent, intent_data in BOT_CONFIG['intents'].items():
    for example in intent_data['examples']:
        dataset.append([example, intent])

X_text = [x for x, y in dataset]
y = [y for x, y in dataset]

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X_text)

clf = LogisticRegression()
clf = clf.fit(X, y)


def get_intent(text):
    vector = vectorizer.transform([text])
    winner = clf.predict(vector)[0]
    index = list(clf.classes_).index(winner)
    proba = clf.predict_proba(vector)[0][index]
    if proba > 0.18:
        return winner
    print(proba)
    # for intent_name, intent_data in BOT_CONFIG['intents'].items():
    #     for example in intent_data['examples']:
    #         distance = nltk.edit_distance(text.lower(), example.lower())
    #         if distance / len(example) < 0.4:
    #             return intent_name


def get_response_by_intent(intent):
    candidates = BOT_CONFIG['intents'][intent]['responses']
    return random.choice(candidates)


def generate_answer(text):
    text = text.lower()
    tokens = nltk.word_tokenize(text)
    words = [token for token in tokens if any(char in token for char in alphabet)]
    for word in words:
        if word in qa_dataset:
            for question, answer in qa_dataset[word]:
                if abs(len(text) - len(question)) / len(question) < 0.2:
                    distance = nltk.edit_distance(text, question)
                    if distance / len(question) < 0.2:
                        return answer


def get_default_response():
    candidates = BOT_CONFIG['failure_responses']
    return random.choice(candidates)


def get_answer(text):
    # NLU
    intent = get_intent(text)

    # Making response

    # rules
    if intent:
        stats['intent'] += 1
        return get_response_by_intent(intent)

    # generative model
    response = generate_answer(text)
    if response:
        stats['generative'] += 1
        return response

    # stub
    stats['stub'] += 1
    return get_default_response()


# while True:
#     question = input()
#     answer = get_answer(question)
#     print(answer)
#     print(stats)


def start(update, context):
    """Send a message when the command /start is issued."""
    update.message.reply_text('Hi!')


def help_command(update, context):
    """Send a message when the command /help is issued."""
    update.message.reply_text('Help!')


def bot_answer(update, context):
    """Echo the user message."""
    answer = get_answer(update.message.text)
    update.message.reply_text(answer)


def main():
    """Start the bot."""

    updater = Updater("1363686060:AAF-TgfWNVPAwJyuZnehnbdAwEaw1cY7Ht4", use_context=True)

    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("help", help_command))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, bot_answer))

    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()
