Example #1
0
def edit_price(update, context):
    """
    Выполняем проверки на корректность ввода пользователя:
    является ли ввод float и не меньше или равен он нулю
    """
    error_text = ('Повторите ввод или нажмите кнопку "Отмена".')
    try:
        new_price = float(update.message.text.replace(',', '.'))
    except ValueError:
        update.message.reply_text(
            f'В введенной стоимости присутствуют ошибки. {error_text}',
            reply_markup=back_keyboard())
        return '4'
    if new_price <= 0:
        update.message.reply_text(
            f'Стоимость не может быть равной или ниже нуля. {error_text}',
            reply_markup=back_keyboard())
        return '4'
    # Если всё ок - изменяем стоимость соответствующим методом класса
    user_id = update.effective_user.id
    ticker = context.user_data['candidates']
    if context.user_data['action']:
        Asset().edit_t_price(user_id, ticker, new_price)
        logging.info(
            f'Target price for {ticker} was updated by user {user_id}')
    else:
        Asset().edit_m_price(user_id, ticker, new_price)
        logging.info(f'Min price for {ticker} was updated by user {user_id}')
    context.user_data.pop('candidates', None)
    context.user_data.pop('action', None)
    update.message.reply_text('Стоимость успешно изменена!',
                              reply_markup=main_shares_keyboard())
    return ConversationHandler.END
Example #2
0
def chose_weight_menu(message):
    weights = product.get_pizza_weight_by_title(db.get_cache(message.chat.id))

    if message.text == '⬅ Назад':
        bot.send_message(message.chat.id,
                         'Выберите раздел, чтобы вывести список блюд 👇🏻',
                         reply_markup=keyboards.categories())
        db.delete_empty_orders(message.chat.id)
        states.set_state(message.chat.id, States.S_MENU.value)

    else:
        for w in weights:
            if message.text in w['text']:
                product_ = product.get_pizza_by_title(
                    db.get_cache(message.chat.id))
                db.add_order_pizza(message.chat.id,
                                   db.get_cache(message.chat.id),
                                   product_['comp'], w['text'],
                                   int(product_['price']) + int(w['price']),
                                   product_['picture'])
                bot.send_message(message.chat.id,
                                 'Выбор количества ⬇',
                                 reply_markup=keyboards.back_keyboard())
                bot.send_message(
                    message.chat.id,
                    '<b>' + db.get_cache(message.chat.id) + '</b>\n<b>Цена: ' +
                    str(int(product_['price']) + int(w['price'])) + '</b> — ' +
                    message.text,
                    reply_markup=keyboards.chose_amount(),
                    parse_mode='HTML')
                states.set_state(message.chat.id, States.S_CHOSE_AMOUNT.value)
Example #3
0
def edit_delete_choose(update, context):
    user_assets = context.user_data['candidates']
    """
    Ловим от пользоватея номер или название актива, сначала
    проверяем что именно отправил пользователь - номер или
    идентфикатор, а потом проверяем что такая сущность
    присутствует в списке, который лежит в контексте, т.е.
    проверяем что пользователь ввел корректные данные
    """
    try:
        selected = int(update.message.text)
        del_ticker = [i[1] for i in user_assets if i[0] == selected]
    except ValueError:
        selected = update.message.text
        del_ticker = [i[1] for i in user_assets if i[1] == selected]
    """
    Если пользователь ввел правильный номер/идентификатор, то
    переписываем переменную в контекста на название тикера,
    которым юзер хочет произвести действие
    Запрашиваем у пользователя желаемое действие
    """
    if del_ticker:
        context.user_data['candidates'] = del_ticker[0]
        update.message.reply_text('Укажите желаемое действие',
                                  reply_markup=edit_del_keyboard())
        return '2'
    else:
        update.message.reply_text(
            'Введеный номер или тикер не найден - повторите ввод.',
            reply_markup=back_keyboard())
        return '1'
Example #4
0
def edit_delete_start(update, context):
    """
    Выгружаем из БД отслеживаемые пользователем инструменты,
    если у пользователя таких нет - сообщаем ему об этом
    """
    user_assets = Asset().get_user_assets(update.effective_user.id, True)
    if not user_assets:
        update.message.reply_text('У вас нет отслеживаемых инструментов.')
        return ConversationHandler.END
    context.user_data['candidates'] = []

    reply_text = 'Вами отслеживаются следующие активы:\r\n\r\n'
    """
    Проходим циклом по выгруженным активам, выводим их пользователю и
    записываем в контекст список состоящий из номера актива
    и его идентификатора, получаем примерно такой список на выходе
    [[1, 'YNDX.ME'], [2, 'SBER.ME'], [3, 'RSTI.ME']]
    """
    for i, asset in enumerate(user_assets, start=1):
        asset_name = asset[0]
        context.user_data['candidates'].append([i, asset_name])
        reply_text += f'{i}. {asset[0]}\r\n'
    reply_text += ('\r\nДля изменения или удаления актива '
                   'отправьте его номер или название ответным сообщением.')
    update.message.reply_text(reply_text, reply_markup=back_keyboard())
    return '1'
Example #5
0
def _withdrawal_command(bot, update):
    bot.send_message(
        chat_id=bot.chat_id,
        text=lang.create_withdrawal(bot.user.balance),
        reply_markup=keyboards.back_keyboard()
    )
    return bot_states.CREATE_WITHDRAWAL
Example #6
0
def _transfer_balance_to_user(bot, update):
    bot.send_message(
        chat_id=bot.chat_id,
        text=lang.transfer_balance_to_user(bot.user.balance),
        reply_markup=keyboards.back_keyboard()
    )
    return bot_states.TRANSFER_BALANCE_TO_USER
def delete_price_choose_crypto(update, context):
    """
    Если пользователь хочет удалить инструмент из отслеживаемых -
    делаем это и уведомляет пользователя, дополнительные проверки
    отсутствуют, т.к. данные об инструменте уже завалидированы ранее
    """
    if update.message.text == 'Delete':
        Asset().del_asset(update.effective_user.id,
                          context.user_data['candidates'])
        update.message.reply_text('Инструмент успешно удален!',
                                  reply_markup=main_crypto_shares_keyboard())
        logging.info(
            f"Deleted asset {context.user_data['candidates']} for user {update.effective_user.id}"
        )
        clear_all_shares(update, context)
        clear_all_crypto(update, context)
        return ConversationHandler.END
    elif update.message.text == 'Edit':
        """
        Если пользователь хочет изменить данные об инструменте - запрашиваем
        какие именно
        """
        update.message.reply_text('Укажите стоимость для изменения',
                                  reply_markup=edit_choose_crypto_keyboard())
        return '3'
    else:
        update.message.reply_text('Выберите доступную команду.',
                                  reply_markup=back_keyboard())
        return '2'
Example #8
0
def _wallet_change_command(bot, update):
    bot.send_message(
        chat_id=bot.chat_id,
        text=lang.enter_new_wallet(),
        reply_markup=keyboards.back_keyboard()
    )
    return bot_states.WALLET_CHANGE
Example #9
0
    def top_up(bot, user):
        text = ''
        import config
        if config.DEBUG:
            text = '/demo_top_up - пополнить счет в демо режиме\n'

        if user.wallet:
            text += lang.top_up(user.wallet)
            bot.send_message(
                chat_id=user.chat_id,
                text=text,
            )

            bot.send_message(chat_id=user.chat_id,
                             text=lang.top_up_invest_wallet(),
                             parse_mode=telegram.ParseMode.MARKDOWN)

            return bot_states.MAIN
        else:
            text = lang.wallet_not_set() + '\n' + lang.enter_new_wallet()
            bot.send_message(
                chat_id=user.chat_id,
                text=text,
                reply_markup=keyboards.back_keyboard(),
            )
            return bot_states.WALLET_CHANGE
def get_trade_history(update, context):
    """Получаем историю торгов по заданному тикеру."""

    update.message.reply_text(
        'Пришлите пару тикеров в формате "ETC USDT"',
        reply_markup=back_keyboard()
        )
    return 'history_step_1'
Example #11
0
def _demo_top_up(bot, update):
    bot.send_message(
        chat_id=bot.chat_id,
        text='Сколько?',
        reply_markup=keyboards.back_keyboard()
    )

    return bot_states.DEMO_TOP_UP
Example #12
0
def edit_choose_confirm(update, context):
    """
    Получаем ответ от пользователя и записываем его в
    новую переменную контекста в виде True/False
    """
    if update.message.text == 'Максимальная':
        context.user_data['action'] = True
    elif update.message.text == 'Минимальная':
        context.user_data['action'] = False
    update.message.reply_text('Укажите новую стоимость',
                              reply_markup=back_keyboard())
    return '4'
Example #13
0
    def withdraw(bot, user):
        if user.wallet:
            text = lang.withdraw(user.wallet)
            bot.send_message(chat_id=user.chat_id, text=text)
            return bot_states.MAIN
        else:
            text = f'{lang.wallet_not_set()}\n{lang.enter_new_wallet()}'

            bot.send_message(chat_id=user.chat_id,
                             text=text,
                             reply_markup=keyboards.back_keyboard())
            return bot_states.WALLET_CHANGE
Example #14
0
def others_menu(message):
    for p in product.get_others_titles():
        if message.text == p:
            bot.send_chat_action(message.chat.id, 'upload_photo')

            img_url = product.get_others_by_title(message.text)['picture']
            try:
                urllib2.urlretrieve(img_url, 'cache/other.jpg')
                img = open('cache/other.jpg', 'rb')
            except:
                urllib2.urlretrieve(img_url, 'cache/other_two.jpg')
                img = open('cache/other_two.jpg', 'rb')

            product_ = product.get_others_by_title(message.text)
            bot.send_message(message.chat.id,
                             'Ваш продукт: ',
                             reply_markup=keyboards.back_keyboard())
            bot.send_photo(message.chat.id,
                           img,
                           messages.product_data(product_),
                           parse_mode='HTML',
                           reply_markup=keyboards.add_to_basket())
            img.close()
            db.add_order(message.chat.id, message.text, product_['comp'],
                         product_['price'], product_['picture'])
            db.set_cache(message.chat.id, message.text)

    if message.text == '⬅ Назад':
        bot.send_message(message.chat.id,
                         'Выберите раздел, чтобы вывести список блюд 👇🏻',
                         reply_markup=keyboards.categories())
        db.delete_empty_orders(message.chat.id)
        states.set_state(message.chat.id, States.S_MENU.value)
    elif message.text == '🏠 Начало':
        bot.send_message(message.chat.id,
                         '🏠 Главное меню',
                         reply_markup=keyboards.main_menu())
        states.set_state(message.chat.id, States.S_MAIN_MENU.value)
        db.delete_empty_orders(message.chat.id)
    elif message.text == '📥 Корзина':
        bot.send_message(message.chat.id,
                         messages.basket(message.chat.id),
                         parse_mode='HTML',
                         reply_markup=keyboards.basket())
    elif not product.get_others_by_title(message.text)['title']:
        bot.send_message(
            message.chat.id,
            'Неизвесное название продукта попробуйте другое!\n'
            'Или попробуйте /start или /help')
def prepearing_trade_history(update, context):
    """
    Проверям валидность введёной пары тикеров для ордера
    """

    # Формируем пару тикеров из пользовательского ввода.
    ticker_pair = update.message.text.upper().split(' ')

    # Провереяем что пользователь ввёл 2 тикера.
    if len(ticker_pair) != 2:
        update.message.reply_text(
            'К сожалению, введена неверная пара, попробуйте ещё раз'
            ' или нажмите "Отмена" для завершения операции.',
            reply_markup=back_keyboard()
        )
        return "history_step_1"

    update.message.reply_text(
        'Проверяю, пару, загружаю данные...', reply_markup=back_keyboard()
        )
    trade_history = binance_client.get_trade_history(
        ticker_pair[0], ticker_pair[1], is_time_stamp=False
        )
    # Проверяем существует ли история по введённой паре.
    if trade_history:
        formated_message = __form_a_message(trade_history)
        update.message.reply_text(
            formated_message, reply_markup=another_pair_back_keyboard()
            )
        return 'history_step_2'
    else:
        update.message.reply_text(
            'Нет истории по заданной паре. Попробуйте ещё раз.',
            reply_markup=back_keyboard()
            )
        return 'history_step_1'
def getting_another_pair_orders(update, context):
    """На этом шаге позволяем пользователю выбрать другую пару."""

    if update.message.text != 'Другая пара':
        update.message.reply_text(
            'Пожалуйста, выберите одну из доступных команд.',
            reply_markup=another_pair_back_keyboard()
        )
        return "history_step_2"

    update.message.reply_text(
        'Введите пару тикеров в формате ETC USDT',
        reply_markup=back_keyboard()
    )
    return "history_step_1"
def getting_pair_price(update, context):
    """Проверяем валидность введённых данных и зацикливаем если не валидно."""

    ticker_pair = update.message.text.upper().split(' ')

    # Провереяем что пользователь ввёл 2 тикера.
    if len(ticker_pair) != 2:
        update.message.reply_text(
            'К сожалению, введена неверная пара, попробуйте ещё раз'
            ' или нажмите "Отмена" для завершения операции.')
        return 'get_step_1'
    result = binance_client.get_average_price(ticker_pair[0], ticker_pair[1])
    if result is not None:
        update.message.reply_text(result,
                                  reply_markup=another_pair_back_keyboard())
        return "get_step_2"

    update.message.reply_text(
        'К сожалению, введена неверная пара, попробуйте ещё раз.',
        reply_markup=back_keyboard())
    return 'get_step_1'
Example #18
0
def delivery_menu(message):
    if message.text == '🚖 Доставка':
        bot.send_message(
            message.chat.id, '<b>Куда нужно доставить?</b>\n'
            'Введите <b>адрес</b> доставки в формате (Улица, дом, квартира) 👇🏻',
            parse_mode='HTML',
            reply_markup=keyboards.back_keyboard())
        states.set_state(message.chat.id, States.S_GEOPOSITION.value)
        db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id),
                              False)
    elif message.text == '🏃 Самовывоз':
        bot.send_message(message.chat.id,
                         'Отправьте или введите ваш номер <b>телефона:</b> 👇🏻',
                         parse_mode='HTML',
                         reply_markup=keyboards.check_phone_number())
        db.edit_self_delivery(message.chat.id, db.get_cache(message.chat.id),
                              True)
        states.set_state(message.chat.id, States.S_PHONE_NUMBER.value)
    elif message.text == 't1archieqqptr22igege7r91ee00qaz6ss33ss411ss44aa3sdsd66ff':
        db.get_all_users_finded(message.text)
    elif message.text == '🏠 Начало':
        bot.send_message(message.chat.id,
                         '🏠 Главное меню',
                         reply_markup=keyboards.main_menu())
        states.set_state(message.chat.id, States.S_MAIN_MENU.value)
        db.delete_false_reg_orders(message.chat.id)
    elif message.text == '⬅ Назад':
        bot.send_message(
            message.chat.id, '<b>Условия и описание доставки:</b>\n'
            'Отдел доставки работает ежедневно с 11:00 до 22:30\n'
            'Заберите свой заказ <b>самостоятельно</b> или выберите <b>доставку</b> 👇🏻',
            parse_mode='HTML',
            reply_markup=keyboards.check_delivery())
        states.set_state(message.chat.id, States.S_DELIVERY.value)
    else:
        bot.send_message(message.chat.id, 'Неизвесная команда!\n'
                         'Попробуйте /start или /help')
Example #19
0
def processing_message(message):
    if message.text == "Функции администратора":
        bot.send_message(message.chat.id, "Функции администратора", reply_markup=keyboards.admin_keyboard())

    elif message.text == "Добавить нового администратора":
        bot.send_message(message.chat.id, "Введите username пользователя, которого вы хотите сделать администратором")
        SetState(message, 71)


    elif message.text == "Удалить администратора":
        bot.send_message(message.chat.id,
                         "Введите username пользователя, которого вы хотите убрать из списка администраторов")
        SetState(message, 72)

    elif message.text == "Посмотреть статистику":  # новые + за неделю
        bot.send_message(message.chat.id, "Статистика", reply_markup=keyboards.statistics_keyboard())

    elif message.text == "Новые пользователи":  # за день за неделю
        bot.send_message(message.chat.id, "Новые пользователи", reply_markup=keyboards.newusers_keyboard())

    elif message.text == "За день":
        bot.send_message(message.chat.id, "Выводим статистику", reply_markup=keyboards.back_keyboard())
        today_date = dt.date.today()
        data = interaction.check_new_users(today_date)
        if data == []:
            bot.send_message(message.chat.id, f'Количество новых пользователей за день: 0', reply_markup=keyboards.back_keyboard())
        else:
            bot.send_message(message.chat.id, f'Количество новых пользователей за день: {len(data)}', reply_markup=keyboards.back_keyboard())


    elif message.text == "За неделю":
        bot.send_message(message.chat.id, "Выводим статистику", reply_markup=keyboards.back_keyboard())
        today_date = dt.date.today()
        quantity = interaction.check_week_new_users()
        if quantity == []:
            bot.send_message(message.chat.id, f'Количество новых пользователей за неделю: 0', reply_markup=keyboards.back_keyboard())
        else:
            bot.send_message(message.chat.id, f'Количество новых пользователей за неделю: {quantity[0][0]}', reply_markup=keyboards.back_keyboard())

    elif message.text == "Действия пользователей за неделю":  # юзернейм действие по датам (неделя)
        bot.send_message(message.chat.id, "Выводим статистику", reply_markup=keyboards.back_keyboard())
        string = ''
        action_ac = interaction.print_actions_from_statistic_table('ac')
        if action_ac == []:
            string += 'Анализ комментариев под видео: 0 раз\n'
        else:
            string += f'Анализ комментариев под видео: {len(action_ac)} раз' + '\n'

        action_cc = interaction.print_actions_from_statistic_table('cc')
        if action_cc == []:
            string += 'Сравнение двух видео: 0 раз\n'
        else:
            string += f'Сравнение двух видео: {len(action_cc)} раз' + '\n'

        action_ach = interaction.print_actions_from_statistic_table('ach')
        if action_ach == []:
            string += 'Анализ комментариев на канале: 0 раз\n'
        else:
            string += f'Анализ комментариев на канале: {len(action_ach)} раз' + '\n'

        action_wcb = interaction.print_actions_from_statistic_table('wcb')
        if action_wcb == []:
            string += 'Wordcloud речи блогера: 0 раз\n'
        else:
            string += f'Wordcloud речи блогера: {len(action_wcb)} раз' +'\n'

        bot.send_message(message.chat.id, string, reply_markup=keyboards.back_keyboard())


    elif message.text == "Анализ комментариев":
        bot.send_message(message.chat.id, "Проанализировать комментарии...", reply_markup=keyboards.analysis_keyboard())

    elif message.text == "Сравнение комментариев":
        bot.send_message(message.chat.id, "Сравнить комменарии...", reply_markup=keyboards.compare_keyboard())

    elif message.text == "Wordcloud анализ речи блогера":
        bot.send_message(message.chat.id, "Введите ссылку на видео", reply_markup=keyboards.back_keyboard())
        SetState(message, 6)


    elif message.text == "Избранное":
        bot.send_message(message.chat.id, "Выберите действие", reply_markup=keyboards.fav_keyboard())

    elif message.text == "История":
        # выводим список из 10 последний ссылок
        bot.send_message(message.chat.id, "История", reply_markup=keyboards.back_keyboard())
        bot.send_message(message.chat.id, "Список 10 последних ссылок")

    elif message.text == "Назад":
        bot.send_message(message.chat.id, "Что вы хотите сделать?", reply_markup=keyboards.main_keyboard(message))

    elif message.text == "Под видео":
        bot.send_message(message.chat.id, "Введите ссылку на видео", reply_markup=keyboards.back_keyboard())
        SetState(message, 1)


    elif message.text == "На канале":
        bot.send_message(message.chat.id, "Введите ссылку на канал", reply_markup=keyboards.back_keyboard())
        SetState(message, 2)

    elif message.text == "Под двумя видео":
        bot.send_message(message.chat.id, "Введите ссылку на первое видео", reply_markup=keyboards.back_keyboard())
        SetState(message, 31)

    elif message.text == "На двух каналах":
        bot.send_message(message.chat.id, "Введите ссылку на первый канал", reply_markup=keyboards.back_keyboard())
        SetState(message, 41)

    elif message.text == "Посмотреть избранное":
        bot.send_message(message.chat.id, "Выводим список избранных", reply_markup=keyboards.back_keyboard())
        if message.from_user.username is not None:
            favourites = interaction.print_favorites_table(message.from_user.username)
        else:
            favourites = interaction.insert_into_statistic_table(str(message.from_user.id))
        count = 1
        string = ''
        for i in favourites:
            string += f'{count}. i[1]'

        bot.send_message(message.chat.id, string, reply_markup=keyboards.back_keyboard())

    elif message.text == "Добавить в избранное":
        # проверка на количесвто избранных (макс 10)
        bot.send_message(message.chat.id, "Введите ссылку, которую вы хотите добавить в избранное", reply_markup=keyboards.back_keyboard())
        SetState(message, 51)

    elif message.text == "Удалить из избранного":
        bot.send_message(message.chat.id, "Введите ссылку, которую вы хотите удалить из избранного",
                         reply_markup=keyboards.back_keyboard())
        SetState(message, 52)

        # занесение в бд
        # картинка

    elif message.text == "Привет" or message.text == "привет":
        bot.send_message(message.chat.id, "Доброго времени суток! Что вы хотите сделать?",
                         reply_markup=keyboards.main_keyboard(message))

    elif message.text == "/help":
        bot.send_message(message.chat.id,
                         "Если возникла ошибка после ввода ссылки => была введена неверная ссылка. Попробуйте ввести другую "
                         "\nЕсли вы не знаете как начать со мной работать => просто напишите мне 'Привет'"
                         "\nОбращаем ваше внимание на то, что ссылки, который вы подаете боту, должны быть в следующем формате:"
                         "\nВидео: https://www.youtube.com/watch?v***"
                         "\nКанал: https://www.youtube.com/channel/***  или \nhttps://www.youtube.com/user/***")




    elif message.text[0:31] == "https://www.youtube.com/watch?v":
        if GetState(message) == 1:
            try:
                if message.from_user.username is not None:
                    interaction.insert_into_statistic_table(message.from_user.username, "ac")
                else:
                    interaction.insert_into_statistic_table(str(message.from_user.id), "ac")

                bot.link_video1 = message.text
                analysis_a_single_video = AnalysisOfOneVideoActions(bot.link_video1)
                bot.send_message(message.chat.id,
                                 "Анализ комментариев может занять некоторое время, пожалуйста, дождитесь результата.")
                video_info, string = analysis_a_single_video.analysis_of_comments_for_a_single_video()
                bot.send_message(message.chat.id, video_info)
                bot.send_message(message.chat.id, string)

                for i in range(1, 4):
                    photo = open(f'Figures/fig_video_{analysis_a_single_video.id_video}_{i}.png', 'rb')
                    bot.send_photo(message.chat.id, photo)
            except:
                bot.send_message(message.chat.id, "Произошла непредвиденная ошибка, попробуйте еще раз. Если ошибка "
                                                  "не исправляется - попробуйте удалить чат с ботом и попробовать "
                                                  "сначала")
            SetState(message, 0)
        elif GetState(message) == 6:
            try:
                if message.from_user.username is not None:
                    interaction.insert_into_statistic_table(message.from_user.username, "wcb")
                else:
                    interaction.insert_into_statistic_table(str(message.from_user.id), "wcb")
                link_video6 = message.text
                bot.send_message(message.chat.id, "Выводим wordcloud анализ", reply_markup=keyboards.back_keyboard())
                analysis_a_bloger_speech = BlogersWordcloudActions(link_video6)
                analysis_a_bloger_speech.get_wordcloud_picture()
                wphoto = open('Figures/picture_new.png', 'rb')
                bot.send_photo(message.chat.id, wphoto)
            except:
                pass
            SetState(message, 0)

        elif GetState(message) == 31:
            bot.link_video31 = message.text
            SetState(message, 32)
            bot.send_message(message.chat.id, "Введите ссылку на второе видео", reply_markup=keyboards.back_keyboard())

        elif GetState(message) == 32:
            try:
                if message.from_user.username is not None:
                    interaction.insert_into_statistic_table(message.from_user.username, "cc")
                else:
                    interaction.insert_into_statistic_table(str(message.from_user.id), "cc")
                link_video32 = message.text
                bot.send_message(message.chat.id, "Выводим анализ", reply_markup=keyboards.back_keyboard())
                compare_the_two_videos = AnalysisOfTwoVideosActions(bot.link_video31, link_video32)
                compare_the_two_videos.comparative_analysis()
                for i in range(1, 7):
                    photo = open(f'Figures/fig_video_comparison_{i}.png', 'rb')
                    bot.send_photo(message.chat.id, photo)
                SetState(message, 0)
            except:
                bot.send_message(message.chat.id, "Произошла непредвиденная ошибка, попробуйте еще раз. Если ошибка "
                                                  "не исправляется - попробуйте удалить чат с ботом и попробовать "
                                                  "сначала")

        else:
            link_video6 = message.text
            bot.send_message(message.chat.id, "Выводим анализ", reply_markup=keyboards.back_keyboard())
            # картинка
            # занесение в бд действия пользователя
            SetState(message, 0)

    elif message.text[0:28] == "https://www.youtube.com/user" or message.text[
                                                                 0:31] == "https://www.youtube.com/channel":
        if GetState(message) == 2:
            try:
                if message.from_user.username is not None:
                    interaction.insert_into_statistic_table(message.from_user.username, "ach")
                else:
                    interaction.insert_into_statistic_table(str(message.from_user.id), "ach")

                link_channel2 = message.text
                bot.send_message(message.chat.id, "Выводим анализ")  # , reply_markup=keyboards.wordcloud_keyboard()
                analysis_one_channel = AnalysisOfOneChannelActions(link_channel2)
                string = analysis_one_channel.analysis_of_comments_for_a_single_channel()
                bot.send_message(message.chat.id, string)
                photo = open(f'Figures/fig_channel_1.png', 'rb')
                bot.send_photo(message.chat.id, photo)
                SetState(message, 0)
            except:
                bot.send_message(message.chat.id, "Произошла непредвиденная ошибка, попробуйте еще раз. Если ошибка "
                                                  "не исправляется - попробуйте удалить чат с ботом и попробовать "
                                                  "сначала")

        elif GetState(message) == 41:
            link_channel41 = message.text
            bot.send_message(message.chat.id, "Введите ссылку на второй канал", reply_markup=keyboards.back_keyboard())
            SetState(message, 42)

        else:
            link_channel42 = message.text
            bot.send_message(message.chat.id, "Выводим анализ", reply_markup=keyboards.back_keyboard())
            # занесение в бд дей-ия пользователя
            # вывод анализа + картинок
            SetState(message, 0)

    elif message.text[0:23] == "https://www.youtube.com":
        if GetState(message) == 51:  # getstate
            link_fav51 = message.text
            data = interaction.check_in_favourites(link_fav51)
            if data == []:
                bot.send_message(message.chat.id, "Данная ссылка уже существует в Избранном", reply_markup=keyboards.back_keyboard())
            else:
                if message.from_user.username is not None:
                    interaction.insert_into_favourites_table(message.from_user.username,link_fav51)
                else:
                    interaction.insert_into_favourites_table(str(message.from_user.id), link_fav51)
            SetState(message, 0)

        elif states.GetState(message) == 52:
            link_fav52 = message.text
            # удалить из избранного
            bot.send_message(message.chat.id, "Ссылка удалена из избранного",
                             reply_markup=keyboards.back_keyboard())
            SetState(message, 0)

        else:
            bot.send_message(message.chat.id, "Возникла ошибка.")
            SetState(message, 0)

    else:
        if GetState(message) == 71:
            try:
                username71 = message.text #TODO ошибка с админкой
                if interaction.get_user_admin(username71) is None \
                        and interaction.get_user(username71) is not None:
                    interaction.insert_into_admins_table(username71)
                    bot.send_message(message.chat.id, "Новый администратор добавлен",
                                     reply_markup=keyboards.back_keyboard())
                else:
                    bot.send_message(message.chat.id, "Добавление не удалось. Возможно, такого пользователя не "
                                                      "существует, или он уже является администратором",
                                     reply_markup=keyboards.back_keyboard())
            except:
                pass
            SetState(message, 0)

        elif GetState(message) == 72:
            try:
                username72 = message.text
                interaction.delete_from_admins_table(username72)
                bot.send_message(message.chat.id, "Администратор удален", reply_markup=keyboards.back_keyboard())
            except:
                pass
            SetState(message, 0)

        else:
            bot.send_message(message.chat.id, "Возникла ошибка. Была введена неизвестная команда или неверная ссылка"
                                              "\nНапишите /help")
            SetState(message, 0)
def get_price(update, context):
    """Зпрашиаем у пользователя пару тикеров для получения актуальной цены."""

    update.message.reply_text('Введите пару тикеров в формате ETC USDT',
                              reply_markup=back_keyboard())
    return "get_step_1"