如何编写自动与Telegram Bot交互的脚本?(Windows 10环境)
嘿,我来帮你搞定这个Telegram Bot自动化交互的事儿!你之前试了batch和Telegram-CLI碰壁,那咱们换个更靠谱、更灵活的路子——用Python的Telegram客户端库来实现,完全能满足你和非自研Bot的自动化交互需求。
实现Telegram Bot自动化交互的完整步骤
第一步:准备基础环境
- 先确保你的Windows 10上装了Python 3.7及以上版本,没装的话去Python官网下载安装就行,记得勾选“Add Python to PATH”选项。
- 打开命令提示符(CMD),安装
telethon这个好用的Telegram客户端库,输入命令:pip install telethon
第二步:获取Telegram API凭证
要模拟用户账号操作,必须先拿到Telegram官方的API权限:
- 用你的Telegram账号登录Telegram开发者平台,创建一个新应用(随便填个应用名、描述就行),创建完成后就能拿到API ID和API Hash,把这两个信息记下来,后面脚本要用到。
第三步:编写自动化交互脚本
下面是一个基础示例脚本,能实现发送/start、/help指令,并自动接收Bot的回复,你可以根据需求扩展逻辑:
from telethon import TelegramClient, events # 替换成你自己的API信息和手机号 API_ID = 123456 # 改成你的API ID API_HASH = 'abcdefghijklmnopqrstuvwxyz123456' # 改成你的API Hash PHONE_NUMBER = '+8613xxxxxxxxx' # 你的Telegram绑定手机号 # 初始化客户端,my_session是会话文件名,会保存登录状态 client = TelegramClient('my_session', API_ID, API_HASH) async def main(): # 登录账号(第一次运行会提示输入Telegram发送的验证码) await client.start(PHONE_NUMBER) # 替换成你要交互的Bot的用户名,比如@example_bot target_bot = '@your_target_bot' # 发送/start指令 await client.send_message(target_bot, '/start') print("已发送/start指令") # 监听Bot的回复 @client.on(events.NewMessage(from_users=target_bot)) async def handle_bot_reply(event): bot_reply_content = event.message.text print(f"Bot回复内容:{bot_reply_content}") # 可以根据Bot的回复触发后续操作,比如收到初始回复后发/help if '欢迎使用' in bot_reply_content: await client.send_message(target_bot, '/help') print("已发送/help指令") # 保持脚本运行,持续监听消息 await client.run_until_disconnected() if __name__ == '__main__': import asyncio asyncio.run(main())
第四步:运行和调试脚本
- 把上面的代码保存为
telegram_auto.py文件 - 打开CMD,进入文件所在目录,运行命令:
python telegram_auto.py - 第一次运行会要求你输入Telegram发送到账号的验证码,输入后脚本就会自动登录并执行交互逻辑
- 你可以根据Bot的回复内容,在
handle_bot_reply函数里添加更多分支逻辑,比如触发其他指令、解析回复里的关键信息等
为什么不推荐Telegram-CLI?
你提到Telegram-CLI有局限,确实如此——它现在维护频率低,Windows上的兼容性差,而且实现复杂交互的成本很高。相比之下,telethon这种Python库更灵活,能轻松实现定时发送、根据回复内容分支执行、处理Bot的 inline 按钮等复杂需求,上手也更快。
注意事项
- 不要频繁发送指令,避免触发Telegram的账号限制,遵循平台使用规则
- 脚本生成的
my_session.session文件会保存你的登录状态,不要泄露给他人 - 如果需要处理Bot的按钮交互,可以用
telethon的InlineKeyboardButton相关方法来模拟点击操作
内容的提问来源于stack exchange,提问作者nadalaba




