用途
tg-polls 是一个技能说明,用于在通过 Telegram 机器人(Bot API)或用户账号(Telethon/MTProto)发送投票或测验时提供参考。它覆盖“一条消息同时包含文本和投票”的场景,并整理了相关字段、限制和设置。
主要能力
单条消息包含文本和投票
资料指出,帖子文本应放入投票的描述(description)字段,而不是单独发送一条消息。Bot API 使用 sendPoll 的 description 和 description_parse_mode / description_entities;用户账号使用 messages.sendMedia,其中 media=inputMediaPoll,Telethon 中对应 send_file(chat, InputMediaPoll(...), caption=TEXT)。资料特别说明,MTProto 的 poll / inputMediaPoll 没有单独的 description 字段,caption 即描述。
媒体支持
可以在投票上附加一个照片、视频或文件(Bot API 的 media,MTProto 的 inputMediaPoll.attached_media),也可以为选项设置媒体(Bot API 的 InputPollOption.media,MTProto 的 inputPollAnswer.media)。
长度与数量限制
资料列出了以下限制:选项 1–12 个(客户端配置 poll_answers_max = 12,Bot API 9.1 起最多 12,10.0 起最少 1);问题 1–300 字符,仅支持自定义表情实体;选项文本 1–100 字符,仅支持自定义表情实体;描述 0–1024 字符(9.6 起);测验解释 0–200 字符,最多 2 个换行,解释媒体自 10.0 起支持;open_period / close_date 为 5–2628000 秒,二者不能同时设置;country_codes 支持 0–12 个 ISO 代码,仅频道使用,FT 表示匿名号码。资料还提醒旧代码常硬编码 10 个选项,应移除此检查以支持 11 和 12 个选项。
投票设置映射
资料给出了 Bot API 字段名与 MTProto poll 标志的对应关系:allows_multiple_answers → multiple_choice(默认关闭);is_anonymous(默认 true)→ public_voters 的反向;allow_adding_options → open_answers(参与者可在进行中的投票中建议选项,不适用于匿名投票和测验;MTProto 使用 messages.addPollAnswer,参与者可在 poll_answer_delete_period(300 秒)内删除自己的回答);allows_revoting(普通投票默认 true,测验默认 false)→ revoting_disabled 的反向;shuffle_options → shuffle_answers;hide_results_until_closes → hide_results_until_close;members_only → subscribers_only(仅限成员超过 24 小时的频道);country_codes → countries_iso2。测验使用 type: "quiz" + correct_option_ids(9.6 起允许多个正确答案)对应 quiz + inputMediaPoll.correct_answers。chat_id 不能是频道直接消息聊天。
示例
资料提供了 Bot API 的 curl 示例(调用 sendPoll,包含 chat_id、question、description、options、is_anonymous、allows_multiple_answers)和 Telethon 示例(构造 PollAnswer、Poll、InputMediaPoll 并调用 send_file,caption 作为描述)。
使用方式
根据资料,使用该技能时需注意:发送前在自己的聊天(Saved Messages 或机器人私聊)中预览,再发送给受众;检查选项和问题在限制范围内,描述不超过 1024 字符;已发送的投票无法编辑,Bot API 没有编辑问题或选项的方法,描述也被冻结,资料验证 messages.editMessage 对投票返回 MESSAGE_NOT_MODIFIED,Telegram 应用不显示投票的编辑选项。因此,修正错误需要重新发送一个新投票。
适用场景
适用于需要通过 Telegram 机器人或用户账号发送投票或测验的场景,尤其是希望将帖子文本与投票合并为一条消息、为投票或选项附加媒体、或需要配置多项选择、匿名、允许添加选项、允许重新投票、打乱选项、隐藏结果、仅成员参与等设置时。
限制
资料明确指出:投票不能放入富消息(24 种 InputRichBlock 类型中没有投票块)、不能放入相册(sendMediaGroup 仅接受音频、文档、实时照片、照片、视频)、不能通过 sendMessage 发送。文本超过 1024 字符时,需先单独发送一条消息(例如富消息),再发送投票。已发送的投票无法编辑。