10001

Как я с голосовыми сообщениями боролся2

Сижу я, значит, пью чай, спорю в переписке с одной знакомой дамой об отношении к голосовым сообщениям. (Я из тех, кто считает их лютой дичью.) И внезапно понимаю, что столь желанной функции запрета приема голосовых сообщений от создателей мессенджеров я не дождусь, а просить каждого невоспитанного писать текстом...

Значит, настало время взять ситуацию в свои руки, и воспользоваться тем, что api Телеграма, в котором я переписываюсь чаще всего, открыт. Наверняка уже есть какое-то готовое решение в сети.

штош, иду в гугл. Ииии ничего нет, максимум боты для групп. Обидно, досадно, но ладно, придется вспоминать навыки кодинга, полученные и благополучно забытые лет 5 назад.

Снова иду в гугл, и нахожу телеграм-клиент, написанный на Python, где в примерах уже написана самая сложная часть кода, и даже уже дан пример ответа на сообщения. Вот куда-то сюда надо будет вставить ответ на голосовухи:

Обращаю внимание на подсказку где брать api_id и api_hash для авторизации, получаю, и переношу все это в текстовой файл, попутно удалив лишние строки:

Устанавливаю на компьютер Python, устанавливаю telethon (клиент телеграма, о котором идет речь), запускаю скрипт, авторизируюсь по номеру телефона, и вижу, что мой аккаунт теперь на любое входящее сообщение в ответ присылает "тестовое сообщение". Отлично, половина работы сделана =)

Теперь нужно каким-то образом вычислять какое из входящих сообщений является голосовухой, и какое из них прислано в личном чате (не в группе и не в канале). И эта информация, видимо, прячется в переменной "event". Курение документации в течение часа, к сожалению, ни к чему не приводит, все как на китайском. Отчаиваюсь, иду за дополнительной кружкой чая, в голове матеря любителей голосовух.

Спустя время приходит в голову идея: ищу расширение, которое полностью распечатывает массив, и вывожу всё содержимое "event" в консоль. И в куче текста вижу это:

попалась, голосовуха проклятая!! Щас мы тебя задетектим... Так подумал я, и ничего не получилось: прямой путь к переменной по многомерному массиву не возвращает что-либо типа bool, или хотя бы текст. В итоге скрипт при запуске жалуется на тип данных, и отрубается.

Что ж, пора снова наливать чай и копаться в документации. И снова ничего не выходит.

И раз законными методами не получилось, решил я попробовать кое-что очень грязное.. А именно, проверять, не содержится ли текст "voice=True" в массиве, полностью преобразованном в текст. Сказано - сделано, пора воплощать:

Проверяю: ессс, работает. Скрипт всегда отвечает "тестовое сообщение" на голосовуху.

Ну и дело остается за малым:

1) Добавить проверку на то, что чат личный. Тут все просто: ID каналов и групп всегда отрицательный, а у личных чатов он положительный.

2) Добавить удаление голосовухи из чата. С этим тоже проблем не возникло, кое-что полезное из документации все же удалось вытащить.

3) Поменять текст сообщения. Чтобы он был курсивным, пришлось поставить по 2 подчеркивания по краям.

Конечный результат:

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества