我刚刚开始研究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
应该为何不应当携带。
然后主要问题是:我该如何解决?
答案 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;