Дизайн

Telegram API демон — склеюємо послідовні повідомлення

Пиши думка в одному повідомленні

Я з тих людей, які пишуть думка в месенджерах по одному реченню. Це створює деякі незручності при читанні цього потоку думки так як послідовні повідомлення швидко займають вільне місце по вертикалі. Особливо це помітно в групових чатах — повідомлення відключені і для перегляду обговорення доводиться витрачати чат, якщо хтось пише подібним чином.

Досить це терпіти!

Переучувати себе я не збираюся — не вважаю це проблемою того хто пише, йому так зручно — перевчити мільйони людей складніше, ніж навчити одну програму. Повідомлення повинен склеювати сам клієнт, щоб було зручно всім, хоча б опціонально. Від команди Telegram я цього так і не дочекався — так що вирішив проблему за допомогою невеликого клієнта — демона на Python і вирішив поділитися з співтовариством джерела.
Подробиці, код і опис під катом.

Як це працює

Одне з основних достоїнств Telegram — дійсно швидка синхронізація між різними клієнтами. Відкритий API дозволяє створювати свої клієнти і вже написано багато альтернативних. Писати повноцінний клієнт я не бачу ніякого сенсу — синхронізація дозволяє створювати невеликі сервіси, що розширюють можливості відразу всіх клієнтів на всіх платформах. Раніше я розповідав як можна збільшити ліміт завантаження файлів ботом з 50МБ до 1.5 ГБ, створювати канали та інші можливості не доступні через Bot API.

На сервері 24/7 працює авторизований демон, який синхронізується з іншими клієнтами — отримує як вхідні повідомлення, так і вихідні, які відправляються мною з інших клієнтів. Якщо пауза між двома послідовними вихідними повідомленнями менш 30с — перше повідомлення редагував через API — до нього додається текст другого повідомлення, а друге повідомлення буде видалено. За рахунок швидкої синхронізації це відбувається практично миттєво.

Невелике відео в роботі

Непогано б також було відключати сповіщення від одного і того ж людини в чаті, якщо інтервал між його повідомленнями невеликий і повідомлення не прочитані, але це вже через API не зробити — так що будемо чекати від розробників Telegram.

Inline перекладач

Заодно вмонтував перекладач — теж вважаю що це повинно бути в самому клієнті. Використовувати інлайн ботів незручно по ряду причин, але основна з них: я хочу отримати перекладений текст в рядок введення, а не відправити його в чат без можливості редагування.
Як правило потрібно згадати якесь слово/фразу, а не все речення(найчастіше перекладене криво).

Єдиний спосіб синхронізувати введений текст між клієнтами без надсилання повідомлення — це чернетки. На жаль чернетка створюється при переході з чату в список чатів, але все одно такий милицю виявляється зручніше і швидше використання програми google translator, копіювання вставки.

В кінці рядка додаємо код мови

Свайпом вправо переходимо до списку чатів

Заходимо назад — отримуємо перекладену рядок

Мова перекладної рядка визначається автоматично, для перекладу використовується google.

Підтримувані мови

supported_langs = {'Afrikaans': 'af', 'Irish': 'ga', 'Albanian': 'sq', 'Italian': 'it', 'Arabic': 'ar',
 'Japanese': 'uk', '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': 'n', 'Portuguese': 'pt',
 'English': 'en', 'Romanian': 'ro', 'Esperanto': 'eo', 'Ukrainian': 'uk', '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', 'Грецька': 'el', 'Telugu': 'te', 'Gujarati': 'gu',
 'Thai': 'th', 'Haitian Creole': 'ht', 'Turkish': 'tr', 'Hebrew': 'iw', 'Ukrainian': 'uk',
 'Hindi': 'hi', 'Urdu': 'ur', 'Hungarian': 'hu', 'Єтнамська': 'vi', 'Icelandic': 'is',
 'Welsh': 'cy', 'Indonesian': 'id', 'Yiddish': 'yi'}

Код на Python AsyncIO

Гитхаб
Також додав в репозиторій скомпільовані виконувані файли для linux і windows — запускати можна і на домашньому ПК, але для 24/7 роботи краще використовувати VDS.

Для доступу до API використовується остання версія бібліотеки telethon.

Якщо у когось є бажання поліпшити проект — велкам.

Підкинути ідею, обговорити і поставити питання можна в коментарі або телеграм в інфо профілю.

Related Articles

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close