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

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()

关键修改说明

  1. 将send_poll移入poll异步函数内,添加await确保异步调用正确执行
  2. 将poll_handler2改为异步函数,通过update.poll获取当前投票实例,而非直接调用Update类
  3. 遍历poll.options获取每个选项的文本和得票数,实现了将结果写入本地文件poll_results.txt的逻辑
  4. 修正变量作用域问题,确保所有变量在正确的函数内访问

内容的提问来源于stack exchange,提问作者Fernando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:21:00