python-3.x 如何从频道(电视马拉松)中删除用户?

ct3nt3jp  于 2023-11-20  发布在  Python
关注(0)|答案(3)|浏览(97)

在电报中,当我点击订阅者时,它会显示大约50个最后的用户和大约150-200个已删除的用户。
我试过这个:

async for user in client.iter_participants(chat_id):
    if user.deleted:
        print(user)

字符串
这只给我最后50个用户和6-8个已删除的用户。我需要所有150-200个已删除的用户。我如何才能得到他们?

w1e3prcc

w1e3prcc1#

我使用带有offset参数的GetParticipantsRequest解决了这个问题,如下所示:

from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl.types import ChannelParticipantsSearch

chat_id = -123456

offset = 0
while True:
    participants = await client(GetParticipantsRequest(
        channel=chat_id,
        filter=ChannelParticipantsSearch(''),
        offset=offset,
        limit=10000,
        hash=0
    ))

    deleted_users = []
    for user in participants:
        if user.deleted:
            deleted_users.append(user)

    if not deleted_users:
        break

    # doings with deleted_users

字符串

vhmi4jdf

vhmi4jdf2#

不确定iter_participants,但get_participants在我的情况下工作。

channel_id = -1234567890 # TODO: add channel id
users = client.get_participants(client.get_input_entity(channel_id))
for user in users:
    if user.deleted:
        print(user)

字符串

dced5bon

dced5bon3#

下面是为我工作的代码:

from telethon.tl.types import ChannelParticipantsKicked
from telethon.sync import TelegramClient

api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'
group_id = 'YOUR_GROUP_ID'  # Replace with your group/channel ID (a positive integer)

client = TelegramClient('session_name', api_id, api_hash)

async def main():
    await client.start()
    
    # Fetching kicked members using get_participants
    kicked_members = await client.get_participants(group_id, filter=ChannelParticipantsKicked)
    for member in kicked_members:
        print(member.first_name, member.id)

    # Alternatively, iterating over kicked members using iter_participants
    async for user in client.iter_participants(group_id, filter=ChannelParticipantsKicked):
        print(user.first_name, user.id)

with client:
    client.loop.run_until_complete(main())

字符串
在这个脚本中:

  • YOUR_API_IDYOUR_API_HASHYOUR_GROUP_ID替换为您的实际API ID、API Hash和组/通道ID。
  • 该脚本连接到您的Telegram帐户,并检索已从指定组或频道踢出的用户列表。
  • 然后打印每个被踢成员的名字和ID。
    说明:
  • 使用get_participants()和过滤器:
  • 您可以使用Telethon库中的get_participants()方法,指定一个过滤器来只获取被踢出组或频道的用户。
  • 要使用的过滤器是ChannelParticipantsKicked,需要从telethon.tl.types导入。
  • 迭代已踢成员:或者,您可以使用iter_participants()来覆盖被踢用户的列表。如果您想单独处理用户而不首先将它们全部存储在变量中,则此方法非常有用。
  • 可用过滤器列表:get/iter_participants()提供多种过滤器。您可以根据具体需求选择过滤器。

相关问题