10000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий
это жестоко 😁
1
Автор поста оценил этот комментарий
А теперь то же самое, но голосовухами
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
ввести счетчик и при достижении опредленного числа повторно отправленных голосовух написать «дружище, я тут понял, что у меня динамик не работает»
384
Автор поста оценил этот комментарий

Я, как не программист, могу сказать, что было интересно и понятно.

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

тоже не программист, читалось приятно)

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

То, что скрином - не проблема. Проблема в том, что важная информация пикселизована, и ТС думает, что таким образом она скрыта. Внимательнее надо быть! Только солид колор! Пикселизация - процесс обратимый!! https://github.com/beurtschipper/Depix

раскрыть ветку (5)
6
Автор поста оценил этот комментарий
ничего страшного, за пикселями пару букв в ключах поправил)
раскрыть ветку (1)
5
Автор поста оценил этот комментарий
А, ну тогда ладно))
1
Автор поста оценил этот комментарий

Ну попробуй Depix'ом расшифруй что там. Без четкого понимания того , что скрыто за пикселизацией - ничего вытащить не получится.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий
А что там, за пикселизацией? Видимо id и хэш. Т.е. латинские буквы+цифры. Не вижу проблем))
Если интересно - тут достаточно подробно описано
https://habr.com/ru/company/vdsina/blog/532764/
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Ну попробуйте по 3 пикселям восстановить api_id, не выйдет.
В статье на хабре совсем другой кейс, у ТС не пикселизация
33
Автор поста оценил этот комментарий
1. Ниже сказали, что там походу json, так что много костылей.
2. Код скриншотами обычно допустим и даже удобен (когда сервис не поддерживает форматирование кода).
3. обычно 2 пункт компенсируют ссылкой на гитхаб.
Имхо код полезный, но коммерческого интереса не представляет. Почему оно ещё не на гитхаб?
ещё комментарии
ещё комментарии
53
DELETED
Автор поста оценил этот комментарий
Эмм, вроде там мессежи в json дропаются, это как бы объект, словарь. Есть куча парсеров, ну и ещё abstract syntax tree либу можно заюзать, чтоб проходом по дереву искать нужные флаги...но у вас элегантней, как я понял весь мессеж гоните в строку(или байт строку) и ищите совпадение. Ток это, можно багнуть тогда отправив просто voice=True в сообщении
раскрыть ветку (81)
99
Автор поста оценил этот комментарий

куча парсеров, ну и ещё abstract syntax tree либу можно заюзать
больше ! ещё больше разных библиотек, вместо десятка строчек нормального кода !!!

и фреймворки, фреймворки не забудь.

да побольше, ПОБОЛЬШЕ !

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

Кто-нибудь поясните для человека не владеющего python, там что правда нельзя обратиться к свойству объекта напрямую?

Ну типа

if (message.voice) { print("yeah!"); }


Экспорт объекта и поиск по строкам, это чет не очень на мой взгляд))

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

можно, после получения объекта сообщения, поработать с ним как со словарём:

if message['voice']:

    print('yeah!')

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

Все там можно. Автор просто далее от питона.

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

Там изначально все в json. Json - строковый формат данных (просто в определённом виде)

Хотя это python, это динамический язык, так что я хз

Но в c# делать либо так, как тс, либо пытаться парсить найденный текст из строки в bool,  и если спарсилось, то уже работать с bool

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

Это шутка? Все языки программирования умеют преобразовывать json в объект/массивhttps://www.w3schools.com/python/python_json.asp

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

Не все. Вспомните, например, Brainfuck.


(а вот это уже шутка)

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

Ты бы видел как 1С работает с json файлами xD


Но умеет, да. Я бота писал для ВК и Телеграма на 1С

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

Ну так разговор был о языках программирования.

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

о да, шутки за 300 о том что программисты 1С - не программисты

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

Это ты в 1С насчитал так?

раскрыть ветку (22)
6
Автор поста оценил этот комментарий
И фонарь на лоб ебани, чтоб ночью работал (с)
8
DELETED
Автор поста оценил этот комментарий
И Нампи с тензорфлоу ещё с нлтк, и всем датасетом, чтоб прикрутить семантику и эмоциональный окрас, и спич Ту текст либу, чтоб Войс в текст переводить, потом оценка эмоционального окраса и ответ за тебя


Спасибо, я кончил, можно вытереть со стола
раскрыть ветку (2)
4
Автор поста оценил этот комментарий

Спасибо, я кончил, можно вытереть со стола

Оставь, для смузи пригодится

раскрыть ветку (1)
4
DELETED
Автор поста оценил этот комментарий
О, да ,знаю это видео.
"два питонщика и одна ветка"
0
Автор поста оценил этот комментарий

Флешь поддержку!

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

и в докер завернуть!

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

Так ему и придёт текст:) а аудио не придёт.

раскрыть ветку (1)
3
DELETED
Автор поста оценил этот комментарий
Ну так до да
1
Автор поста оценил этот комментарий
Питон вроде нативно умеет json в объекты перегонять
раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий
Да он все в объекты перегоняет
ещё комментарии
15
Автор поста оценил этот комментарий
Иллюстрация к комментарию
3
Автор поста оценил этот комментарий
Можешь поделится проектом?
temp108anatoliy@gmail.com
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
#comment_187967606
попробуйте этот, он вроде получше.
Если все же не подойдет, скину свой
3
Автор поста оценил этот комментарий

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

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

Простите, а нельзя как-то в вацапе от них избавиться?

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

Уууу съука ! Тоже бесит

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

У меня с программированием не так хорошо, я просто нашел бота, который оскорбляет того кто шлет голосовухи. Уровень оскорблений варируется, добавляешь его в беседу и все. Костыли-с

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

То для бесед, а в личных чатах остается только ставить свои скрипты

1
Автор поста оценил этот комментарий
Бро, сегодня обнова прилетела в телегу, там описано что они ввели "предложения", но только нужно все описывать на английском, мб отправишь?)
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Мне пришла в голову такая же идея. Я попытался это сделать, мне написали, что мой аккаунт не подходит для созданий новых предложений :(

Почему не подходит - не написали

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

это странно :(

1
Автор поста оценил этот комментарий
У меня вопрос. Сообщение вы удаляете, у собеседника оно тоже удаляется?
Ращве есть такая возможность удалить чужое сообщение из личного чата так, чтобы оно у того кто отправил тоже удалилось?
раскрыть ветку (10)
23
Автор поста оценил этот комментарий
В телеграме можно удалять сообщения собеседника у него самого
раскрыть ветку (8)
2
Автор поста оценил этот комментарий
Действительно! А в Вотсапе нельзя, только свои можно для всех удалять. И то кажется в течение какого-то времени
Иллюстрация к комментарию
раскрыть ветку (5)
0
Автор поста оценил этот комментарий
Вроде как уже можно и в Цапе удалять.
раскрыть ветку (4)
0
Автор поста оценил этот комментарий
Я не нашла как это сделать. Может и можно конечно код написать как автор поста, но в приложении которое предлагает вотсап такого нет (или я очень невнимательная).

А вообще на мой взгляд как-то не очень это этично давать возможность удалять сообщения собеседника у него же.
раскрыть ветку (3)
0
Автор поста оценил этот комментарий
Иллюстрация к комментарию
раскрыть ветку (2)
3
Автор поста оценил этот комментарий
Это сообщение которое вы написали или которое вам написали? Судя потому что они справа это ваши.
А я про те которые вам прислали.
И даже ваши можно удалить первое время
2
Автор поста оценил этот комментарий

Только там, как в телеге или в контакте, оно не удаляется бесследно, а остаётся сообщение с текстом "пользователь удалил сообщение".

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

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

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Нет.
4
Автор поста оценил этот комментарий
Тут скорее фишка в том, что оно у получателя память не засоряет
0
Автор поста оценил этот комментарий

Где ссылка на репу?)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
В комментах накатали, но на другом клиенте #comment_187967606
0
Автор поста оценил этот комментарий

Товарищ попросил сделать бота для войны с голосовыми сообщениями. Я решил через питоновскую библиотеку pyrogram .


Пример анализа на входящее голосовое сообщение в этой библиотеке


@app.on_message(filters.voice & filters.incoming & filters.private)

def echo(client, message):

    message.delete() # удаляет входящее голосовоесообщение

    message.reply_text(введите необходимый текст ответа)


app.run

0
Автор поста оценил этот комментарий
Я тоже хочу так сделать. Но не умею совсем.
0
Автор поста оценил этот комментарий

Вот и выложи всё на гитхаб. А то себе сделал, а людям - йух!

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

Чёт мне кажется на библиотеке pyTelegramBotApi это сделать проще простого.

раскрыть ветку (7)
2
Автор поста оценил этот комментарий
Название вам не намекает, что эта либа для разработки бота? А тс (грубо говоря) написал свой клиент Телеграм с кастомной обработкой входящих сообщений
раскрыть ветку (5)
3
Автор поста оценил этот комментарий

Нет, я воспользовался готовым клиентом, он называется telethon

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

Так ведь в диалог нельзя бота добавить

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

Для копирования лучше ссылку на гитхаб

раскрыть ветку (1)
Автор поста оценил этот комментарий
Нельзя это на гитхаб, стыдоба же
ещё комментарии
2
Автор поста оценил этот комментарий

отсылать эту ебучую голосовуху на распознавание речи в текст и заменять звук текстом

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

А по ютубу с индусами как кодят?

0
Автор поста оценил этот комментарий
сори что под топом, но может стоит сделать чтото такое же но для андроида? я бы даже купил!
раскрыть ветку (9)
4
Автор поста оценил этот комментарий
ОС тут не при чем, скрипт подключается к вашему основному аккаунту как отдельное устройство. Запускать вы его можете откуда угодно
раскрыть ветку (6)
3
Автор поста оценил этот комментарий
Я бы ещё добавил функцию перевода своего текстового сообщения в голос, чтобы дрочить этих любителей голосов ухи в ответ.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
А ты, сука, жестокий))) Гениально!
4
Автор поста оценил этот комментарий

ну так может инструкции пополнее выложите?

хостинг/temux/iSH, git clone, pip и вот это вот всё?

или реально .apk скомпилить и на страницу с донатами выложить.

0
Автор поста оценил этот комментарий
Мне рили пздц, но я не понимаю, как этим воспользоваться
0
Автор поста оценил этот комментарий
хотел иметь в виду ватсап:)
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Для вотсаппа такой возможности нет, по крайней мере без сложных обходных путей
0
Автор поста оценил этот комментарий

Тэкс, а тс для десктопа чтоль написал? Нигде про это не упоминается

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

Тем временем в Телеге появились чаты с голосовыми сообщениями, гы.

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

мы с ТС уже в том посте обсуждаем перспективы кодинга

#comment_188093816

Автор поста оценил этот комментарий
От того что он не смог найти voice=true и сделал преобразование в текст уже глаза вытекают. Пусть лучше скринами
Автор поста оценил этот комментарий
Конечный результат после текста выкладывать в видео- вот что на грани голосовух. Что там в видео? Я не могу б.. посмотреть его. Ад
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

это не дело. ну ты как-то заставь себя!©

Автор поста оценил этот комментарий
Ты не понимаешь, это ДРУГОЕ!
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку