Как получить id всех сообщений telegram python + aiogram
В python новичок, пытаюсь написать простой telegram бот - помощник. Есть канал, куда сотрудники постят сообщения с текстом и тегами. Бот добавлен как администратор в этот канал, доступ к сообщениям имеет (пересылать, копировать может). Бот должен выдавать пользователю определенные сообщения из канала по запросу, в соответствии с тегами, либо по определенному тексту в сообщении. Никак не соображу, каким образом сделать поиск по сообщениям в канале, особенно когда неизвестны их id. Пока для себя представил следующую логику, бот проходится по сообщениям и составляет словарь, где теги(либо ключевые слова) это ключи, а id сообщений это значения.
Основной вопрос как получить id всех сообщений в канале, что бы потом уже с этим работать? Сильно не бейте, готовый код не прошу, за подсказку к решению вопроса, буду очень благодарен!
upd: Пока получилось как то так, сначала получаю id имеющихся сообщений в канале и записываю список в файл, затем разделяю их в соответствии с тегами на 3 списка и их тоже записываю. Наверняка это очень кривой и не красивый код, я только учусь
import requests
from bs4 import BeautifulSoup
def get_msg_id():
url = 'https://t.me/s/%channel_name%/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
section = soup.find_all('span', class_="tgme_widget_message_meta", recursive=True)
c = 1
k = '/'
list_id = []
while c <= (len(section) - 1):
item = str(section[c])
msg_id = item[-83:-81]
if k in msg_id:
msg_id = str(msg_id.replace('/', '0', 1))
list_id.append(msg_id)
c += 1
else:
list_id.append(msg_id)
c += 1
with open('list_id_all.txt', 'w') as file:
for listitem in list_id:
file.write('%s\n' % listitem)
return list_id
list_id = get_msg_id()
engineering = []
accountant = []
production = []
def get_tag():
c = 0
tag_1 = '#инженеры'
tag_2 = '#бухгалтерия'
tag_3 = '#производство'
for i in list_id:
url = ('https://t.me/s/%channel_name%/' + str(list_id[c]))
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
section = soup.find_all('div', class_='tgme_widget_message_text js-message_text', recursive=True)
tag_job = str(section[c+1])
if tag_1 in tag_job:
engineering.append(list_id[c])
else:
None
if tag_2 in tag_job:
accountant.append(list_id[c])
else:
None
if tag_3 in tag_job:
production.append(list_id[c])
else:
None
c += 1
with open('list_id_engineering.txt', 'w') as file:
for listitem in engineering:
file.write('%s\n' % listitem)
with open('list_id_accountant.txt', 'w') as file:
for listitem in accountant:
file.write('%s\n' % listitem)
with open('list_id_production.txt', 'w') as file:
for listitem in production:
file.write('%s\n' % listitem)
return engineering, accountant, production
При нажатии на кнопку, берется нужный файл, извлекается список и копируются нужные сообщения по id. Выглядит как то так:
@dp.message_handler(text='command')
async def get_temporary_job(message: types.Message):
accountant = []
with open('list_id_accountant.txt', 'r') as file:
for line in file:
_accountant = line[:-1]
accountant.append(_accountant)
for i in accountant:
await bot.copy_message(message.from_user.id, from_chat_id=-XXXXXXXXXXXX, message_id=i)