如何用Python Telebot实现管理员Bot获取Telegram频道成员列表?
使用telebot获取Telegram频道所有成员的解决方案
首先明确:Telegram Bot API本身没有提供一次性获取频道所有成员的接口,因为频道成员规模可能极大,官方仅支持分页获取成员列表,且Bot必须拥有频道管理员权限并开启「查看成员」权限。
实现步骤
确认Bot权限
确保你的Bot已被添加为频道管理员,并且在权限设置中勾选了「查看成员」选项。获取成员总数(可选)
先通过get_chat_members_count方法获取频道成员总数,方便后续分页逻辑:import telebot bot = telebot.TeleBot("你的Bot令牌") chat_id = "@你的频道用户名" # 或频道的数字ID member_count = bot.get_chat_members_count(chat_id) print(f"频道总成员数:{member_count}")分页循环获取所有成员
telebot库未直接封装getChatMembers接口,但可以通过bot.api.request调用底层Telegram API,循环分页获取所有成员:def get_all_channel_members(chat_id): all_members = [] offset = 0 limit = 100 # 每次最多获取100个成员,API限制最大值为100 while True: # 调用底层API获取分页成员 response = bot.api.request( 'getChatMembers', {'chat_id': chat_id, 'offset': offset, 'limit': limit} ) members_page = response['result'] if not members_page: break # 无更多成员,终止循环 all_members.extend(members_page) offset += limit # 可选:添加延时避免触发API限流 # import time # time.sleep(1) return all_members # 调用方法并输出成员信息 all_members = get_all_channel_members(chat_id) for member in all_members: user_info = member['user'] print( f"用户ID: {user_info['id']}, " f"用户名: {user_info.get('username', '无')}, " f"昵称: {user_info.get('first_name', '')} {user_info.get('last_name', '')}" )
注意事项
- API限流:Telegram对
getChatMembers的调用频率有严格限制,成员数量较多时建议添加延时,避免Bot被暂时封禁。 - 隐私限制:私有频道必须确保Bot是管理员才能获取成员;公开频道同样需要Bot具备管理员权限才能通过API拉取成员列表。
- 库版本:确保使用最新版的
pyTelegramBotAPI(可通过pip install --upgrade pyTelegramBotAPI更新),避免API调用兼容问题。
内容的提问来源于stack exchange,提问作者Dossier Telegram
相关产品推荐
相关产品推荐

