Telethon开发机器人如何从用户消息获取输入并存储到CSV文件
Telethon分步收集用户输入并写入CSV实现方案
核心实现逻辑
- 采用Telethon内置的
Conversation上下文管理器实现顺序等待用户回复的能力,无需手动维护用户的输入阶段状态 - 按交互顺序依次发送询问、接收用户回复,所有字段收集完成后统一写入CSV文件
调整后完整代码
首先导入所需依赖:
import csv from telethon import events # 保留你原有的bot初始化代码即可,例如: # bot = TelegramClient('bot', API_ID, API_HASH).start(bot_token=BOT_TOKEN)
回调处理函数调整如下:
@bot.on(events.CallbackQuery) async def handler(event): if event.data == b"1": user_id = event.sender_id # 开启和当前触发用户的对话,超时时间单位为秒,可按需调整 async with bot.conversation(user_id, timeout=300) as conv: # 收集第一个参数x await conv.send_message("请输入x:") x_response = await conv.get_response() x = x_response.text.strip() # 收集第二个参数y await conv.send_message("请输入y:") y_response = await conv.get_response() y = y_response.text.strip() # 写入CSV文件逻辑 csv_file = "user_input.csv" # 检查文件是否已存在,判断是否需要写入表头 file_exist = False try: with open(csv_file, "r", encoding="utf-8") as f: file_exist = True except FileNotFoundError: pass with open(csv_file, "a", encoding="utf-8", newline="") as f: writer = csv.writer(f) if not file_exist: # 表头可按需扩展,比如增加收集时间、用户昵称等 writer.writerow(["用户ID", "x", "y"]) writer.writerow([user_id, x, y]) # 回复用户收集完成 await conv.send_message("所有信息已收集完成。")
注意事项
- 如果需要收集更多字段,按照
发送询问消息+等待用户回复的格式向下新增即可 - 可自行添加取消逻辑,比如收到用户发送的
/cancel指令就终止对话 - 如果同时有大量用户提交数据,建议加锁避免CSV写入冲突,或者改用数据库存储后定期导出CSV
内容的提问来源于stack exchange,提问作者kekkoilmedikit
相关产品推荐
相关产品推荐

