#!/usr/bin/env python3 """Generate G列 component configs for L1-S2-U17-L5 笨蛋坏蛋? (English)""" import subprocess, json APP_SECRET = json.load(open('/root/.openclaw/credentials/xiaoyan/config.json'))['apps'][0]['appSecret'] r = subprocess.run(['curl', '-s', '-X', 'POST', 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', '-H', 'Content-Type: application/json', '-d', json.dumps({"app_id": "cli_a931175d41799cc7", "app_secret": APP_SECRET})], capture_output=True, text=True) TOKEN = json.loads(r.stdout)['tenant_access_token'] SST = 'DCcKsLbrmhfXgrtB7N2c9GA4ntf' SID = 'wMQVyV' # (row, config) configs = [ # Row14: 互动 — point — 机器人指着黑板 (14, """【任务标题】What does it do? 【资源配置】无 【情境引入】Ben : See? I point at it. 【互动内容】 (听力挖空 / 看图回答) User : It ___ at the blackboard. 答案词:points KP:point — v. 指向 【互动反馈】 points 正确 → Ben : Yes. It points at the blackboard. points 错误 → Ben : Look again. What does it do? 【后置对话】Ben : It talks a lot."""), # Row28: 互动 — points — 补充描述机器人行为 (28, """【任务标题】Talk about the robot 【资源配置】无 【情境引入】Robot : Bip bop! Bip bop bip! 【互动内容】 (朗读台词) User : It points at the blackboard. KP:point — v. 指向 【互动反馈】 正确 → Ben : That's right. And what else? 错误 → Ben : Look at the robot. What is it pointing at? 【后置对话】Ben : And it talks to itself!"""), # Row29: 互动 — talks to — 继续描述机器人 (29, """【任务标题】What else does it do? 【资源配置】无 【情境引入】Robot : Bip bop! Bip bop bip! 【互动内容】 (朗读台词) User : It talks to itself... KP:talk to... — 和...说话 【互动反馈】 正确 → Ben : It talks to itself! 错误 → Ben : Listen. Is the robot talking to someone? 【后置对话】Ben : ...in a language we can't understand!"""), # Row36: 互动 — a lot of — 课桌挡路 (36, """【任务标题】What is blocking it? 【资源配置】无 【情境引入】Ben : What is it doing now? 【互动内容】 (听力挖空) User : But ___ ___ ___ our desks block it. 答案词:a lot of KP:a lot of — det. 大量的 【互动反馈】 a lot of 正确 → Ben : Yes! The desks are in its way. a lot of 错误 → Ben : Many desks are blocking it. 【后置对话】场景:机器人推开桌椅"""), # Row54: 互动 — a lot of — 需要证据 (54, """【任务标题】What do we need? 【资源配置】无 【情境引入】Ben : Fine. What should we do now? 【互动内容】 (听力挖空 / 朗读) User : We need ___ ___ ___ proof! 答案词:a lot of KP:a lot of — det. 大量的 【互动反馈】 正确 → Ben : Okay. We'll find more. 错误 → Ben : We need more than just a guess. 【后置对话】无"""), # Row55: 互动 — talk to — 建议和机器人谈谈 (55, """【任务标题】What should we do? 【资源配置】无 【情境引入】User : We need a lot of proof! 【互动内容】 (朗读台词) User : Let's talk to it! KP:talk to... — 和...说话 【互动反馈】 正确 → Ben : Talk to it? But it's a robot! 错误 → Ben : How else can we find out? 【后置对话】Ben 从藏身处跳出来"""), # Row61: 互动 — can't understand — 不懂机器人语言 (61, """【任务标题】Can you understand it? 【资源配置】无 【情境引入】Robot : Bip bop! 【互动内容】 (朗读台词) User : We can't understand it. KP:I can/can't understand... 【互动反馈】 正确 → Ben : Right. Let's try asking with pictures. 错误 → Ben : Can we understand robot language? 【后置对话】Ben : What's your name?"""), # Row67: 互动 — understand — 理解了11的名字 (67, """【任务标题】What do you think? 【资源配置】无 【情境引入】Ben : What's your name? Robot points at itself — it shows "11" 【互动内容】 (朗读台词) User : Oh, I understand! KP:understand — v. 理解 【互动反馈】 正确 → Ben : You understand? Tell me! 错误 → Ben : Do you know what it means? 【后置对话】User points out the number 11"""), # Row68: 互动 — points to — 指出名字 (68, """【任务标题】What is it showing? 【资源配置】无 【情境引入】User : Oh, I understand! 【互动内容】 (朗读台词) User : It points to its name. KP:point — v. 指向 【互动反馈】 正确 → Ben : Its name is 11! 错误 → Ben : What is the robot showing us? 【后置对话】User : Its name is 11!"""), # Row80: 互动 — talk — 建议慢慢说 (80, """【任务标题】How should we talk? 【资源配置】无 【情境引入】Ben is asking too many questions at once. 【互动内容】 (朗读台词) User : Just talk slowly. KP:talk — v. 说话 【互动反馈】 正确 → Ben : Okay. One question at a time. 错误 → Ben : Should I ask slower? 【后置对话】Ben : Alright. Where are you from?"""), # Row85: 互动 — talk to — 尝试用画沟通 (85, """【任务标题】What is it doing? 【资源配置】无 【情境引入】Robot starts drawing on the blackboard. 【互动内容】 (朗读台词) User : Oh! It tries to talk to us with drawing. KP:talk to... — 和...说话 【互动反馈】 正确 → Ben : A picture! What is it? 错误 → Ben : What is it drawing? Is it a message? 【后置对话】Ben : That is the Speedy Monkey logo!"""), # Row88: 互动 — understand — 理解来源 (88, """【任务标题】Where is it from? 【资源配置】无 【情境引入】Robot draws the Speedy Monkey logo. 【互动内容】 (朗读台词) User : Oh! I understand! It is from Speedy Monkey! KP:understand — v. 理解 【互动反馈】 正确 → Ben : Speedy Monkey! I knew it! 错误 → Ben : Who is that logo from? 【后置对话】Ben : Speedy monkey sent a spy here!"""), # Row94: 互动 — talk — 要求继续 (94, """【任务标题】What next? 【资源配置】无 【情境引入】Ben thinks Speedy Monkey people are bad. 【互动内容】 (朗读台词) User : Talk more to it! KP:talk — v. 说话 【互动反馈】 正确 → Ben : Fine. What do you want? 错误 → Ben : Should we ask more questions? 【后置对话】Ben : Okay, what do you want?"""), # Row98: 互动 — points at — 指另一个标记 (98, """【任务标题】What is it showing now? 【资源配置】无 【情境引入】Robot draws another mark on the blackboard. 【互动内容】 (朗读台词) User : It points at another mark. KP:point — v. 指向 【互动反馈】 正确 → Ben : What is that mark? 错误 → Ben : Look at what it is pointing at. 【后置对话】Ben : Is that... a school?"""), # Row104: 互动 — points at — 又指一个标记 (104, """【任务标题】What is it now? 【资源配置】无 【情境引入】Ben : Why are you here? Robot draws another mark. 【互动内容】 (朗读台词) User : It points at another mark. KP:point — v. 指向 【互动反馈】 正确 → Ben : A gift mark! 错误 → Ben : What does the drawing show? 【后置对话】Ben : It is a gift!"""), # Row109: 互动 — understand — 我终于懂了 (109, """【任务标题】What do you think? 【资源配置】无 【情境引入】Robot drew Speedy Monkey, school, and gift marks. 【互动内容】 (朗读台词) User : Ben! I think I understand! KP:understand — v. 理解 【互动反馈】 正确 → Ben : What do you understand? 错误 → Ben : Think about the pictures again. 【后置对话】User explains the spy theory"""), # Row110: 互动 — talk — 需要谈话 (110, """【任务标题】What should we do? 【资源配置】无 【情境引入】User thinks they've found a spy. 【互动内容】 (朗读台词) User : We need to talk! You and me! KP:talk — v. 说话 【互动反馈】 正确 → Ben : Okay! Let's figure this out. 错误 → Ben : We need to discuss what we found! 【后置对话】Ben : Okay!"""), # Row116: 互动 — a lot of — 很多信息 (116, """【任务标题】What did it tell us? 【资源配置】无 【情境引入】User pieces together the clues. 【互动内容】 (朗读台词 / 听力挖空) User : It tells ___ ___ ___ things! 答案词:a lot of KP:a lot of — det. 大量的 【互动反馈】 正确 → Ben : Yes. Speedy Monkey, school, gift... 错误 → Ben : Remember all the drawings? 【后置对话】User : Vala School is a gift to Speedy Monkey!"""), # Row123: 互动 — a lot of — 很多信息 (123, """【任务标题】What should we do? 【资源配置】无 【情境引入】Ben : What should we do now? 【互动内容】 (朗读台词) User : It is a lot of information. KP:a lot of — det. 大量的 【互动反馈】 正确 → Ben : Yes. We have enough to tell the mayor! 错误 → Ben : Is it enough to act on? 【后置对话】无"""), # Row124: 互动 — talk about — 给镇长打电话 (124, """【任务标题】Who should we tell? 【资源配置】无 【情境引入】Ben agrees they have enough proof. 【互动内容】 (朗读台词) User : We need to call Mayor Tom and talk about it! KP:talk to/talk about... 【互动反馈】 正确 → Ben : Good idea. Let's call him now! 错误 → Ben : Who should we call for help? 【后置对话】Calling Mayor Tom..."""), # Row131: 互动 — point at — 指给镇长看 (131, """【任务标题】Show the mayor 【资源配置】无 【情境引入】Tom arrives. Ben explains. 【互动内容】 (朗读台词) User : Look! I point at it. KP:point — v. 指向 【互动反馈】 正确 → Tom : The robot? 错误 → Tom : What are you pointing at? 【后置对话】Tom : Oh? A spy? In the classroom?"""), # Row137: 互动 — a lot of — 描述异常行为 (137, """【任务标题】What did it do? 【资源配置】无 【情境引入】Ben lists the spy evidence. 【互动内容】 (听力挖空 / 朗读) User : And it said ___ ___ ___ strange things! 答案词:a lot of KP:a lot of — det. 大量的 【互动反馈】 正确 → Tom : Hmm, I see. 错误 → Tom : Did it say many strange things? 【后置对话】User shows the blackboard evidence"""), # Row148: 互动 — don't understand — 感到困惑 (148, """【任务标题】What is the truth? 【资源配置】无 【情境引入】Tom says robot doesn't want to give school to Speedy Monkey. 【互动内容】 (朗读台词) User : Wait. I don't understand. KP:I can/can't understand... 【互动反馈】 正确 → Lin : Why not let it tell you itself? 错误 → Lin : Let me help you understand. 【后置对话】Robot explains itself"""), # Row163: 核心互动-口语 — talk to — 道歉 (163, """【任务标题】Apologise to Jay and Lin 【资源配置】无 【情境引入】Tom asks the kids if they have something to say. 【互动内容】 (口语表达) User : I should talk to you. KP:talk — v. 说话 【互动反馈】 正确 → Jay : It's okay. 错误 → Jay : Go on. Say what you need to say. 【后置对话】User and Ben apologise"""), ] # Write and verify success = fail = 0 for row, text in configs: cell = f"{SID}!G{row}:G{row}" body = json.dumps({"valueRange": {"range": cell, "values": [[text]]}}, ensure_ascii=False) r = subprocess.run(['curl', '-s', '-X', 'PUT', f'https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{SST}/values', '-H', f'Authorization: Bearer {TOKEN}', '-H', 'Content-Type: application/json; charset=utf-8', '-d', body], capture_output=True, text=True) resp = json.loads(r.stdout) if resp.get('code') == 0: success += 1 title = text.split('\n')[0].replace('【任务标题】', '') print(f' ✅ Row {row:3d} | {title}') else: fail += 1 print(f' ❌ Row {row:3d} | {resp.get("msg","?")}') print(f'\n写入:{success}成功 / {fail}失败') if fail == 0: print('\n=== 回读验证 ===') for row, _ in configs: cell = f"{SID}!G{row}:G{row}" r = subprocess.run(['curl', '-s', '-X', 'GET', f'https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{SST}/values/{cell}', '-H', f'Authorization: Bearer {TOKEN}'], capture_output=True, text=True) resp = json.loads(r.stdout) vals = resp.get('data',{}).get('valueRange',{}).get('values',[[]]) content = vals[0][0] if vals and vals[0] else None title = content.split('\n')[0].replace('【任务标题】', '') if content else 'EMPTY' print(f' ✅ Row{row}: {title}')