2015-11-21 10 views
8

Chiunque dia inizio a come posso ottenere informazioni sugli utenti dal mio bot di telegramma. Immagina il mio bot in un utente amministratore nel mio canale e desidero ottenere l'utente del mio canale elencare o essere notato quando un nuovo utente si unisce. Come lo posso fare. I documenti di Telegram sono così poco organizzati. Finora ho guardato questi:Come ottenere l'elenco degli utenti del canale Telegram con l'API di Telegram Bot

https://core.telegram.org/bots

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

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

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

Ma nessuno di questi aiuta veramente.

+0

M.Shahrokhi, Vedi qualche soluzione che supporta le API da Bot? –

risposta

3

Al fine di ottenere l'elenco degli utenti, è necessario utilizzare telegramma di API.

L'API di Telegram è piuttosto complicata. Ci sono alcuni clienti che possono svolgere il lavoro molto più velocemente.

per Python, c'è Telethon, e il metodo per ottenere gli utenti del canale è:

get_full_channel.

7

Il bot di Telegram non mantiene nulla sugli utenti. Dovresti salvare da solo tutti gli utenti che comunicano con il tuo bot. Ad esempio, archivia i loro ID nel database.

In caso di canale: è possibile ottenere queste informazioni dall'elenco dei membri del canale.

Se è necessario essere avvisati, il bot deve memorizzare gli utenti da qualche parte e verificare se l'utente è nuovo.

+0

Sono d'accordo, ma: in caso di canali: le API Bot di Telegram NON sono correlate alla gestione del canale.La notizia (vedi: https://core.telegram.org/bots/api#recent-changes) è che il proprietario di un canale può aggiungere (uno o più) bot come amministratore di canale. In questo caso, "admin bot" può accedere agli ID degli utenti del canale. Vedi: http://telegram.wiki/tips:channels –

+3

@GiorgioRobino in questo momento bot può solo accedere ai messaggi del gruppo, ma bot non ha accesso agli utenti di gruppi o canali (non esiste tale API), e anche se bot è admin, non ha accesso ai messaggi del canale. Forse è un bug –

+0

Sì. Non esiste una specifica API Bot per recuperare tutti gli ID (né per 1. Gli iscritti Bot, né per 2. bot come amministratore di un canale). Nel caso in cui 1 bot possa raccogliere e memorizzare ID (come hai detto tu). Nel caso 2: un bot di amministratore del canale POTREBBE vedere i messaggi del canale. Se hai provato questo non è vero ... (non ho ancora), quindi sono d'accordo: è un bug .. –

0

Bot non può accedere all'elenco degli utenti del canale tramite API. Uno hanno due possibilità per raggiungere questo obiettivo:

+1

Potresti elaborare come usare https://github.com/vysheng/tgl per rispondere alla domanda ? Non vedo altra documentazione oltre al funzionario, che abbiamo già stabilito non supporta gli elenchi di utenti fuori dagli schemi. –

+0

si dovrebbe usare il comando tgl 'channel_get_members' – Belegnar

+0

La prima dose teorica non funziona. perché non ci sono informazioni "XXX Join the channel" negli oggetti di aggiornamento restituiti. –

0

Non esiste alcuna API per il bot di Telegram per accedere agli utenti del canale o del gruppo. Se l'accesso agli utenti del gruppo è importante per te, ti suggerisco di usare Telegram-CLI. Puoi accedere a tutte le API dell'account utente di Telegran in modo da avere accesso a tutti i dati degli utenti del tuo gruppo.

https://github.com/vysheng/tg

1

Per ottenere l'elenco utenti, è necessario utilizzare l'API telegramma.

L'API di Telegram è piuttosto complicata. Ci sono alcuni clienti che possono svolgere il lavoro molto più velocemente.

per Python, c'è Telethon, e il codice per ottenere gli utenti del canale è:

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

questo pezzo di codice non funziona –