10000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы смотрите срез комментариев. Показать все
9
DELETED
Автор поста оценил этот комментарий

Держите тоже самое, но на пиро

https://github.com/JustPieceOfMeat/tg_voice_remover

раскрыть ветку (15)
1
Автор поста оценил этот комментарий
Код main.py улыбнул xD
раскрыть ветку (3)
2
DELETED
Автор поста оценил этот комментарий

Ой, я кажется забыл убрать пару мелочей перед коммитом...

раскрыть ветку (2)
3
Автор поста оценил этот комментарий
Карыстальнік абмежаваў войсаблядства

это какой-то необычный язык, но звучит приятно) Пожалуй, можно и не менять этот текст )))

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Белорусский это хД

1
Автор поста оценил этот комментарий

во-первых, спасибо

во-вторых, для ламера: в какую папку класть эти файлы? или что с ними делать дабы реализовать фичу?

раскрыть ветку (2)
4
DELETED
Автор поста оценил этот комментарий

Установить python (python.org для вин и мак, для линукса проще загуглить как установить одной командой на свой дистрибутив)

В config.ini вписать api id и hash с my.telegram.org

Запустить терминал/командную строку из папки с файлами

python -m venv venv

Для windows:

venv\scripts\activate

Для линукс (и скорее всего мак)

source venv\bin\activate

Для всех:

pip install pyrogram
pip install tgcrypto
python main.py

В некоторых линукс дистрибутивах стоит использовать python3 и pip3 вместо python и pip

0
Автор поста оценил этот комментарий
Постою рядышком
1
Автор поста оценил этот комментарий

Привет, а можешь обновить? По ссылке 404.

раскрыть ветку (5)
1
Автор поста оценил этот комментарий

порыскав на гитхабе, я увидел что кто-то вовремя скопировал этот код, но ручаться не могу что он нормальный и этот чел не добавил туда какую-то ересь к оригинальному, надо проанализировать сам код, этим навыком не владею. Для анализа экспертов:

https://github.com/daznext/tg_voice_remover

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

О, спасибо. Код глянул, все ок, надо будет только впилить фильтр по chat id, чтоб можно было исключения добавлять.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
Не за что) Клуб программистов на пикабу. Если сделаешь, оставишь ссылку, пожалуйста?
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Хорошо. Но не обещаю, что это будет быстро. Надо изучить один вопрос, говорят, что телега акки сносила людям, которые в них логинили ботов на питонных либах.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Понял, спасибо
0
Автор поста оценил этот комментарий
О! Спасибо!
0
Автор поста оценил этот комментарий
Благодарю покорно
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку