Делаем турбо удобную интеграцию между ботами телеграм
Одному моему заказчику, владельцу бота Мелодист (Суно генерация музыки), так понравился мой Вжух, что он предложил как-нибудь интегрировать наших ботов между собой. Идея клёвая, оба бота про музыку, один её создает, второй из готовой музыки делает видеокружочки, и сразу было ощущение, что можно реализовать интергейшн в максимально простом удобном формате, как мы любим, чтоб чик-пук и готов Вжух
Задача - когда Суно бот выдаёт юзеру сгенереный аудио - добавить под этот аудио кнопку "сделать Вжух". Кнопка открывает Вжух бот с уже заряженным в состояние аудио файлом - юзеру остается закинуть картинку, и получится Вжух
Мне очень нравится как в телеграме сделана работа с файлами - один раз загрузил аудио или фото в телеграм, получил в ответ его id - и потом можешь сколько угодно и когда угодно присылать пользователям этот файл, указывая только id
Решение - вешать на кнопку диплинк ссылку на бота, с вшитыми данными трека - file_id, по которому бот сможет загрузить себе аудио
Проблема 1 - бот может работать с file_id только тех файлов, которые он уже где-то видел - в переписках с юзером, сам загрузил, или в группах каналах
Решение - Cуно бот все треки, которые отправляет юзерам, также отправляет в приватную группу, в которой еще в админах Вжух бот. Получается любой файл они оба видят и могут обращаться к нему по чистым file_id
Вообще не обязательно обременять лишними действиями и участиями в группе Суно-бота, для этой задачи пойдет еще один чистый бот, без хендлеров и с одним действием:
создаем приват канал\группу, узнаем её id (-23545366346 как то так), подставляем в функцию send_audio() и добавляем саппорт бота в эту группу, готово.
Прикладываем id файла в диплинк, и показываем юзеру кнопку перехода во Вжух по этому диплинку
добавляем Вжух бота в эту же группу\канал, и обрабатываем start команду с диплинком:
проблема 2 - телеграм не дает боту обработать диплинк в котором пейлоад - параметры ссылки - вотэтовотвсё после somebot?start= - больше 64 символов. Во Вжух просто не приходит событие /start от юзера по такой ссылке. Айди файла около 80 символов
решение - ставить в диплинк кнопки id сообщения в приватной группе, а не файла. Id сообщения считается с нуля или около того, и сейчас у меня занимает 3 символа:
проблема 3 - бот не может просто взять и достать обьект сообщения (из которого можно получить id аудио) по его id.
варианты:
1 - сохранять во Вжухе все сообщения из приват группы в собственную базу (какой-то перегруз)
2 - ЛЮБОЙ БОТ МОЖЕТ РЕДАКТИРОВАТЬ СООБЩЕНИЕ ПО АЙДИ И ПОЛУЧАТЬ В ЭТОТ МОМЕНТ ОБЬЕКТ НОВОГО СООБЩЕНИЯ чтобы достать оттуда аудио и всё остальное (это интересно)
Но всё таки бот не может редактировать чужое сообщение. Группу переделываем в канал, там все сообщения общие, и все их могут редактировать. Дописываем код получения аудио файла во Вжухе:
И всё, интеграция готова, боты теперь как родные :3
Вжух бот :
Суно бот:
Смотри предыдущую статью, как я создавал Вжух бота: