Нужна помощь с импортом данных из гугл таблицы для тг бота при помощи Python

Потихоньку изучаю Python, навыков разработки не имел ранее. Сейчас написан код тг бота, работает через aiogram, этот бот записывает клиентов на определённые дату и время с помощью кнопок меню, вносит данные клиента после записи в гугл таблицу(дату, время, имя которое пользователь ввёл, телефон), в таблице есть ещё стольцы для username и user id, но в них бот почему-то не сохраняет данные. Метод у меня такой(username или user_id), разницы нет, в таблицу он не записывает эти данные

Вот в общем суть. Не могу понять как мне правильно сохранять имя пользователя или user id и не получается импортировать данные из гугл таблицы, бот записывает людей дважды на одну и ту же дату, хотя должен выдавать пользователю только свободные даты исходя из записей в таблице, но этого он не делает почему-то. Прошу помощи, чтобы понять как это осуществить Вот код работы с таблицей

import gspread
from google.auth.transport.requests import Request
from google.oauth2.service_account import Credentials
from datetime import datetime, timedelta

# Настройки Google API
GOOGLE_SCOPES = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
SPREADSHEET_ID = 'ID'

# Авторизация
credentials = 
Credentials.from_service_account_file('credentials.json', 
scopes=GOOGLE_SCOPES)
gc = gspread.authorize(credentials)
worksheet = gc.open_by_key(SPREADSHEET_ID).sheet1

def add_to_google_sheets(name: str, contact: str, date: str, time: 
str, user_id: int):

occupied_times = get_occupied_times(date)
if time in occupied_times:
    return False  

# Проверка на повторную запись
records = worksheet.get_all_records()
for record in records:
    if record.get("Contact") == contact and record.get("Date") == 
date and record.get("Time") == time:
        return False 

worksheet.append_row([date, time, name, contact, user_id, 0]) 
return True  

def get_user_booking(user_id: int):
records = worksheet.get_all_records()
for i, record in enumerate(records):
    if str(record.get("User ID", "")) == str(user_id):
        record["row"] = i + 2  
        return record
return None

def check_cancellation_limit(user_id: int):
booking = get_user_booking(user_id)
if booking:
    cancellations = booking.get('Cancellations', 0)
    return cancellations >= 2  # Лимит отмен
return False

def increment_cancellation_count(user_id: int):
booking = get_user_booking(user_id)
if booking:
    row = booking['row']
    cancellations = int(booking.get('Cancellations', 0)) + 1
    worksheet.update(f"E{row}", [[cancellations]])  

# Отмена записи пользователя
def cancel_booking(user_id: int):
booking = get_user_booking(user_id)
if booking:
    worksheet.delete_rows(booking['row']) 
    return True
return False

def update_user_booking(user_id: int, booking):
row = booking['row']
worksheet.update(f"A{row}:F{row}", [[  
    booking.get('Date', ''),
    booking.get('Time', ''),
    booking.get('Name', ''),
    booking.get('Contact', ''),
    booking.get('User ID', ''),
    booking.get('Cancellations', 0)
]])

def get_occupied_times(date: str):
occupied_times = []
records = worksheet.get_all_records()
for record in records:
    if record.get('Date') == date:
        occupied_times.append(record.get('Time'))
return occupied_times

def get_free_times(date):
all_times = [f"{hour:02}:00" for hour in range(9, 20)] + [f" 
{hour:02}:30" for hour in range(9, 20)]
all_times.sort()
occupied = get_occupied_times(date)
return [time for time in all_times if time not in occupied]

def setup_google_sheets():
pass

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

Автор решения: Elli Ree

Все решил сам, если кому вдруг будет нужно

#Получение имени пользователя
def get_username(user):
return user.username if user.username else f"{user.first_name} 
{user.last_name}"

# Сохраняем user_id в хранилище состояния
await state.update_data(user_id=message.from_user.id)
await state.update_data(contact=contact)
user_data = await state.get_data()
date = user_data['date']
time = user_data['time']
name = user_data['name']
user_id = user_data['user_id']  # Получаем user_id из хранилища

# Добавляем запись в Google Sheets с user_id
add_to_google_sheets(name, contact, date, time, user_id, 
message.from_user.username)

# Поиск записи по всем листам таблицы

def find_user_booking(user_id):
# Получаем все листы из Google Sheets
worksheets = spreadsheet.worksheets()  # Получаем все листы в документе

# Каждый лист отдельно
for worksheet in worksheets:
    records = worksheet.get_all_records()  # Получаем все записи в листе
    
    # Поиск записи с нужным user_id
    for record in records:
        if str(record.get("user_id")) == str(user_id):
            return record  # Первая найденная запись

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

→ Ссылка