Menguping pada obrolan telegram menggunakan klien Anda

Saya pernah ingin memiliki pesan dari salah satu obrolan telegram yang tersimpan di disk saya (tanpa memulai klien biasa). Saya tidak akan mengungkapkan motif saya, tetapi kesempatan ini bagi saya tampaknya perlu dan bermanfaat.


Ada banyak bot dalam telegram untuk ini. Di HabrΓ© ada beberapa artikel yang ditujukan untuk bot, misalnya: " Obrolan-asisten ke situs ".


Bot memungkinkan Anda membaca dan mengirim pesan, Anda tidak perlu telepon untuk mendaftarkan bot, dan jumlah bot bisa berapa saja. Namun nama bot menyertakan kata "bot", yang dapat menyebabkan pertanyaan yang tidak perlu dari host obrolan.


Tetapi, seperti yang mereka katakan, pertanyaan yang diajukan dengan benar adalah setengah dari jawabannya.


Ternyata selain "API bot Telegram" ada juga "API klien Telegram", yaitu. API untuk membuat klien Anda sendiri.


Klien juga dapat mengirim dan membaca pesan, tetapi hanya dari pengguna terdaftar (terkait dengan telepon), yang hanya cocok untuk saya (saya sudah terdaftar dalam obrolan).


Situs web telegram memiliki daftar API untuk berbagai platform: https://telegram.org/apps#source-code


Namun, pustaka yang paling mudah digunakan adalah python: Pustaka klien Pure Python 3 MTProto API Telegram yang disebut "telethon"


Hanya di sini masalahnya. Saya tidak tahu python. Ya, ada alasan untuk bertemu denganmu.
Menurut manual teleton, instalasinya sangat sederhana. Jalankan saja perintah di baris perintah:


pip3 install telethon 

Jebakan yang saya temui saat instalasi:


  • pip3 tidak diinstal (installer untuk python).

sudo apt-get -y instal python3-pip


  • Perpustakaan hanya berfungsi pada versi python> 3.5. Jadi, Anda mungkin harus memperbaruinya.

Semuanya sudah mapan. Gulir readme.txt lebih lanjut.


Poin berikutnya adalah pembuatan klien telegram ... Bagaimana, sudah? Ya, semuanya sederhana. Benar, pertama-tama Anda harus mendaftarkan diri sebagai pencipta klien.


Kami pergi ke situs web telegram: https://my.telegram.org
Kami memasuki telepon dan menunggu kode konfirmasi pada klien asli telegram. Cukup panjang (12 karakter) dan tidak nyaman untuk input.


Kami pergi ke item " API ". Kami mencari "API Telegram" dan pergi ke "Membuat aplikasi" ( https://my.telegram.org/apps ).


Isi kolom App title dan Short name , klik "Buat aplikasi" dan ingat dua variabel: api_id dan api_hash .


Saatnya membuat klien.


 from telethon import TelegramClient, sync #  api_id  api_hash api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' client = TelegramClient('session_name', api_id, api_hash) client.start() 

session_name - Anda dapat memasukkan nama apa saja. Anda akan diminta untuk memasukkan telepon dan kode konfirmasi akan dikirim. Setelah itu, klien akan bekerja tanpa memanggil telepon (sampai Anda mengubah session_name). File session_name.session akan muncul di sebelah program Anda.


Jika tidak ada kesalahan, klien siap. Hanya sekarang, itu tidak menampilkan apa pun. Mari kita coba untuk mendapatkan informasi yang bermanfaat.


Pelajari sedikit tentang diri Anda:


 print(client.get_me().stringify()) 

hasilnya diberikan dalam bentuk:


 User( photo=None, last_name='Pupkin', first_name='Vasya', id=123456789, phone='79041234567', .... - - ... ) 

Kami dapat mengirim pesan dari diri kami sendiri:


 client.send_message('username', 'Hello! Talking to you from Telethon') 

Anda bisa dan gambar


 client.send_file('username', '/home/myself/Pictures/holidays.jpg') 

Seperti orang lain melihat saya:


 client.download_profile_photo('me') 

Kami melihat obrolan tempat kami berlangganan:


 print all chats name for dialog in client.iter_dialogs(): print(dialog.title) 

kami membaca semua pesan obrolan "chat_name" (dengan hati-hati, mungkin ada banyak pesan)


 messages = client.get_entity('chat_name') print(messages) 

lihat semua pengguna obrolan


 participants = client.get_participants('chat_name') print(participants) 

Terlibat dalam?
Sekarang, sebenarnya, kami melakukan apa yang kita semua mulai ini untuk ...


Kami membutuhkan program yang memonitor pesan baru di saluran tertentu.


Untuk mencegah klien menyelesaikan pekerjaan, setelah client.start () kami memasukkan baris:


 client.run_until_disconnected() 

Konstruk ini (disisipkan sebelum client.start ()) hanya menampilkan pesan baru:


 @client.on(events.NewMessage(chats=('chat_name'))) async def normal_handler(event): # print(event.message) print(event.message.to_dict()['message']) 

Mari kita cari tahu.


 @client.on(events.NewMessage(chats=('chat_name'))) 

membuat acara yang menyala saat pesan baru muncul


  print(event.message) 

menampilkan pesan dalam formulir ini:


 Message(edit_date=None, views=None, reply_markup=None, fwd_from=None, id=187, entities=[], post=False, mentioned=False, via_bot_id=None, media_unread=False, out=True, media=None, date=datetime.datetime(2018, 10, 1, 9, 26, 21, tzinfo=datetime.timezone.utc), to_id=PeerChannel(channel_id=123456789), reply_to_msg_id=None, from_id=123456789, silent=False, grouped_id=None, post_author=None, message='hello telegram') 

Dari semua ini, kita membutuhkan bidang: "message = 'hello telegram'":


  print(event.message.to_dict()['message']) 

Pesan diterima, tetapi dari siapa itu, tidak jelas, karena hanya ID pengguna per pesan. Untuk mencocokkan ID dan nama pengguna, unduh semua pengguna obrolan dan masukkan mereka ke dalam kamus (hash) dalam bentuk d [id] = "first_name last_name"


 participants = client.get_participants(group) users={} for partic in client.iter_participants(group): lastname="" if partic.last_name: lastname=partic.last_name users[partic.id]=partic.first_name+" "+lastname 

Sekarang kita bisa mengetahui siapa yang mengirim pesan:


 s_user_id=event.message.to_dict()['from_id'] user_id=int(s_user_id) user=d.get(user_id) 

Pada prinsipnya, Anda bisa mendapatkan nama pengguna dari telegram secara langsung, tetapi jika ada beberapa pengguna, lebih mudah dengan kamus.


Kami mendapatkan tanggal pengiriman dari pesan:


 mess_date=event.message.to_dict()['date'] 

Semuanya, semua data yang kita miliki. Tetap menulisnya ke file.
Untuk melakukan ini, pertama buka file untuk ditulis:


 f=open('messages_from_chat', 'a') 

Dan tulis pesannya:


 f.write(mess_date.strftime("%d-%m-%Y %H:%M")+"\n") f.write(user+"\n") f.write(user_mess+"\n\n") f.flush() 

Itu saja! Semua yang saya butuhkan, programnya. Utilitas, tentu saja, lembab, tetapi melakukan tugasnya.


Python tidak begitu rumit seperti yang dilukis , terutama karena deskripsi berbagai perpustakaan di Internet penuh. Untuk menulis beberapa utilitas lebih banyak dan membiasakan diri, Anda dapat menggunakannya sebagai bahasa scripting bukan bash.


Seluruh teks utilitas:
 from telethon import TelegramClient, sync, events api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' client = TelegramClient('session_name', api_id, api_hash) @client.on(events.NewMessage(chats=('chat_name'))) async def normal_handler(event): # print(event.message) user_mess=event.message.to_dict()['message'] s_user_id=event.message.to_dict()['from_id'] user_id=int(s_user_id) user=d.get(user_id) mess_date=event.message.to_dict()['date'] f.write(mess_date.strftime("%d-%m-%Y %H:%M")+"\n") f.write(user+"\n") f.write(user_mess+"\n\n") f.flush() client.start() group='group_name' participants = client.get_participants(group) users={} for partic in client.iter_participants(group): lastname="" if partic.last_name: lastname=partic.last_name users[partic.id]=partic.first_name+" "+lastname f=open('messages_from_chat', 'a') client.run_until_disconnected() f.close() 

Deskripsi lengkap tentang perpustakaan .

Source: https://habr.com/ru/post/id425151/


All Articles