Telethon Bot调用GetDialogsRequest报错,求获取非管理员用户列表方法
解决Telethon Bot无法使用GetDialogsRequest及获取非管理员用户列表的问题
一、替换GetDialogsRequest获取群组列表
Telegram官方限制Bot账号调用GetDialogsRequest底层API方法,你需要改用Telethon为Bot适配的高层方法来获取群组列表,比如get_dialogs()或iter_dialogs():
修正后的群组获取代码:
groups = [] # 获取所有对话并筛选出群组/超级群 dialogs = await bot.get_dialogs() groups = [d.entity for d in dialogs if d.is_group or d.is_channel] # 输出群组选择菜单 print('[+] scegli il gruppo dove vuoi bannare gli utenti:') for i, g in enumerate(groups): print(f'[{i}] - {g.title}') g_index = input("inserisci il numero del gruppo scelto: ") target_group = groups[int(g_index)]
二、获取排除管理员的用户列表
获取到目标群组后,有两种方式筛选出非管理员用户:
方法1:通过ID集合过滤
from telethon.tl.types import ChannelParticipantsAdmins # 获取群组所有参与者 all_participants = await bot.get_participants(target_group) # 获取群组所有管理员 admins = await bot.get_participants(target_group, filter=ChannelParticipantsAdmins) # 提取管理员ID集合(去重且查询高效) admin_ids = {admin.id for admin in admins} # 筛选出不在管理员列表中的用户 non_admin_users = [user for user in all_participants if user.id not in admin_ids]
方法2:直接检查参与者权限状态
from telethon.tl.types import ChatMemberAdmin, ChatMemberCreator non_admin_users = [] # 遍历所有参与者,过滤掉管理员和群组创建者 async for user in bot.iter_participants(target_group): if not isinstance(user.status, (ChatMemberAdmin, ChatMemberCreator)): non_admin_users.append(user)
完整修正后的代码片段
import asyncio from telethon import TelegramClient from telethon.tl.types import ChannelParticipantsAdmins # 初始化Bot客户端(替换为你的参数) bot = TelegramClient('bot_session', 你的API_ID, 你的API_HASH).start(bot_token='你的BotToken') async def main(): groups = [] # 获取群组列表 dialogs = await bot.get_dialogs() groups = [d.entity for d in dialogs if d.is_group or d.is_channel] print('[+] scegli il gruppo dove vuoi bannare gli utenti:') for i, g in enumerate(groups): print(f'[{i}] - {g.title}') g_index = input("inserisci il numero del gruppo scelto: ") target_group = groups[int(g_index)] print("Seleziono gli utenti...") # 获取非管理员用户列表 all_participants = await bot.get_participants(target_group) admins = await bot.get_participants(target_group, filter=ChannelParticipantsAdmins) admin_ids = {admin.id for admin in admins} non_admin_users = [user for user in all_participants if user.id not in admin_ids] print(f"找到 {len(non_admin_users)} 个非管理员用户") # 运行主逻辑 asyncio.run(main())
内容的提问来源于stack exchange,提问作者ElToreador
相关产品推荐
相关产品推荐

