Получить последнее сообщение Telegram

Я пытаюсь получить последние сообщения из API Telegram (НЕ бот API). В настоящее время я использую messages.getHistory, но возвращает все сообщения с самого начала. Если я получу новые сообщения (с тех пор, как я вхожу), это тоже будет хорошо.
Моя лучшая ставка до сих пор заключалась в том, чтобы читать все сообщения, а затем отслеживать смещение, чтобы я не читал одни и те же сообщения снова, но это слишком медленно и ресурс дорого.

спросил(а) 2017-04-03T10:21:00+03:00 6 лет, 1 месяц назад
добавить комментарий
пожаловаться

Существует более простой способ получения обновлений в реальном времени из Telegram API.
Если вы настроите свое TCP-соединение на не-опрос, то, как только появятся обновления для вашей учетной записи телеграммы, сообщения просто будут нажаты вам.
Это устраняет стоимость, о которой вы упомянули, и у вас вообще нет дубликатов. Для моих клиентов Telegram я сделал это успешно, просто выполнив это при запуске:

TL.invokewithlayer(layer, TL.initconnection(app_id, device_model, system_version, app_version, lang_code, TL.help_getconfig))

Get message time bot


Затем я просто обрабатываю входящие данные из подключенного TCP-сокета по мере его поступления.
ответил(а) 2017-04-04T09:06:00+03:00 6 лет, 1 месяц назад
добавить комментарий
пожаловаться

Ответ Шарля указал мне в правильном направлении. Для тех, кто заинтересован в версии node.js, мне удалось заставить его работать, используя модуль телеграммы и установив connectionType в TCP:

var telegramLink = require(‘telegram.link’)();

// set the environment
var app = // NOTE: if you FORK the project you MUST use your APP ID.
// Otherwise YOUR APPLICATION WILL BE BLOCKED BY TELEGRAM
// You can obtain your own APP ID for your application here: https://my.telegram.org
id: 12345,
hash: ‘somehashcode’,
version: require(‘../package.json’).version,
lang: ‘en’,
deviceModel: os.type().replace(‘Darwin’, ‘OS_X’),
systemVersion: os.platform() + ‘/’ + os.release(),
connectionType: ‘TCP’
>;

Еще по теме:  Как отменить запрос на подписку в Телеграм

//var primaryDC = telegramLink.TEST_PRIMARY_DC;
var primaryDC = telegramLink.PROD_PRIMARY_DC;

.

telegramLink.createClient(app, dataCenter, function() .

Простая точка заключается в том, что изменение ее на TCP даст вам желаемый эффект, и вы получите сообщения, которые будут отправлены вам в registerOnUpdates:

clientProxy.getClient().account.updateStatus(false).then(function() clientProxy.getClient().registerOnUpdates(function(update) console.log(‘update’, update.toPrintable());

clientProxy.getClient().messages.receivedMessages(update.id, function(err) < console.log(err); >);
>);
.

Обратите внимание на полученные сообщения — если вы этого не сделаете, Telegram не отправит вам никаких новых обновлений. Если полученные сообщения не определены в вашей телеграмме, добавьте следующий код в lib/api/messages.js:

// ***
// messages.**receivedMessages(max_id, [callback])**

// Return a Promise to Confirms receipt of messages by a client, cancels PUSH-notification sending.

КАК ПОЛУЧИТЬ ТЕЛЕГРАММ ПРЕМИУМ БЕСПЛАТНО в 2023

// [Click here for more details](https://core.telegram.org/method/messages.receivedMessages)
Messages.prototype.receivedMessages = function(max_id, callback) return utility.callService(api.service.messages.receivedMessages, this.client, this.client._channel, callback, arguments);
>;

Источник: progi.pro

Telegram Bot (Python) получение последнего сообщения пользователя

Нужно получить 2 последних сообщения пользователя. Как это сделать? Не могу понять как получить доступ к истории сообщений, может в каком-то массиве по chat_id или типа того. Что я пропустил?

Отслеживать
задан 29 фев 2020 в 22:52
305 2 2 серебряных знака 10 10 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Насколько я знаю, то такого метода не существует (по крайней мере в библиотеке PyTelegramBotAPI). Вместо этого можно записывать предпоследнее сообщение в базу данных (или файл) и последнее сообщение получать как обычно (message.text). И у Вас будет два последних сообщения.

Отслеживать
ответ дан 31 мар 2020 в 5:20
Oleksandr Bielov Oleksandr Bielov
56 2 2 бронзовых знака

можешь все сообщения добавлять в список, а из него получить два последних значения так:

списокВсехСообщенийВПорядкеИхПолучения = список последнееСообщение = списокВсехСообщенийВПорядкеИхПолучения[len(списокВсехСообщенийВПорядкеИхПолучения)]-1 предпоследнееСообщение = списокВсехСообщенийВПорядкеИхПолучения[len(списокВсехСообщенийВПорядкеИхПолучения)]-2
Отслеживать

67.7k 208 208 золотых знаков 76 76 серебряных знаков 218 218 бронзовых знаков
ответ дан 31 дек 2021 в 15:42
11 1 1 бронзовый знак

Еще по теме:  Vol Telegram в детализации МТС что это

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

Источник: ru.stackoverflow.com

Блог

Получить последнее сообщение / сообщения из Telegram-канала с помощью Python

  • Post author: admin
  • Запись опубликована: 8 марта, 2023
  • Post category: Вопросы по программированию

#python #telegram #telegram-bot

#python #telegram #telegram-бот #python-telegram-бот #telegram-api

Вопрос:

Я использую библиотеку python-telegram-bot для написания бота на Python, который отправляет URL-адреса в канал, где бот является администратором.

Теперь я хотел бы, чтобы бот прочитал, скажем, последние 5 сообщений (меня не волнует количество, мне просто нужно прочитать сообщение в чате) и сохранить их в список в коде для дальнейшей доработки.

У меня уже есть мой бот, работающий с:

Но я не могу найти bot.getLastMessage класс or bot.getMessage типа в библиотеке python-telegram-bot.

В случае, если уже нет написанного класса, который это делает, как я могу реализовать его через Telegram API, поскольку я немного новичок, когда дело доходит до реализации API?

Ответ №1:

К сожалению, это невозможно в ботах.
Здесь вы можете найти все доступные методы (которые python-telegram-bot вызываются за кулисами), и нет такого метода, доступного для получения сообщений по запросу.

Самое близкое, что вы можете получить через api getChat (который вернет pinned_message в этом чате).

В этом случае вы можете сохранить сообщения, которые отправляет бот, а также обновления сообщений, которые получает бот (путем настройки обработчика), в некотором хранилище (базе данных) и извлечь оттуда позже.

1. Спасибо! Я думаю, что я пройду через метод базы данных

Ответ №2:

Вы пробовали другой тип API Telegram, API Telegram [client] и TDLib?

Еще по теме:  Как загружать видео в Телеграмм без потери качества

Использование библиотеки telethon упрощает чтение истории каналов (см. Документы telethon).

Для этого нам нужны an api_id и an api_hash .
Чтобы получить эти параметры, нам нужно войти в наше ядро Telegram и перейти в область инструментов разработки API. Существует простая форма, которую необходимо заполнить, после чего мы можем получить наши api_id и api_hash . Смотрите справочную документацию Telegram о том, как получить ваши учетные данные API.

Вот пример кода, который получает последние 5 сообщений 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())

При первом запуске этого кода запрашивается ваш номер телефона или токен бота. Введите свой номер телефона в формате 9912345. , где 99 это код вашей страны, а остальное — ваш номер телефона.
Затем он может отправить код входа в ваше приложение Telegram; введите его в консоли.

Примечание: Боты не могут видеть сообщения истории канала (по крайней мере, в telethon), но пользователи (номера телефонов) могут. Боты могут прослушивать обновления канала только в том случае, если они являются одним из его администраторов.

client.iter_messages() Принимает другие параметры, например min_id , которые можно использовать, чтобы мы получали сообщения только после определенного сообщения (например, мы можем сохранить идентификатор последнего сообщения, которое мы обработали, и в следующий раз передать этот идентификатор, min_id чтобы возвращались только сообщения после этого сообщения).

Источник: programbox.ru

Оцените статью
Добавить комментарий