Telegram投票结果获取问题求助:成功发起投票无法本地记录结果
解决Telegram投票结果获取问题
你的代码存在几个关键问题导致无法获取投票结果,以下是修正方案:
原代码的核心问题
poll异步函数未完成send_poll调用,且send_poll被错误放在函数外部,引发变量作用域错误poll_handler2不是异步函数,且错误直接调用Update类而非update实例来获取投票数据- 未正确处理投票状态更新事件,无法捕获实时投票结果
修正后的完整代码
from telegram import Update, Poll from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, PollHandler async def poll(update: Update, context: ContextTypes.DEFAULT_TYPE): q_text = "What have you done today?" poll_text = ['train', 'study', 'show love'] # 正确在异步函数内发送投票,并添加await关键字 await context.bot.send_poll( chat_id=update.effective_chat.id, question=q_text, options=poll_text, allows_multiple_answers=True, is_anonymous=False ) # 改为异步函数,使用update实例获取投票数据 async def poll_handler2(update: Update, context: ContextTypes.DEFAULT_TYPE): poll = update.poll # 遍历所有投票选项,获取文本和得票数 print("当前投票结果:") for idx, option in enumerate(poll.options): print(f"选项 {idx+1}: {option.text} - 得票数:{option.voter_count}") # 将结果写入本地文件保存 with open("poll_results.txt", "a", encoding="utf-8") as f: f.write(f"投票问题:{poll.question}\n") for idx, option in enumerate(poll.options): f.write(f"选项 {idx+1}: {option.text} - {option.voter_count} 票\n") f.write("---\n") if __name__ == '__main__': application = ApplicationBuilder().token('你的TOKEN').build() poll_handler = CommandHandler('poll', poll) application.add_handler(poll_handler) # 注册PollHandler处理投票更新事件 application.add_handler(PollHandler(poll_handler2)) application.run_polling()
关键修改说明
- 将
send_poll移入poll异步函数内,添加await确保异步调用正确执行 - 将
poll_handler2改为异步函数,通过update.poll获取当前投票实例,而非直接调用Update类 - 遍历
poll.options获取每个选项的文本和得票数,实现了将结果写入本地文件poll_results.txt的逻辑 - 修正变量作用域问题,确保所有变量在正确的函数内访问
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

