【问题标题】:How to make Telegram Bot get User info from mention如何让 Telegram Bot 从提及中获取用户信息
【发布时间】:2018-12-15 20:06:20
【问题描述】:

我刚开始学习 Telegram Bot API,以了解如何通过 Java 编写 Bot。 我不明白该机器人如何识别通过@<username> 提及的用户并获取有关他的信息。

例如,假设我希望我的机器人能够计算并存储用户被提及到组中的次数。他需要的是被标记用户的id

我可以解析传入消息以使用update.getMessage().getEntities() 检测实体,然后使用MessageEntity.getType() 获取实体类型。现在,如果我理解的话,有两种类型的提及:mention 用于提及通过@<username> 进行的提及,text_mention 用于提及没有用户名的用户。 问题来了,因为我希望机器人能够检索有关具有用户名的用户的更多信息,因为它是可编辑但唯一的,而不是没有用户名的用户,因为他是使用他保存的名称“标记”的在发件人的联系人列表中。 相反,只有text_mention 类型MessageEntity 对象包含User 对象,我可以从中获取用户的id,正如我在Telegram Bot API documentation 中阅读的那样。从mention 输入MessageEntity 对象我可以只获取用户名本身,因为它是文本,但这还不够,因为它可以更改。

所以我的第一个问题是:为什么?我真的不明白为什么text_mention 应该携带有关标记用户的信息,而mention 不应该。

那么主要的问题是:我该如何解决这个问题?

【问题讨论】:

    标签: java telegram telegram-bot


    【解决方案1】:

    目前没有正确的方法可以做到这一点。

    对于此类功能,您可以使用TdLib。这里是Java examples

    如果用户在组中,在他们被提及的地方,您可以使用此类方法获取用户列表并按用户名查找:

    //@description  Return recently joined users in reverse chronological order 
    channelParticipantsRecent = ChannelParticipantsFilter;
    
    //@description  Return privileged participants  
    channelParticipantsAdmins = ChannelParticipantsFilter;
    
    //@description  Return kicked from the channel  
    channelParticipantsKicked = ChannelParticipantsFilter;
    
    //@description  Return bots in the channel  
    channelParticipantsBots = ChannelParticipantsFilter;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2019-02-14
      • 2022-07-28
      • 1970-01-01
      • 2018-11-04
      • 2023-03-14
      • 2017-02-24
      相关资源
      最近更新 更多