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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:15:40