如何使Telegram Bot从提及中获取用户信息

时间:2018-07-07 13:06:49

标签: java telegram telegram-bot

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

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

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

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

然后主要问题是:我该如何解决?

1 个答案:

答案 0 :(得分:0)

目前,是正确的方法。

对于这种功能,您可以使用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;