Telethon Bot循环异常及发送照片数量不符问题咨询
Telethon Bot 故障修复方案
故障根因分析
- 故障1(再次触发功能失效):
- 你使用了全局变量i统计发送次数,首次触发完成后i的值不会重置,第二次触发时i初始值已经大于输入的照片数量,循环不会执行
- 原代码循环缩进错误,只有
path = xxx一行在while循环内,会进入死循环,后续代码永远无法执行
- 故障2(输入3张实际发4张):
循环条件写为i <= numerofoto,i从0开始计数的话,循环执行次数为numerofoto + 1次,自然多发送1张
修复后代码
import random import os from telethon import TelegramClient, Button, events # 替换为自己的接口参数 api_id = 你的api_id api_hash = "你的api_hash" bot_token = "你的bot_token" bottoni = [ [ Button.inline("invia foto", b"1"), Button.inline("seconda opzione", b"2") ], [ Button.inline("terza opzione", b"3"), Button.inline("quarta opzione", b"4") ], ] # 路径提取为全局常量,不需要循环内重复赋值 PHOTO_PATH = r"C:\path\to\folder\with\photos" # 修复session名冲突问题,bot和userbot不能共用同一个session bot = TelegramClient('bot_session', api_id, api_hash).start(bot_token=bot_token) client = TelegramClient('userbot_session', api_id, api_hash) print("bot e userbot startati!") @bot.on(events.NewMessage(pattern="/start")) async def start(event): await event.respond(". --benvenuto nel bot-- .") # 用(?i)忽略大小写,简化三个重复装饰器 @bot.on(events.NewMessage(pattern="(?i)opzioni")) async def handler(event): await bot.send_message("myuser",". --queste sono le opzioni-- .", buttons=bottoni) @bot.on(events.CallbackQuery) async def handler(event): # 非发照片按钮直接返回,避免误触发输入逻辑 if event.data != b"1": await event.answer("功能开发中") return await event.respond("quante foto devo mandare? / guarda console") numerofoto = int(input("quante foto devo mandare? ")) # 用局部变量计数,每次触发自动重置 send_count = 0 # 循环条件改为<,避免多算一次 while send_count < numerofoto: fotorandom = random.choice([ os.path.join(PHOTO_PATH, x) for x in os.listdir(PHOTO_PATH) if os.path.isfile(os.path.join(PHOTO_PATH, x)) ]) await event.reply(file=fotorandom) send_count += 1
内容的提问来源于stack exchange,提问作者kekkoilmedikit
相关产品推荐
相关产品推荐

