Ошибка при попытке парсить сообщения через Telethon
В общем есть бот на питоне который отправляет мне сообщение если в группах, которые изначально я считываю из файла, присутствуют слова, которые также изначально я считываю из файла, тут ошибок нет, но также бот при запуске должен мне отправлять предыдущие сообщения в которых эти слова присутствуют, вот здесь какая то ошибка. Надеюсь все понятно, вот код
from telethon import TelegramClient, events
from telethon.tl.functions.messages import GetHistoryRequest
from env import *
import re
client = TelegramClient('anon', api_id, api_hash).start(bot_token=token)
with open('keywords.txt', 'r') as file:
keywords = [line.strip() for line in file]
with open('groups.txt', 'r') as file:
groups = [int(line.strip()) for line in file]
async def get_previous_messages(chat_ids, limit=10):
for chat_id in chat_ids:
try:
chat_entity = await client.get_entity(chat_id)
group_name = chat_entity.title
messages = (await client(GetHistoryRequest(
peer=chat_id,
limit=limit,
offset_date=None,
offset_id=0,
max_id=0,
min_id=0,
add_offset=0,
hash=0
))).messages
for message in messages:
for keyword in keywords:
if re.search(rf'\b{re.escape(keyword)}\b', message.text, re.IGNORECASE):
await client.send_message(
admin_id,
f'Найдено сообщение в группе {group_name} ({chat_id}):\n\n{message.text}'
)
except Exception as e:
print(f"Произошла ошибка при получении сообщений для группы {chat_id}: {e}")
@client.on(events.NewMessage(chats=groups))
async def search_messages(event):
for keyword in keywords:
if re.search(rf'\b{re.escape(keyword)}\b', event.message.text, re.IGNORECASE):
chat_id = event.chat_id
chat_entity = await client.get_entity(chat_id)
group_name = chat_entity.title
await client.send_message(
admin_id,
f'Найдено сообщение в группе {group_name} ({chat_id}):\n\n{event.message.text}'
)
async def main():
await get_previous_messages(groups)
await client.run_until_disconnected()
if __name__ == '__main__':
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
ошибка в этой строчке кода
messages = (await client(GetHistoryRequest(
peer=chat_id,
limit=limit,
offset_date=None,
offset_id=0,
max_id=0,
min_id=0,
add_offset=0,
hash=0
))).messages
Exception такой:
Произошла ошибка при получении сообщений для группы -1002008511201: The API access for bot users is restricted. The method you tried to invoke cannot be executed as a bot (caused by GetHistoryRequest)
Без Exception в консоли такая ошибка:

Ответы (2 шт):
В ошибке указано, что данный метод не может использоваться с bot API, то есть необходимо авторизироваться как пользователь.
Через бота можете получить данные конкретного сообщения через ид используя метод
GetMessageRequest(channel="логин канала через @", id=[i])
где i - целое число
Как будете получать ид сообщений, уже вам решать, но через бота, это единственное рабочее решение, которое нашел. Документация.
Надо авторизоваться как пользователь:
client = TelegramClient('phone', api_id, api_hash)