Я пытаюсь получить последние сообщения из 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 бронзовый знак
В текущем виде ваш ответ непонятен. Пожалуйста, нажмите править под сообщением, чтобы добавить больше подробностей, которые помогут другим понять, как он отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в Справке.
Источник: 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