В этом посте доработаем команду /get_file, добавив в неё новые данные из API.
В прошлом посте, мы добавили связь между файлом и постом на сайте и добавили в передачу дополнительные данные.
Давайте обновим команду /get_file.
Обновление /get_file.
Откроем файл send_file.py.
В функции send_file_get_data нам нужно добавить дополнительные поля, которые мы получаем по API.
Находим строку, в которой отправляется файл - bot.send_document.
В аргументах у нас указан всего один параметр, который передаётся в сообщение пользователю - caption=views.file_caption(data['title']).
Давайте его расширим, добавив post_url и post_telegram_link:
await bot.send_document(message.chat.id, document=file, caption=views.file_caption(
data['title'],
data['post_url'],
data['post_telegram_link']
))
Сообщение пользователю.
Теперь откроем файл views.py и найдём функцию file_caption.
В аргументы функции добавим новые - post_url и post_telegram_link.
В теле функции сделаем проверку, если post_url содержит данные, то мы возвращаем сообщение пользователю, в котором будет заголовок файла и две ссылки - на сайт и на канал.
Если же данных не будет, то возвращаем просто строку с заголовком файла.
def file_caption(file_title, post_url, post_telegram_link):
if post_url:
return f'Файл к посту: {file_title}\nПост на сайте: <a href="{post_url}">pressanybutton.ru</a>\nПост на канале: <a href="{post_telegram_link}">Код на салфетке</a>'
return f'Файл к посту: {file_title}'
Форматирование сообщений.
Ссылки можно отправлять и напрямую, но тогда ссылка будет занимать много места.
Telegram предоставляет три вида форматирования текста: markdown, markdownv2 и HTML.
Я остановился на HTML.
Чтобы добавить поддержку HTML-разметки в сообщениях, перейдём в файл settings.py.
Найдём переменную bot.
В параметры к классу Bot, сразу после передачи токена, добавим параметр parse_mode='HTML'.
bot = Bot(token=Secrets.token, parse_mode='HTML')
Чтобы проверить работу, запустите бота и Django. В панели администратора Django откройте объект поста, в поле файл выберите имеющийся файл и сохраните.
Затем в боте запросите этот файл.
В сообщении к файлу, кроме заголовка, будут находиться ссылки на пост.
Telegram-канал: https://t.me/press_any_button