Пиши мысль в одном сообщении
Я из тех людей, которые пишут мысль в мессенджерах по одному предложению. Это создает некоторые неудобства при чтении этого потока мысли так как последовательные сообщения быстро занимают свободное место по вертикали. Особенно это заметно в групповых чатах — уведомления отключены и для просмотра обсуждения приходится проматывать чат, если кто то пишет подобным образом.
Хватит это терпеть!
Переучивать себя я не собираюсь — не считаю это проблемой того кто пишет, ему так удобно — переучить миллионы людей сложнее чем научить одну программу. Сообщения должен склеивать сам клиент, чтобы было удобно всем, хотя бы опционально. От команды Telegram я этого так и не дождался — так что решил проблему при помощи небольшого клиента — демона на Python и решил поделиться с сообществом исходниками.
Подробности, исходники и описание под катом.
Как это работает
Одно из основных достоинств Telegram — действительно быстрая синхронизация между разными клиентами. Открытый API позволяет создавать свои клиенты и уже написано много альтернативных. Писать полноценный клиент я не вижу никакого смысла — синхронизация позволяет создавать небольшие сервисы, расширяющие возможности сразу всех клиентов на всех платформах. Ранее я рассказывал как можно увеличить лимит загрузки файлов ботом с 50МБ до 1.5ГБ, создавать каналы и другие возможности не доступные через Bot API.
На сервере 24/7 работает авторизованный демон, который синхронизируется с другими клиентами — получает как входящие сообщения, так и исходящие, которые отправляются мной с других клиентов. Если пауза между двумя последовательными исходящими сообщениями менее 30с — первое сообщение редактируется через API — к нему добавляется текст второго сообщения, а второе сообщение удаляется. За счет быстрой синхронизации это происходит практически мгновенно.
Небольшое видео в работе
Неплохо бы также было отключать оповещение от одного и того же человека в чате, если интервал между его сообщениями небольшой и сообщения не прочитаны, но это уже через API не сделать — так что будем ждать это от разработчиков Telegram.
UPD Подумал и понял что можно — просто мьютить чат на время, если идет поток сообщений от одного человека, но это уже должен и получатель пользоваться таким демоном
Inline переводчик
Заодно встроил переводчик — тоже считаю что это должно быть в самом клиенте. Использовать инлайн ботов неудобно по ряду причин, но основная из них: я хочу получить переведенный текст в строку ввода, а не отправить его в чат без возможности редактирования.
Как правило нужно вспомнить какое то слово/фразу, а не все предложение(зачастую переведенное криво).
Единственный способ синхронизировать вводимый текст между клиентами без отправки сообщения — это черновики. К сожалению черновик создается при переходе из чата в список чатов, но все равно такой костыль оказывается удобнее и быстрее использования приложения google translator, копирования вставки.
В конце строки добавляем код языка
Свайпом вправо переходим в список чатов
Заходим обратно — получаем переведенную строку
Язык переводимой строки определяется автоматически, для перевода используется google.
Поддерживаемые языки
supported_langs = {'Afrikaans': 'af', 'Irish': 'ga', 'Albanian': 'sq', 'Italian': 'it', 'Arabic': 'ar',
'Japanese': 'ja', 'Azerbaijani': 'az', 'Kannada': 'kn', 'Basque': 'eu', 'Korean': 'ko',
'Bengali': 'bn', 'Latin': 'la', 'Belarusian': 'be', 'Latvian': 'lv', 'Bulgarian': 'bg',
'Lithuanian': 'lt', 'Catalan': 'ca', 'Macedonian': 'mk', 'Chinese Simplified': 'zh-CN',
'Malay': 'ms', 'Chinese Traditional': 'zh-TW', 'Maltese': 'mt', 'Croatian': 'hr', 'Norwegian': 'no',
'Czech': 'cs', 'Persian': 'fa', 'Danish': 'da', 'Polish': 'pl', 'Dutch': 'nl', 'Portuguese': 'pt',
'English': 'en', 'Romanian': 'ro', 'Esperanto': 'eo', 'Russian': 'ru', 'Estonian': 'et',
'Serbian': 'sr', 'Filipino': 'tl', 'Slovak': 'sk', 'Finnish': 'fi', 'Slovenian': 'sl',
'French': 'fr', 'Spanish': 'es', 'Galician': 'gl', 'Swahili': 'sw', 'Georgian': 'ka',
'Swedish': 'sv', 'German': 'de', 'Tamil': 'ta', 'Greek': 'el', 'Telugu': 'te', 'Gujarati': 'gu',
'Thai': 'th', 'Haitian Creole': 'ht', 'Turkish': 'tr', 'Hebrew': 'iw', 'Ukrainian': 'uk',
'Hindi': 'hi', 'Urdu': 'ur', 'Hungarian': 'hu', 'Vietnamese': 'vi', 'Icelandic': 'is',
'Welsh': 'cy', 'Indonesian': 'id', 'Yiddish': 'yi'}
Исходники на Python AsyncIO
Гитхаб
Также добавил в репозиторий скомпилированные исполняемые файлы для linux и windows — запускать можно и на домашнем ПК, но для 24/7 работы лучше использовать VDS.
Для доступа к API используется последняя версия библиотеки telethon.
Если у кого то есть желание улучшить проект — велкам.
Подкинуть идею, обсудить и задать вопросы можно в комментарии или в телеграм в инфо профиля.