web-dev-qa-db-ja.com

Telegram Bot APIでTelegramチャネルユーザーリストを取得する方法

誰でも、私の電報ボットからユーザーに関する情報をどのように取得できるかについて、スターターを与えます。チャンネルの管理者ユーザーにボットがあり、チャンネルユーザーリストを取得するか、新しいユーザーが参加したときに通知されるようにしたいとします。どうやってやるの。 Telegramのドキュメントはあまり整理されていません。これまで私はこれらを見てきました:

しかし、これらのどれも本当に役立ちません。

12
M.Shahrokhi

ユーザーリストを取得するには、電報APIを使用する必要があります。

Telegram APIはかなり複雑です。仕事をもっと速く終わらせることができるいくつかのクライアントがあります。

Pythonの場合、 Telethon があり、チャネルユーザーを取得する方法は次のとおりです。

get_full_channel

10
apadana

Telegram Botはユーザーに関する情報を一切保持しません。ボットと通信するすべてのユーザーを自分で保存する必要があります。たとえば、データベースにIDを保存します。

チャンネルの場合-この情報はチャンネルのメンバーリストから取得できます。

通知が必要な場合-ボットはユーザーをどこかに保存し、ユーザーが新しいユーザーかどうかを確認する必要があります。

9
Stas Parshin

ユーザーリストを取得するには、電報APIを使用する必要があります。

Telegram APIはかなり複雑です。仕事をもっと速く終わらせることができるいくつかのクライアントがあります。

Pythonの場合、 Telethon があり、チャネルユーザーを取得するコードは次のとおりです。

from telethon import TelegramClient

from telethon.tl.functions.contacts import ResolveUsernameRequest
from telethon.tl.functions.channels import GetAdminLogRequest

from telethon.tl.types import InputChannel
from telethon.tl.types import ChannelAdminLogEventsFilter
from telethon.tl.types import InputUserSelf
from telethon.tl.types import InputUser

# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
api_id = ****** # Your api_id
api_hash = '********************************' # Your api_hash
phone_number = '+989122594574' # Your phone number

client = TelegramClient(phone_number, api_id, api_hash)
client.session.report_errors = False
client.connect()

if not client.is_user_authorized():
    client.send_code_request(phone_number)
    client.sign_in(phone_number, input('Enter the code: '))


channel = client(ResolveUsernameRequest('tabe_eshgh')) # Your channel username

user = client(ResolveUsernameRequest('amir2b')) # Your channel admin username
admins = [InputUserSelf(), InputUser(user.users[0].id, user.users[0].access_hash)] # admins
admins = [] # No need admins for join and leave and invite filters

filter = None # All events
# param: (join, leave, invite, ban, unban, kick, unkick, promote, demote, info, settings, pinned, edit, delete)
filter = ChannelAdminLogEventsFilter(True, True, True, False, False, False, False, False, False, False, False, False, False, False)

result = client(GetAdminLogRequest(InputChannel(channel.chats[0].id, channel.chats[0].access_hash), '', 0, 0, 10, filter, admins))
##print(result)

for _user in result.users:
    ##print(_user.id)
    with open(''.join(['users/', str(_user.id)]), 'w') as f:
        f.write(str(_user.id))
3
Amir Bashiri

他の人がすでに述べたように、Bot APIを介してチャンネルユーザーをリストすることはできません。

ただし、 MTProto API を使用して、プレーンユーザーとしてログインし、デスクトップまたはモバイルアプリケーションで表示できるすべてにプログラムでアクセスできます。

MTProtoを使用するには、既存のTelegramアカウントで https://my.telegram.org/ にログインし、 資格情報を取得api_idおよびapi_hash

Telethon pythonライブラリを使用してTelegramチャネル/グループユーザーのリストを取得する方法の実用的な例を示します。

from telethon import TelegramClient, sync

api_id = 'FILL REAL VALUES HERE'
api_hash = 'FILL REAL VALUES HERE'

client = TelegramClient('xxx', api_id, api_hash).start()

# get all the channels that I can access
channels = {d.entity.username: d.entity
            for d in client.get_dialogs()
            if d.is_channel}

# choose the one that I want list users from
channel = channels[channel_name]

# get all the users and print them
for u in client.get_participants(channel):
    print(u.id, u.first_name, u.last_name, u.username)

client.get_entity() を使用すると、名前/電話/ URLでチャネル/ユーザーを簡単に検索できます。

3
max taldykin

ボットは、API経由でチャンネルユーザーリストにアクセスできません。これを実現するには、2つの可能性があります。

  • すべてのチャネルメッセージをキャッチし、「XXXがチャネルに参加しました」の1つをフィルタリングします-これは理論上、私は試しませんでした
  • 使用 https://github.com/vysheng/tgl
0
Belegnar

TelegramボットがチャネルまたはグループユーザーにアクセスするためのAPIはありません。グループユーザーへのアクセスが重要な場合は、Telegram-CLIを使用することをお勧めします。すべてのTelegranユーザーアカウントのAPIにアクセスできるため、グループのすべてのユーザーデータにアクセスできます。

https://github.com/vysheng/tg

0
Hadi.A