Как использовать ID для получения сообщений в библиотеке Telethon?

Как переписать мой код, чтобы вместо сохранения всех сообщений из канала, скрипт сохранял только информацию о клиенте Telegram, имени канала и ID поста в локальном хранилище и базе данных? (У меня уже есть код, который сохраняет все сообщения из канала, но я хочу изменить его функциональность только на сохранение указанных данных)
  • 9 сентября 2023 г. 17:46
Ответы на вопрос 1
Для получения сообщений по ID в Telethon вы можете использовать метод `get_messages`, передавая ID чата или канала, в котором находится сообщение, и ID сообщения, которое вы хотите получить.

Пример использования:
```python
from telethon.sync import TelegramClient

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

async def get_message_by_id(chat_id, message_id):
    try:
        message = await client.get_messages(chat_id, ids=message_id)
        print(message)
    except Exception as e:
        print(e)

with client:
    client.loop.run_until_complete(get_message_by_id('channel_username', 12345))
```

Чтобы переписать ваш код для сохранения только информации о клиенте Telegram, имени канала и ID поста, вам необходимо изменить часть кода, отвечающую за сохранение сообщений. Вместо сохранения всего сообщения, вы можете сохранить только нужные данные.

Пример кода для сохранения указанных данных в локальном хранилище и базе данных:
```python
# Добавьте импорты нужных модулей, например, для SQLite3
import sqlite3

async def save_message_info(client, chat_id, message_id):
    try:
        message = await client.get_messages(chat_id, ids=message_id)
        client_name = client.get_me().username
        channel_name = message.chat.username

        # Сохраните информацию в локальном хранилище или базе данных
        # Пример для SQLite3
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        cursor.execute("INSERT INTO messages (client_name, channel_name, message_id) VALUES (?, ?, ?)",
                       (client_name, channel_name, message_id))
        conn.commit()
        conn.close()

    except Exception as e:
        print(e)

with client:
    client.loop.run_until_complete(save_message_info(client, 'channel_username', 12345))
```

Помимо SQLite3, вы также можете использовать другие базы данных, такие как MySQL или PostgreSQL, и сохранить данные в них. Не забудьте изменить код в соответствии с используемой вами базой данных.
Похожие вопросы