如何使用Pyrogram实现以用户使用的语言进行自动回复?
Telegram Bot 获取用户language_code解决方案
Telegram 未开放主动查询用户语言的API接口,
language_code字段仅会在用户主动触发的交互事件(消息、回调查询、inline请求等)的Updatepayload 中返回,无法通过get_users这类通用用户查询接口获取。
具体实现方案如下:
- 从交互事件的User对象中直接取值
不同框架的取值示例:- python-telegram-bot:
update.effective_user.language_code - pyTelegramBotAPI:
message.from_user.language_code - 原生HTTP API:取
Update对象下from字段的language_code属性
拿到的返回值为ISO 639-1标准的两位语言代码,例如zh代表中文、en代表英文、ru代表俄语。
- python-telegram-bot:
- 处理空值场景
language_code是可选返回字段,若用户未公开语言设置、使用未收录的小众语言时,该字段会返回None,此时可以做两种降级处理:- 直接使用你预设的默认语言回复
- 发送语言选择菜单让用户手动指定,将用户选择的语言和用户ID绑定存入你的数据库,后续优先读取数据库中用户手动选择的语言
- 主动推送场景的适配
如果你需要主动给用户推送消息,需要在用户第一次和机器人交互时,就把他的user_id和对应language_code存入你的数据库,后续推送时直接从库中查询即可,不要试图调用官方API主动查询用户语言,官方没有提供对应接口。
内容的提问来源于stack exchange,提问作者s1ckoleg
相关产品推荐
相关产品推荐

