2015-11-21 12 views
8

Irgendjemand geben einen Starter an, wie ich Informationen über Benutzer von meinem Telegramm bot erhalten kann. Stellen Sie meinen Bot in einem Adminbenutzer in meinem Kanal dar und ich möchte meinen Kanalbenutzer erhalten Liste oder zu bemerken, wenn ein neuer Benutzer beitritt. Wie kann ich das machen. Telegrams Dokumente sind so unorganisiert. bisher habe ich auf diese sah:Wie man Telegrammkanalbenutzerliste mit Telegram Bot erhält API

https://core.telegram.org/bots

https://core.telegram.org/bots/api

https://core.telegram.org/bots/samples

https://core.telegram.org/bots/faq

Aber keiner von ihnen wirklich hilft.

+0

M.Shahrokhi, Haben Sie eine Lösung gefunden, die von Bot-APIs unterstützen? –

Antwort

3

Um Benutzerliste zu erhalten, müssen Sie Telegramm API verwenden.

Telegram API ist ziemlich kompliziert. Es gibt einige Clients, die die Arbeit viel schneller erledigen können.

Für Python gibt es Telethon, und die Methode Kanal Anwender zu erhalten ist:

get_full_channel.

7

Telegram Bot speichert nichts über Ihre Benutzer. Sie sollten alle Benutzer, die mit Ihrem Bot kommunizieren, selbst speichern. Speichern Sie beispielsweise ihre IDs in der Datenbank.

Im Falle von Channel - Sie können diese Informationen aus der Mitgliederliste von Channel erhalten.

Wenn Sie benachrichtigt werden müssen - Ihr Bot sollte Benutzer irgendwo speichern und überprüfen, ob Benutzer ein neuer ist.

+0

Ich stimme zu, aber: im Falle von Kanälen: Telegram Bot APIs sind überhaupt nicht im Zusammenhang mit Channel-Management.Die Nachricht (siehe: https://core.telegram.org/bots/api#recent-changes) ist, dass ein Channel-Besitzer (einen oder mehrere) Bot als Channel-Administrator (en) hinzufügen kann. In diesem Fall kann "admin bot" auf Kanalbenutzer-IDs zugreifen. Siehe: http://telegram.wiki/tips:channels –

+3

@GiorgioRobino im Moment Bot kann nur Zugriff auf die Gruppen-Nachrichten haben, aber Bot hat keinen Zugriff auf Gruppen- oder Channel-Benutzer (es gibt keine solche API) und auch wenn Bot ist Admin, er hat keinen Zugriff auf Nachrichten des Kanals. Vielleicht ist es ein Bug –

+0

Ja. Es gibt keine spezielle Bot-API, um alle IDs abzurufen (weder für 1. Bot-Abonnenten, noch für 2. Bot als Admin eines Channels). Im Fall 1 kann Bot IDs sammeln und speichern (wie Sie gesagt haben). Im Fall 2: Ein Kanaladministrator kann KANAL-Nachrichten sehen. Wenn Sie das getestet haben ist das nicht wahr ... (Ich habe es noch nicht), also stimme ich zu: es ist ein Bug .. –

0

Bot kann über api nicht auf die Kanalbenutzerliste zugreifen. One haben zwei Möglichkeiten, dies zu erreichen:

  • fangen alle Kanalnachrichten und Filter "XXX ist dem Kanal" ein - dies in der Theorie ist, ich nicht
  • versucht haben
  • Verwendung https://github.com/vysheng/tgl
+1

Könnten Sie näher erläutern, wie die Verwendung von https://github.com/vysheng/tgl die Frage beantworten wird ? Ich sehe keine andere Dokumentation als den offiziellen, der, wie wir bereits festgestellt haben, keine Benutzerlisten aus der Box unterstützt. –

+0

sollten Sie den TGL-Befehl 'channel_get_members' verwenden – Belegnar

+0

Die erste theoretische Lösungsdosis funktioniert nicht. weil in den zurückgegebenen Aktualisierungsobjekten keine "XXX Joined the channel" Informationen vorhanden sind. –

0

Es gibt keine API für den Telegramm-Bot, um auf Kanal- oder Gruppenbenutzer zuzugreifen. Wenn der Zugriff auf Gruppenbenutzer für Sie wichtig ist, empfehle ich Ihnen, Telegram-CLI zu verwenden. Sie können auf die API des Telegran-Benutzerkontos zugreifen, sodass Sie Zugriff auf alle Benutzerdaten Ihrer Gruppe haben.

https://github.com/vysheng/tg

1

Um die Benutzerliste zu erhalten, müssen Sie die Telegramm-API verwenden.

Telegram API ist ziemlich kompliziert. Es gibt einige Clients, die die Arbeit viel schneller erledigen können.

Für Python gibt es Telethon, und die Code-Kanal-Benutzer zu erhalten ist:

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)) 
+0

dieses Stück Code funktioniert nicht –

Verwandte Themen