Line-Bot Python: запись ответа пользователя в листе Google ОШИБКА

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'ok'

def over_time(count):
    scope = ["https://spreadsheets.google.com/feeds"]
    creds = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
    client = gspread.authorize(creds)
    sheet = client.open('test').sheet1
    content = sheet.cell(1,count).value
    return content
    #extract the questions from here

def write_in(answers):
    scope = ["https://spreadsheets.google.com/feeds"]
    creds = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
    client = gspread.authorize(creds)
    sheet = client.open('test').sheet1
    sheet.insert_row(answers, 2)
    # write users' answers into the sheet

users=[]
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    global users
    print("event.reply_token:", event.reply_token)
    print("event.message.text:", event.message.text)
    user_id = json.loads(str(event.source))['userId']

    user_data ={}
    location =0
    count =0
    answers =[]
    for user in users:
        if user_id==user['user_id']:
            user_data =user
            count =user_data['count']
            location = [i for i, t in enumerate(users) if t['user_id'] == user_id][0]  
            answers = user_data['answers']
            print(answers)

    if user_data=={}:
        user_data = {"user_id": user_id, "count": 0, "answers":[]}  
        users.append(user_data)
        location=len(users)-1


    if event.message.text == "a":
        count=1
        content = over_time(count)
        users[location]['count'] = 1
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=content))
        return 0




    if event.message.text == "b":
        buttons_template = TemplateSendMessage(
            alt_text='b template',
            template=ButtonsTemplate(
                title='type',
                text='please choose',
                thumbnail_image_url='xxxx',
                actions=[
                    MessageTemplateAction(
                        label='a',
                        text='a'
                    ),
                ]
            )
        )
        line_bot_api.reply_message(event.reply_token, buttons_template)
        return 0

    if event.message.text != "a" and event.message.text != "b":
        answers.append(event.message.text)
        count += 1
        if count>3:
            b=write_in(answers)
            print(b)
            users[location]['count'] = 0
            users[location]['answers'] = []
            return 0 #
        content = over_time(count)
        users[location]['count'] = count
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=content))

Я на самом деле знаю, как записать их в Google лист. Просто когда я пытался общаться с пользователями, иногда это странно. Каждый раз, когда пользователь заканчивает отвечать на вопрос, мы запишем его ответ на листе Google, а затем снова оставляем пустым, чтобы пользователь мог использовать его в следующий раз и заполнить новый ответ. Но я получил ошибку, так как иногда line-bot спрашивал меня Q1 дважды или Q2 дважды и не мог успешно писать в листе Google. Я думаю, что ошибка в основном в последней части, когда count>3, мне нужно остановить весь процесс и не дать ему продолжаться.

Действия при использовании line-bot:

напишите b -> нажмите кнопку a в форме -> Q1 -> A1 -> Q2 -> A2 -> Q3 -> A3 -> если считать>3 -> ответ =[A1,A2,A3] впишите в лист Google - > Установите пустые данные пользователя -> остановить (тогда пользователь может использовать его снова)

0 ответов

Другие вопросы по тегам