📜  如何使用 Telethon 从电报组获取所有消息 - Python (1)

📅  最后修改于: 2023-12-03 15:23:57.848000             🧑  作者: Mango

如何使用 Telethon 从电报组获取所有消息 - Python

介绍

Telethon 是一个 Python 3 的异步电报客户端,在使用电报 API 时快速、轻松和有趣。这篇文章介绍了如何使用 Telethon 从电报组获取所有消息。Telethon 的官方文档详细介绍了一些高级用法,这里将摘取其中的部分内容进行介绍。

安装和设置
安装

使用 pip 安装 Telethon:

pip install telethon
设置

在使用电报 API 之前需要先创建一个应用程序,官方文档提供了创建应用程序的详细步骤。创建应用程序后,需要设置 API ID 和 API HASH,示例代码如下:

from telethon import TelegramClient

api_id = 12345 # 替换成你的 API ID
api_hash = '0123456789abcdef0123456789abcdef' # 替换你的 API HASH

client = TelegramClient('session_name', api_id, api_hash)

可以通过访问 https://my.telegram.org/apps 来查看应用程序的 API ID 和 API HASH。

获取所有消息

要从电报组中获取所有消息,需要调用 iter_messages 方法,该方法会返回一个迭代器,用于遍历电报组中的所有消息。示例代码如下:

from telethon import TelegramClient

api_id = 12345 # 替换成你的 API ID
api_hash = '0123456789abcdef0123456789abcdef' # 替换你的 API HASH

client = TelegramClient('session_name', api_id, api_hash)

async def get_all_messages(entity):
    async for message in client.iter_messages(entity):
        print(message.text)

with client:
    entity = 'group_name' # 替换成你的电报组名或 ID
    client.loop.run_until_complete(get_all_messages(entity))

此示例使用 async for 循环遍历在 client.iter_messages 中返回的所有消息。每条消息都是一个 telethon.tl.custom.message.Message 对象,它具有许多有用的属性,例如 text 属性。

其他用法

Telethon 提供了许多其他用法,例如:

  • 使用 [chats](https://docs.telethon.dev/en/latest/modules/client.html#telethon.client.messages.MessageMethods.get_chats) 方法从电报服务器检索通话和电报组等。可以使用 entity 属性获取每个聊天的实体。示例代码如下:
from telethon import TelegramClient

api_id = 12345 # 替换成你的 API ID
api_hash = '0123456789abcdef0123456789abcdef' # 替换你的 API HASH

client = TelegramClient('session_name', api_id, api_hash)

async def get_all_chats():
    async for chat in client.get_chats():
        entity = chat.entity
        print(entity.id, entity.title)

with client:
    client.loop.run_until_complete(get_all_chats())
  • 使用 [functions.messages.GetDialogs](https://docs.telethon.dev/en/latest/modules/functions/messages.html#telethon.client.messages._FunctionsMessages.GetDialogs) 方法从电报服务器检索对话。类似 iter_messages,该方法返回一个迭代器,可以使用它来遍历对话。示例代码如下:
from telethon import TelegramClient
from telethon.tl.types import InputPeerEmpty

api_id = 12345 # 替换成你的 API ID
api_hash = '0123456789abcdef0123456789abcdef' # 替换你的 API HASH

client = TelegramClient('session_name', api_id, api_hash)

async def get_all_dialogs():
    dialogs = await client(functions.messages.GetDialogs(
        offset_date=None,
        offset_id=0,
        offset_peer=InputPeerEmpty(),
        limit=100,
        hash=0
    ))
    for dialog in dialogs.dialogs:
        entity = dialog.entity
        print(entity.id, entity.title)

with client:
    client.loop.run_until_complete(get_all_dialogs())
总结

本文介绍了如何使用 Telethon 从电报组中获取所有消息,以及一些其他用例。Telethon 的官方文档包含更多用法和示例代码,可以在 https://docs.telethon.dev/en/latest/ 上进行查阅。