Can a Telegram bot read messages of channel
Asked Answered
A

2

33

Can a telegram bot read/access a telegram channel that neither I or the bot is administrator of?

I know that up to last November it was not possible, but I have heard some people have done this, but so far I am not able to do it.

I would really appreciate your input and knowledge.

P.s. any workaround would be great.

Another answered 8/3, 2017 at 12:58 Comment(0)
B
37

The FAQ reads:

  1. All bots, regardless of settings, will receive:

    • All service messages.
    • All messages from private chats with users.
    • All messages from channels where they are a member.
  2. Bot admins and bots with privacy mode disabled will receive all messages except messages sent by other bots.

  3. Bots with privacy mode enabled will receive:

    • Commands explicitly meant for them (e.g., /command@this_bot).
    • General commands from users (e.g. /start) if the bot was the last bot to send a message to the group.
    • Messages sent via this bot.
    • Replies to any messages implicitly or explicitly meant for this bot.

So, if your bot is a member of the channel it will receive all messages except those sent by other bots.

Boroughenglish answered 8/3, 2017 at 13:27 Comment(4)
Thanks lufte for quick response, but can you also tell me, how my bot can join PUBLIC channels? is there a way thru link of channel, username? thanks againAnother
That's a different question. Maybe you can get some clues from here #33127243.Boroughenglish
It's not posible yet, you can only recieve updates of messages with bot, if you want to get past message you need the core APIBiblioclast
Please, show us simple code snippet as wellAmorita
B
0

You can probably use the other type of Telegram API: Telegram [client] API and TDLib?

Using telethon library makes it easy to read channels history (see telethon docs).

For this, we need an api_id and an api_hash. So, do the following:

  1. Log in to Telegram core
  2. Open the API development tools area
  3. Fill out the simple form there
  4. Now you can receive your api_id and api_hash
    For more information, see Telegram's help documentation about how to get your API credentials.

Here is an example code that gets the last 5 messages of targetChannelId:

from telethon import TelegramClient


API_ID = 123456     # See above for how to get it
API_HASH = '123abc' # See above for how to get it
client = TelegramClient('my-client', API_ID, API_HASH)


async def main():
    async for message in client.iter_messages('targetChannelId', limit=5):
        print(message.id, message.text)


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

The first time you run this code it asks your phone number or bot token. Enter your phone number in the format +9912345... where 99 is your country code and the rest is your phone number. It then may send a login code to your Telegram app; enter it in the console.

Note: Only users (phone numbers) can see channel history messages; bots cannot (at least in telethon). Bots can only listen for channel updates only if they are one of its administrators.

The client.iter_messages() accepts other parameters like min_id which can be used to get messages only after a specific message (for example, we can save the last message id that we have processed and next time pass that id as min_id so only messages after that message are returned).

Butch answered 17/1 at 8:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.