如何无需遍历聊天记录获取Telegram机器人创建的全部投票ID?
如何无需遍历所有聊天记录获取Telegram机器人创建的所有投票ID
目前Telegram官方Bot API没有提供直接获取机器人创建的所有投票ID的内置方法(不存在你提到的get_polls接口),但可以通过以下方案实现需求:
主动记录投票ID(推荐方案)
在机器人调用sendPoll创建投票时,直接从返回的消息对象中提取投票ID并持久化存储(比如数据库、本地文件)。后续需要整理列表时,直接从存储中读取即可,完全不需要遍历聊天记录。以Python的
python-telegram-bot库为例,简单实现代码如下:import sqlite3 from telegram import Update from telegram.ext import ContextTypes # 初始化SQLite数据库,用于存储投票ID conn = sqlite3.connect('bot_polls.db') cursor = conn.cursor() cursor.execute('CREATE TABLE IF NOT EXISTS bot_polls (poll_id TEXT PRIMARY KEY)') conn.commit() # 发送投票并记录ID的处理函数 async def send_poll(update: Update, context: ContextTypes.DEFAULT_TYPE): # 发送投票 poll_msg = await context.bot.send_poll( chat_id=update.effective_chat.id, question="你喜欢哪种编程语言?", options=["Python", "JavaScript", "Go"] ) # 提取并存储投票ID poll_id = poll_msg.poll.id cursor.execute('INSERT OR IGNORE INTO bot_polls (poll_id) VALUES (?)', (poll_id,)) conn.commit() await update.message.reply_text(f"投票已创建,ID: {poll_id}") # 获取所有已记录的投票ID def get_all_bot_poll_ids(): cursor.execute('SELECT poll_id FROM bot_polls') return [item[0] for item in cursor.fetchall()]补录历史投票ID(仅适用于未记录的旧投票)
如果之前创建的投票没有留存ID,只能通过遍历机器人发送的消息来收集,但可以通过过滤消息发送者为机器人自身ID,缩小遍历范围,提升效率:- 调用
getChatHistory接口,指定目标聊天范围 - 过滤
message.from_user.id等于机器人自身ID的消息 - 从符合条件的消息中提取
poll.id(仅当消息包含poll对象时)
- 调用
内容的提问来源于stack exchange,提问作者NiicaoXD
相关产品推荐
相关产品推荐

