TypeError: 'NoneType' object is not subscriptable Телеграмм бот

Не могу понять причину выхода ошибки в консоль после любого нажатия в боте, нажимаю статистика выходит ошибка и бот выключается. Вот сама ошибка

\main.py", line 176, in messages
    if str(chat_id) in row[3]  or str(chat_id) in row[4]:
TypeError: 'NoneType' object is not subscriptable

Я перешел в файл на и нашел строку 176 вот она.

if str(chat_id) in row[3]  or str(chat_id) in row[4]:

Давайте я Вам скину часть кода от которая идет над ошибкой и под ошибкой.

@bot.message_handler(content_types=['text'])
def messages(message):
    chat_id = message.chat.id
    global kk
    if kk == 0:
        start_bot()
    msg = message.text

    if message.chat.type == 'private':
        conn = sqlite3.connect('main.db')
        cursor = conn.cursor()
        row = cursor.execute(f'SELECT * FROM users WHERE user_id = "{chat_id}"').fetchall()
        if len(row) == 0:
            username = message.chat.username
            try:
                cursor.execute(f'INSERT INTO users VALUES ("{chat_id}", "{username.lower()}", "User", "0", "0", "0", "0", "0")')
            except:
                cursor.execute(f'INSERT INTO users VALUES ("{chat_id}", "{username}", "User", "0", "0", "0", "0", "0")')
            conn.commit()

        row = cursor.execute(f'SELECT * FROM settings WHERE id = 1').fetchone()
        if message.chat.type == 'private':
            if str(chat_id) in row[3]  or str(chat_id) in row[4]:
                if msg == 'Статистика':
                    bot.send_message(chat_id, 'Собираю информацию...')
                    rows = cursor.execute(f'SELECT * FROM users').fetchall()
                    bal1 = 0
                    bal2 = 0
                    bal3 = 0
                    end_sale = 0 
                    sum_sale = 0
                    open_sale = 0
                    disput_sale = 0
                    for row in rows:
                        bal1 += row[3]
                        end_sale += row[4] + row[6]
                        sum_sale += row[5] + row[7]
                    rows = cursor.execute(f'SELECT * FROM sale').fetchall()
                    for row in rows:
                        bal2 += int(row[5])
                        open_sale += 1
                    rows = cursor.execute(f'SELECT * FROM dispute').fetchall()
                    for row in rows:
                        bal3 += row[5]
                        disput_sale += 1
                    open_sale -= 1
                    rows = cursor.execute(f'SELECT * FROM donate').fetchall()
                    count_donate = 0
                    sum_donate = 0
                    for row in rows:
                        sum_donate += row[2]
                        count_donate += 1
                    users = cursor.execute(f'SELECT * FROM users').fetchall()
                    bot.send_message(chat_id, f"Общее количество пользователей: {len(users)}\n\nБаланс пользователей: {bal1}\nСумма открытых сделок: {bal2}\nБаланс диспутов: {bal3}\n<b>Общий баланс бота: {bal1+bal2+bal3}</b>\n\nЗавершенных сделок: {end_sale}\nНа сумму: {sum_sale}\nОткрытых споров: {disput_sale}\n\nКол-во донатеров: {count_donate}\nСумма донатов: {sum_donate}")
                elif msg == 'Админы':
                    if str(chat_id) in row[3] :
                        bot.clear_step_handler_by_chat_id(chat_id)
                        send = bot.send_message(chat_id, f"Первый админ: {row[3]}\nВторой админ: {row[4]}\nВыберите какого админа вы хотите поменять", reply_markup=menu.one_two)
                        bot.register_next_step_handler(send, edit_admins)
                    else:
                        bot.send_message(chat_id, "Извините, но эта функция доступна только главному админу")
                elif msg == 'Рассылка':
                    send = bot.send_message(chat_id, 'Введите текст рассылки', reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, mail)
                elif msg == 'Изменить баланс':
                    send = bot.send_message(chat_id, "Введите id юзера которому надо изменить баланс", reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, edit_balance)

                elif msg == 'Токен':
                    send = bot.send_message(chat_id, f"Токен: <b>{row[2]}</b>\nЕсли хотите сменить, то оправьте новый токен", parse_mode="HTML", reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, edit_qiwi, 'qiwi_api')

                elif msg == 'Номер':
                    send = bot.send_message(chat_id, f"Номер: <b>{row[1]}</b>\nЕсли хотите сменить, то оправьте новый номер", parse_mode="HTML", reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, edit_qiwi, 'qiwi_num')

                elif msg == 'Токен p2p':
                    send = bot.send_message(chat_id, f"Токен p2p: <b>{row[8]}</b>\nЕсли хотите сменить, то оправьте новый токен", parse_mode="HTML", reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, edit_qiwi, 'qiwi_p2p')

                elif msg == 'Api btc':
                    send = bot.send_message(chat_id, f"Api btc: <b>{row[9]}</b>\nЕсли хотите сменить, то оправьте новый токен", parse_mode="HTML", reply_markup=menu.back)
                    bot.clear_step_handler_by_chat_id(chat_id)
                    bot.register_next_step_handler(send, edit_qiwi, 'api_key')

                elif msg == 'Api secret btc':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Api secret btc: <b>{row[10]}</b>\nЕсли хотите сменить, то оправьте новый токен", parse_mode="HTML", reply_markup=menu.back)
                    bot.register_next_step_handler(send, edit_qiwi, 'api_secret')
                
                elif msg == 'Оплата':
                    bot.send_message(chat_id, "<b>Настройки оплаты</b>", parse_mode="HTML", reply_markup=menu.qiwi_menu)

                elif msg == 'Назад':
                    bot.send_message(chat_id, "<b>Меню админа</b>", parse_mode="HTML", reply_markup=menu.admin_menu)
                elif msg == 'Баланс':
                    try:
                        mylogin = row[1]
                        api_access_token = row[2]
                        balances = balance(mylogin,api_access_token)['accounts']
                        rubAlias = [x for x in balances if x['alias'] == 'qw_wallet_rub']
                        rubBalance = rubAlias[0]['balance']['amount']
                        bot.send_message(chat_id, f'Баланс qiwi: {str(rubBalance)}р')
                    except:
                        bot.send_message(chat_id, f'Ошибка')
                elif msg == 'Канал':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Текущий канал: <b>{row[5]}</b>\nЕсли хотите сменить, то оправьте новую ссылку на канал в формате <b>@name</b>, либо в виде ссылки <b>https://t.me/joinchat/ABCDEabcde</b>", parse_mode="HTML", reply_markup=menu.back)
                    bot.register_next_step_handler(send, edit_channal)
                elif msg == 'Описание':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Текущее описание: <b>{row[7]}</b>\nЕсли хотите сменить, то оправьте новый текст", parse_mode="HTML", reply_markup=menu.back)
                    bot.register_next_step_handler(send, edit_help)
                elif msg == 'Комиссия':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Текущая комиссия: <b>{row[6]}</b>\nЕсли хотите сменить, то оправьте новое число от 0 до 50", parse_mode="HTML", reply_markup=menu.back)
                    bot.register_next_step_handler(send, edit_commission)
                elif msg == 'Статус':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Если вы хотите сменить статус какого-либо юзера, то отправьте мне его ник в формате @name", reply_markup=menu.back)
                    bot.register_next_step_handler(send, edit_stat)
                elif msg == 'Автопостинг':
                    bot.clear_step_handler_by_chat_id(chat_id)
                    send = bot.send_message(chat_id, f"Если хотите сменить, то создайте пост заного, сперва отправьте текст", reply_markup=menu.back)
                    bot.register_next_step_handler(send, auto_post1)

                elif msg[:3] == '/id':
                    try:
                        id = msg[4:]
                        row = cursor.execute(f'SELECT * FROM users WHERE user_id = "{id}"').fetchone()
                        bot.send_message(chat_id, f"?{id}\n? Профиль: @{row[1]}\n\n➖Статус: {row[2]}\n\n?Ваш баланс: {row[3]}₽\n?Покупки - шт | ₽ : {row[4]} | {row[5]}\n?Продажи - шт | ₽ : {row[6]} | {row[7]}")
                    except:
                        bot.send_message(chat_id, 'Юзер не найден')


            if msg == '? Помощь':
                bot.send_message(chat_id, row[7], reply_markup=menu.update_name)
            
            elif msg == '?Мой профиль':
                row = cursor.execute(f'SELECT * FROM users WHERE user_id = "{chat_id}"').fetchone()
                feedback = cursor.execute(f'SELECT * FROM feedback WHERE user_id = {row[0]}').fetchall()
                text = f"<b>? Профиль:</b> @{message.chat.username}\n<b>? Статус:</b> {row[2]}\n<b>?Ваш баланс:</b> {row[3]}₽\n<b>?Кол-во Отзывов:</b> {len(feedback)}\n\n<b>? Продаж:</b> {row[4]} шт.\n<b>? Покупок:</b> {row[6]} шт.\n<b>? Сумма покупок:</b> {row[5]} руб.\n<b>? Сумма продаж:</b> {row[7]} руб."
                bot.send_message(chat_id, text, reply_markup=menu.profile_menu)

            elif msg == '? Мои сделки':
                rows = cursor.execute(f'SELECT * FROM sale WHERE user_id = "{chat_id}"').fetchall()
                a = 0
                if rows != []:
                    for row in rows:
                        text = f'Сделка №{row[0]}\nОт @{row[2]}\nДля @{row[4]}\nСумма: {row[5]}₽'
                        sales = types.InlineKeyboardMarkup(row_width=1)
                        sales.add(
                            types.InlineKeyboardButton(text='Завершить сделку', callback_data='sale_end '+str(row[0])),
                            types.InlineKeyboardButton(text='Открыть спор', callback_data='dispute '+str(row[0])),
                        )
                        bot.send_message(chat_id, text, reply_markup=sales)
                else:
                    a += 1
                rows = cursor.execute(f'SELECT * FROM sale WHERE user_id2 = "{chat_id}"').fetchall()
                if rows != []:
                    for row in rows:
                        sales = types.InlineKeyboardMarkup(row_width=1)
                        text = f'Сделка №{row[0]}\nОт @{row[2]}\nДля @{row[4]}\nСумма: {row[5]}₽'
                        sales.add(
                            types.InlineKeyboardButton(text='Отменить сделку', callback_data='sale_back '+str(row[0])),
                            types.InlineKeyboardButton(text='Открыть спор', callback_data='dispute '+str(row[0])),
                        )
                        bot.send_message(chat_id, text, reply_markup=sales)
                else:
                    a += 1
                if a == 2:
                    bot.send_message(chat_id, 'У вас нет открытых сделок', reply_markup=menu.main_menu)

            elif msg == '? Найти user':
                bot.send_message(chat_id, "Введите никнейм в формате @username")
            elif msg[:1] == "@":
                name = msg[1:]
                row = cursor.execute(f'SELECT * FROM users WHERE name = "{name.lower()}"').fetchone()
                try:
                    garant_user = types.InlineKeyboardMarkup(row_width=3)
                    garant_user.add(
                        types.InlineKeyboardButton(text='Оформить сделку', callback_data='oplata '+row[0]),
                        types.InlineKeyboardButton(text='Отзывы', callback_data='feed '+row[0])
                        )
                    feedback = cursor.execute(f'SELECT * FROM feedback WHERE user_id = {row[0]}').fetchall()
                    text = f"<b>? Статус:</b> {row[2]}\n<b>?Юзер </b>{msg}\n<b>?Кол-во Отзывов:</b> {len(feedback)}\n\n<b>? Продаж:</b> {row[4]} шт.\n<b>? Покупок:</b> {row[6]} шт.\n<b>? Сумма покупок:</b> {row[5]} руб.\n<b>? Сумма продаж:</b> {row[7]} руб."
                    if row[0] != str(chat_id):
                        bot.send_message(chat_id, text, reply_markup=garant_user)
                    else:
                        bot.send_message(chat_id, text)
                except:
                    bot.send_message(chat_id, "Пользователь не найден")
            elif msg == 'Отмена' or msg == 'Вернуться в главное меню':
                bot.send_message(chat_id, "<b>Главное меню</b>", parse_mode="HTML", reply_markup=menu.main_menu)
            elif msg == '? Пожертвовать':
                text =  '<b>?Накинь монетку в сокровищницу Скруджа, не скупись</b>\n\n'
                text += '?<b>Все</b> пожертвования пойдут на Развитие Проекта, закуп рекламы и т.п.\n\n'
                text += '?В дальнейшем будут определенные привилегии для <b>Топ-5</b>\n\n'
                text += '?Благодарим за любую помощь проекту. Спасибо, что вы с нами!'
                bot.send_message(chat_id, text, reply_markup=menu.donate_menu)

        conn.close()

Ответы (0 шт):