誰でも、私の電報ボットからユーザーに関する情報をどのように取得できるかについて、スターターを与えます。チャンネルの管理者ユーザーにボットがあり、チャンネルユーザーリストを取得するか、新しいユーザーが参加したときに通知されるようにしたいとします。どうやってやるの。 Telegramのドキュメントはあまり整理されていません。これまで私はこれらを見てきました:
しかし、これらのどれも本当に役立ちません。
ユーザーリストを取得するには、電報APIを使用する必要があります。
Telegram APIはかなり複雑です。仕事をもっと速く終わらせることができるいくつかのクライアントがあります。
Pythonの場合、 Telethon があり、チャネルユーザーを取得する方法は次のとおりです。
get_full_channel
。
Telegram Botはユーザーに関する情報を一切保持しません。ボットと通信するすべてのユーザーを自分で保存する必要があります。たとえば、データベースにIDを保存します。
チャンネルの場合-この情報はチャンネルのメンバーリストから取得できます。
通知が必要な場合-ボットはユーザーをどこかに保存し、ユーザーが新しいユーザーかどうかを確認する必要があります。
ユーザーリストを取得するには、電報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))
他の人がすでに述べたように、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でチャネル/ユーザーを簡単に検索できます。
ボットは、API経由でチャンネルユーザーリストにアクセスできません。これを実現するには、2つの可能性があります。
TelegramボットがチャネルまたはグループユーザーにアクセスするためのAPIはありません。グループユーザーへのアクセスが重要な場合は、Telegram-CLIを使用することをお勧めします。すべてのTelegranユーザーアカウントのAPIにアクセスできるため、グループのすべてのユーザーデータにアクセスできます。