You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:15:00