How to search for groups and channel in telegram using telethon?
Asked Answered
S

2

7

I use telethon for sending messages to telegram using python script.
I did not find anything in telethon to search for groups and channels I like used to search on telegram app. Please see iamge. How can I get such list using telethon?

enter image description here

Spikenard answered 26/5, 2020 at 7:3 Comment(3)
I believe this method is called contacts.search in raw API.Mamelon
Ironically enough, the SearchGlobal function of the API does not match up to the 'Global Search' functionality in the official TG app, but @Mamelon (well, duh, it's Lonami after all) nailed it - contacts.search performs a general, catch-everything search.Roseanneroseate
It seems that contacts.search just search within contacts and does not search globally.Vanpelt
D
3

Create file with your secrets: config.ini

[Telegram]
# no need for quotes

# you can get telegram development credentials in telegram API Development Tools
api_id = 1234
api_hash = 1234

# use full phone number including + and country code
phone = +4411111111111
username = session_user

One solution is this, do_search.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Tested with Telethon version 1.14.0

import configparser
from telethon import TelegramClient
from telethon.errors import SessionPasswordNeededError
from telethon.sync import TelegramClient
from telethon import functions, types

# Reading Configs
config = configparser.ConfigParser()
config.read("config.ini")

# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
# (1) Use your own values here
api_id = config['Telegram']['api_id']
api_hash = config['Telegram']['api_hash']

# (2) Create the client and connect
phone = config['Telegram']['phone']
username = config['Telegram']['username']
client = TelegramClient(username, api_id, api_hash)

async def main():
    await client.start()
    # Ensure you're authorized
    if not await client.is_user_authorized():
        await client.send_code_request(phone)
        try:
            await client.sign_in(phone, input('Enter the code: '))
        except SessionPasswordNeededError:
            await client.sign_in(password=input('Password: '))

    search = 'linux'
    result = await client(functions.contacts.SearchRequest(
        q=search,
        limit=100
    ))
    print(result.stringify())

with client:
    client.loop.run_until_complete(main())

And don't forget to always thank @lonami for creating this awesome library Telethon :)

Discus answered 4/6, 2020 at 23:48 Comment(5)
Thanks for answer but this is giving only 3 search resultsSpikenard
I understand that if you receive 3 results, then this is a bad answer for you? Why are you thinking this? Can you argue with more details. Thanks.Discus
I did not mean nor I said that its a bad answer. I am sorry if you feel like that. I just want all the search results which are visible in image in question.Spikenard
The number of the results depends strictly from your side. Test it with different account and you can see that the answer was correct. Is like to say that Google don't search well because don't find my word: ADGH5546SDF335yDiscus
The question is not about how to connect to telegram API using telethon. The only part you should mention was the contact.search option. such long answers with unrelated information can be misleading for lots of people.Diamond
G
-2
result = client.get_entity('binanceorderschat')
if result.megagroup == True:
   print('its group')
Giorgione answered 30/5, 2022 at 10:26 Comment(2)
Kindly add enough details to your answer so that it makes sense to future readers.Dominion
A code-only answer is not high quality. While this code may be useful, you can improve it by saying why it works, how it works, when it should be used, and what its limitations are. Please edit your answer to include explanation and link to relevant documentation.Coacervate

© 2022 - 2024 — McMap. All rights reserved.