You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Telegram API验证指定用户是否为目标群组成员?

解决Kotlogram中检查用户是否为群组成员的问题

嘿,我懂你现在的困惑——client.contactsSearch(@groupname)返回空完全是用错方法啦!这个API是用来搜索你的私人联系人列表的,不是找群组的,所以搜群组名肯定得不到结果。下面给你一步步捋清楚正确的操作流程:

第一步:获取目标群组的Channel对象

要操作群组,首先得通过群组的username拿到它的核心信息。用contactsResolveUsername方法就能解析任何公开的用户名(包括群组、频道、用户),代码示例:

import org.drinkless.td.libcore.telegram._
import org.drinkless.td.libcore.telegram.api._
import org.drinkless.td.libcore.telegram.objects._

// 解析群组用户名,替换成你的目标群组@username
val resolveResponse = client.contactsResolveUsername("@your_group_username").execute()

// 从返回结果中提取Channel对象(群组在Telegram里属于Channel类型)
val targetGroup = resolveResponse.getChats.stream()
  .filter(chat => chat.isInstanceOf[Channel])
  .findFirst()
  .map(_.asInstanceOf[Channel])
  .orElseThrow(() => new RuntimeException("找不到指定的群组,请确认用户名正确且群组公开"))

第二步:获取群组成员列表(分页处理)

Telegram限制单次获取成员的数量(最多200个),所以如果是大群组,需要循环分页拉取。用channelsGetParticipants方法来获取成员:

var offset = 0
val limit = 200
var isTargetUserMember = false
val targetUserId = 123456789L // 替换成你要检查的用户ID

while (!isTargetUserMember && offset >= 0) {
  val participantsResponse = client.channelsGetParticipants(
    new InputChannel(targetGroup.getId, targetGroup.getAccessHash),
    new ChannelParticipantsSearch(""), // 空字符串表示拉取所有成员,也可以填用户名精准搜索
    offset,
    limit
  ).execute()

  // 检查当前页的成员里是否包含目标用户
  isTargetUserMember = participantsResponse.getParticipants.stream()
    .anyMatch(participant => participant.isInstanceOf[ChannelParticipant] && 
      participant.asInstanceOf[ChannelParticipant].getUserId == targetUserId)

  // 更新offset,如果返回的成员数量小于limit,说明已经拉完所有成员
  offset = if (participantsResponse.getParticipants.size() < limit) -1 else offset + limit
}

关键注意事项

  • 权限问题:如果是私有群组,你的账号必须是群组成员才能获取成员列表,否则会返回权限错误。
  • Rate Limit:频繁调用成员拉取API可能触发Telegram的限流机制,建议大群组拉取时加入适当的间隔时间。
  • 用户ID vs 用户名:如果只有目标用户的用户名,可以在ChannelParticipantsSearch里填入该用户名,这样会直接返回匹配的成员,不用遍历所有成员,效率更高。

内容的提问来源于stack exchange,提问作者Isvara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:44:25