如何检查用户是否是Telegram组的成员?

时间:2018-03-28 23:42:38

标签: java scala api telegram

我想使用Telegram API来确认给定用户是指定组的成员。我可以成功验证用户给出的电话号码和他们发送的代码,但除此之外,我很遗憾。我以为我可以使用client.contactsSearch开始@groupname,但这会返回一个空的向量。

我使用的是Scala的Kotlogram库,但它只是MT协议的一个薄包装。

2 个答案:

答案 0 :(得分:1)

对于Bot API,您可以使用getChatMember方法。

结果将包含memberleft等的status

答案 1 :(得分:0)

这就是我最终想出来的。不过,我不知道这是否是最佳方法。

val PhoneNumber = "+1..."

val app = new TelegramApp(..., "...", "...", "0.0.1", "0.0.1", "en")

class ApiStorage extends TelegramApiStorage {
    ...
}

val client = Kotlogram.getDefaultClient(app, new ApiStorage)

val sentCode = client.authSendCode(false, PhoneNumber, true)
val code = scala.io.StdIn.readLine()
val authorization = client.authSignIn(PhoneNumber, sentCode.getPhoneCodeHash, code)

val self = authorization.getUser.getAsUser

val name = s"${self.getFirstName} ${self.getLastName}"

val userInput = new TLInputUser(self.getId, self.getAccessHash)

client.contactsSearch("@groupname", 100).getChats.toArray.map(_.asInstanceOf[TLChannel]).find(_.getUsername == "groupname") match {
    case Some(channel) =>
        val channelInput = new TLInputChannel(channel.getId, channel.getAccessHash)
        val isMember = Try { client.channelsGetParticipant(channelInput, userInput) } map { _ => true } getOrElse false
        if (isMember) {
            println("Is a member")
        } else {
            println("Is not a member")
        }

    case None =>
        println("Can't find channel @groupname")
}

client.close()