Как хранить все важное: облако в Telegram
В качестве облачного хранилища в Telegram используется папка «Избранное» (она может называться «Сохраненное» или Saved — в зависимости от версии приложения). Она есть в настройках и общей папке с чатами. По сути, это ваша закрытая переписка с самим собой. Туда можно записывать быстрые заметки, кидать музыку и фото, пересылать важные сообщения и посты из каналов.
Объем памяти в хранилище не ограничен, а все данные хранятся на серверах Telegram, поэтому доступны с любых устройств, причем посторонние их не увидят. Кстати, это хороший способ быстро перекинуть фото со смартфона на ПК. Правда, максимальный размер загружаемых файлов ограничен 2 Гбайт.
В «Избранном» можно пользоваться поиском, чтобы найти нужные сообщения. Но лучше сразу помечать сообщения хештегами, например, #работа, #ремонт, #юмор — они применяются только в конкретной папке.
В iOS можно открыть Избранное прямо с рабочего стола, зажав значок мессенджера на рабочем столе. Для этого должна быть включена функция 3D Touch («Настройки» — «Касание» — «3D Touch и Тактильное касание»).
Библиотека магии
Telethon имеет несколько вспомогательных функций для упрощения общих операций. На самом деле мы могли бы сделать вышеупомянутое с двумя из этих вспомогательных методов,а такжевместо:
from telethon.tl.types import User_, entities = client.get_dialogs(limit=30)counts = []for e in entities: if isinstance(e, User): name = e.first_name else: name = e.title count, _, _ = client.get_message_history(e, limit=1) counts.append((name, count))message_counts.sort(key=lambda x: x, reverse=True)for name, count in counts: print('{}: {}'.format(name, count))
Однако я чувствовал, что лучше сначала изучать методы API-интерфейса Telegram напрямую, тем более что не существует вспомогательного метода для всего. Тем не менее, есть некоторые вещи, которые намного проще с помощью вспомогательных методов, например, как мы аутентифицировали нашего клиента в начале, или такие действия, как загрузка файлов, которые в противном случае были бы утомительными.
Завершение
Полный код для этого примера можно найти здесь:https://gist.github.com/yi-jiayu/7b34260cfbfa6cbc2b4464edd41def42
С API Telegram вы можете сделать гораздо больше, особенно с точки зрения аналитики. Я начал изучать его, подумав об одном из моих старых проектов, чтобы попытаться создать визуализацию данных из экспортированных историй чата WhatsApp:https://github.com/yi-jiayu/chat-analytics,
Используя регулярные выражения для анализа истории чата в виде простого текста, я мог создать диаграмму, аналогичную графику хранилища перфокарт GitHub, показывающую, в какое время недели чат был наиболее активным:
Однако использование функции «Чат по электронной почте» для экспорта было довольно хакерским, и вам нужно было вручную экспортировать историю разговоров для каждого чата, и это будет устаревшим, как только вы получите новое сообщение. Я не стал продвигать проект дальше, но я всегда думал, что другие истории могут быть извлечены из истории чатов.
Благодаря программному доступу к истории чатов, с чатами Telegram можно сделать гораздо больше. Методы, такие какможет мне исключительно полезно. Возможно, динамически генерировать статистику по разговорам, которые достигают максимума или затухают, или которые постоянно активны, или находят ваши любимые смайлики или самые распространенные н-граммы? Предел неба (или ограничение скорости API, в зависимости от того, что ниже).
Как стать волонтером техподдержки
Для того чтобы стать волонтером службы технической поддержки, рекомендуется написать о своем желании на аккаунт под названием @TelegramAuditions. Это словосочетание нужно ввести в поисковую строку Телеграма. Когда откроется аккаунт, можно подать заявку. Ответ из администрации придет спустя несколько месяцев.
Техслужба проводит интервью с претендентом и решает, принимать человека в свои ряды или нет. Правда, окончательное решение может быть вынесено через несколько месяцев после тестирования. Претенденты на неоплачиваемую должность волонтера должны запастись терпением. Ждать своего часа им придется около года.
Качества, которыми должны обладать претенденты на должность волонтера техподдержки Телеграма:
- хорошо разбираться в функциях мессенджера;
- отлично знать английский язык;
- любить Телеграм и быть готовым работать бесплатно;
- быть целеустремленным, терпеливым, старательным;
- уметь долго ждать.
Принятые на работу волонтеры получают доступ к служебному аккаунту Telegram, из которого могут отвечать на вопросы и репортить баги. Обработку обращений пользователей разрешается выполнять из дома или с работы, причем в любое время суток.
Что такое message?
Наверное многие, кто писал бота по моей предыдущей статье задались вопросом, что такое message и почему к примеру, чтобы отправить сообщение мы должны указать message.chat.id в параметрах функции send_message? Для того, чтобы узнать это давайте выведем message в консоль:
@bot.message_handler(commands=) def start(message): print(message)
Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:
{ 'content_type':'text', 'message_id':573, 'from_user':{ 'id':687595402, 'is_bot':False, 'first_name':'Dmitry', 'username':'dimagorovtsov', 'last_name':'Gorovtsov', 'language_code':'ru' }, 'date':1565206363, 'chat':{ 'type':'private', 'last_name':'Gorovtsov', 'first_name':'Dmitry', 'username':'dimagorovtsov', 'id':687595402, 'title':None, 'all_members_are_administrators':None, 'photo':None, 'description':None, 'invite_link':None, 'pinned_message':None, 'sticker_set_name':None, 'can_set_sticker_set':None }, 'forward_from_chat':None, 'forward_from':None, 'forward_date':None, 'reply_to_message':None, 'edit_date':None, 'media_group_id':None, 'author_signature':None, 'text':'/start', 'entities':, 'json':{ 'message_id':573, 'from':{ 'id':687595402, 'is_bot':False, 'first_name':'Dmitry', 'last_name':'Gorovtsov', 'username':'dimagorovtsov', 'language_code':'ru' }, 'chat':{ 'id':687595402, 'first_name':'Dmitry', 'last_name':'Gorovtsov', 'username':'dimagorovtsov', 'type':'private' }, 'date':1565206363, 'text':'/start', 'entities': } }
К примеру из всей этой информации мы хотим получить id чата, из которого я отправлял сообщение. Для этого обратимся к ключу chat.
Запрос:
Ответ:
Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:
Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:
Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.
Запрос:
Ответ:
Теперь достанем значение у ключа first_name:
Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:
Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!
Теперь смотрите, для того, чтобы отправить сообщение в какой-либо чат нам необходимо указать несколько параметров в функцию send_message. Первый параметр — это chat_id, собственно сам id чата. Второй — text, текст сообщения. И как вы догадались, вместо того, чтобы писать message.chat.id, мы можем написать свои данные! Вот так можно прислать сообщение самому себе, если указать в параметрах свой id:
Ну а когда мы пишем message.chat.id, мы подразумеваем, что бот отправит сообщение в чат, из которого его вызвали.
Как связать с ВКонтакте?
Теперь давайте попробуем добавить в качестве источника социальную сеть «ВКонтакте». В этой инструкции мы воспользуемся роботом ManyBot.
При желании вы можете использовать PosterBot. Делается это аналогично тому, как добавляется Инстаграм. Поэтому достаточно воспользоваться инструкцией, описанной выше, только на 9 пункте выбрать ВК.
Итак, ниже представлена пошаговая инструкция для ManyBot:
- Найдите в поиске @BotFather и начните с ним диалог, нажав кнопку «START».
- Напишите команду «/newbot».
- Далее придумайте название бота.
- Затем username, который обязательно должен заканчиваться на «bot».Если вы сделали все верно, то BotFather отправит вам сообщение, в котором будет содержаться API токен вашего будущего бота.
- Теперь в поиске находим @Manybot и также начинаем с ним диалог.
- Пишем команду «/addbot» либо нажимаем кнопку «Добавить нового бота».
- Далее будет запрошен API токен, который ранее нам дал BotFather. Копируем его и вставляем в диалог с ManyBot.
- Далее, если необходимо, пишем описание робота.
- Теперь, в поиске ищем нашего нового бота (по его username) и начинаем с ним диалог.
- Пишем команду «/autoposting».
- Выбираем соцсеть VK.
- Пишем URL-адрес сообщества, из которого необходим автопостинг.
Готово, теперь бот будет постить все из указанного паблика. Для того чтобы он начала работать, добавьте его в нужный канал/группу и назначьте администратором.
Как посмотреть незаметно чат на iOS
Сразу стоит сказать, что данный способ работает только в том случае, если смартфон поддерживает функцию 3D Touch (iPhone 6s и выше). Если на айфоне отключена эта функция, просмотреть послание незаметно не получится.
На моделях, у которых 3D Touch изначально отсутствует, переписку можно оставлять непрочитанной, как на Android-устройствах, но об этом позже.
Инструкция, как сделать сообщение непрочитанным при пользовании телефоном с функцией 3D Touch, выглядит так:
- Сильно надавить на несколько секунд пальцем на аватар интересующего чата, после чего немного ослабить усилие нажима и, не отпуская палец, еще раз нажать на аватар, но не так сильно, как в первый раз. Для начала рекомендуется попрактиковаться. Подобные манипуляции не получаются с первого раза. Если нажать недостаточно сильно или, наоборот, с избытком силы, окошко предварительного просмотра не активируется.
- Если все сделано правильно, через пару секунд откроется окно чата, но читать можно только последние послания, пролистать переписку не получится.
Чат-бот «Маша»
Теперь давай сделаем простейшего чат‑бота, который будет болтать с пользователем. Для этого мы подготовим файл , содержащий строки с вопросами (в начале таких строк поставим метку ) и ответами на них в следующей строке.
Файл поместим в папку рядом со скриптом бота. Для поиска похожих вопросов используем модуль fuzzywuzzy, который позволяет сравнивать, насколько похожи между собой две строки. Естественно, сперва этот модуль нужно установить:
Ниже приведен исходный код бота. После его запуска напиши боту «Привет» и попробуй с ним пообщаться. Естественно, это не искусственный интеллект и набор его ответов ограничен фразами из файла .
Пример работы чат‑бота
Шаг №2: создать Telegram-бота с помощью @BotFather
Необходимо подключиться к боту @BotFather, чтобы получить список чат-команд в Telegram. Далее нужно набрать команду для инструкций выбора название и имени бота. После успешного создания бота вы получите следующее сообщение:
Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды и ), фото профиля (), включить встроенный режим (), добавить описания команд (). Потребуется использовать две команды: и . Стоит описать их в .
Теперь, когда настройка закончена, можно переходить к написанию кода. Прежде чем двигаться дальше, рекомендуется почитать об , чтобы лучше понимать то, о чем пойдет речь дальше.
Использование документации Telethon
К счастью, документация Telethon дает более подробную информацию о том, как мы можем вызвать эту функцию. Отhttps://lonamiwebs.github.io/Telethon/index.html, если вы введетев поле поиска, вы увидите результат для метода с именем(Функции TL-схемы представленыобъекты в Telethon).
Документация дляуказывает тип возвращаемого значения для метода, а также чуть более подробную информацию о параметрах. Кнопка «Копировать импорт в буфер обмена» особенно полезна, когда мы хотим использовать этот объект, как сейчас.
https://lonamiwebs.github.io/Telethon/methods/messages/get_dialogs.html
функция, а также конструктор длязанимаетаргумент типа, В документации для GetDialogsRequest, нажмите черезссылка, чтобы увидеть страницу с описанием конструкторов и методов, принимающих и возвращающих этот тип.
https://lonamiwebs.github.io/Telethon/types/input_peer.html
Так как мы хотим создатьобъект для использования в качестве аргумента для нашегонас интересуют конструкторы для, В этом случае мы будем использоватьконструктор. Нажмите еще раз на страницу дляи скопируйте его путь импорта, чтобы использовать его.Конструктор не принимает аргументов.
Инструкция по обращению
Есть четыре способа обращения в службу технической поддержки Telegram. Если аккаунт пользователя не заблокирован, задать вопрос техслужбе можно из мессенджера. В случае блокировки профиля обратиться в техподдержку Телеграма можно из Твиттера или официального сайта Telegram.
Если у пользователя Телеграма нет возможности войти в личный аккаунт, он может обратиться в службу поддержки на стороннем сайте https://telegram.org/support. Писать о своей проблеме рекомендуется исключительно на английском языке. Ответ придет на электронную почту клиента Telegram.
Инструкция обращения (пошагово):
- причину обращения в службу пишут в поле под словами «Please describe your problem»;
- система запросит ввести «Your email» (личный адрес электронной почты) и «Your phone number» (личный номер телефона);
- заполнив все поля заявки, нужно нажать на «Submit» и отправить сообщение техподдержке Telegram.
Прямо в мессенджере
Если у пользователя есть возможность зайти в свой аккаунт Телеграма, то он может обратиться на горячую линию прямо из мессенджера и задать свой вопрос волонтеру службы техподдержки. Правда, общаться с администраторами рекомендуется только на английском языке. Можно написать текст на русском и перевести его с помощью Гугл-переводчика.
Пошаговая инструкция обращения:
войти в меню, потом – в настройки Telegram;
в открывшемся списке найти опцию «Задать вопрос» или «Ask a Question»;
появится всплывающее окошко с предупреждением, что в техподдержке бесплатно работают волонтеры и им нужно время, чтобы ответить на вопрос;
- система предложит прочитать готовые ответы на популярные вопросы в Telegram FAQ («Go to FAQ») или обратиться к волонтерам («Ask2);
- для общения с живым человеком нажимают на «Ask», или «Спросить»;
- при выборе «Ask» открывается окно чата, в котором можно задать вопрос и описать проблему, но только на английском языке;
к обращению разрешается прикрепить скриншоты неполадок.
Через бота-помощника
Если у клиента Телеграма есть возможность войти в свой профиль, то все проблемы он сможет решить в рамках мессенджера. В приложении есть специальный бот @spambot, который помогает при блокировке аккаунта
Важно знать, что в случае бана абонент входит в аккаунт, но не может написать и отправить сообщение ни одному человеку из своего списка контактов
Выяснить причину блокировки поможет служебный робот, живущий в Телеграме. Благодаря боту можно обратиться в службу поддержки и узнать, когда закончится бан. Если пользователь невиновен, ему нужно предоставить техслужбе доказательства своей правоты, то есть прикрепить к сообщению скриншоты чата.
Как обратиться в техподдержку через бота:
написать в строке поиска «@spambot»;
найдя бота, начать с ним диалог, кликнув на «/start»;
в открывшемся чате описать свою проблему и подтвердить невиновность доказательствами (скриншотом, фотографиями).
Важно! Администрация Телеграма блокирует аккаунты тех пользователей, которые активно рассылают спам, то есть отправляют сообщения с рекламой или ссылками на другие сайты. Бан можно получить за оскорбление собеседника в чате и публикации, нарушающие законы
Администрация Telegram блокирует пользователей в несколько этапов. В первый раз блокировка за несоблюдение правил длится 7 суток. При повторном нарушении можно получить вечный бан. Желательно в чатах придерживаться правил общения и не оскорблять пользователей. В мессенджере запрещено пропагандировать терроризм, употребление наркотиков.
Через аккаунт в Твиттере
Служба поддержки Telegram имеет свой аккаунт в Твиттере. Если у пользователя нет возможности войти в личный профиль Телеграма, он может узнать о причине блокировки или неисправности через социальную сеть. Найти в Твиттере техслужбу можно по такому адресу: .
Пошаговая инструкция обращения в поддержку через Твиттер:
найти опцию «Сообщение»;
- описать (подробно) свою проблему на английском языке;
- в сообщении указать личный номер телефона или свое имя пользователя аккаунта Телеграма;
- отправить послание.
Собираем экраны «Предложить новость» и «Предложить статью»
Логика экрана будет такой:
- Пишем текст с пояснением, что нужно сделать — написать текст новости или дать ссылку на неё.
- Сохраняем ответ в отдельной переменной news1.
- Отправляем в наш новостной чат сообщение от бота с именем посетителя, который написал новость, и текст самой новости.
- Чтобы сообщения не слипались, вдогонку отправляем в тот же чат отбивку — линию-разделитель из нескольких дефисов.
- Если мы дошли до последнего пункта и всё прошло без ошибок — показываем посетителю экран «Всё хорошо», а если на каком-то этапе была ошибка — сразу перебрасываем его на экран «Что-то не так».
Сначала посмотрим на готовый экран, а потом разберём его по шагам:
Первые два экрана соответствуют тому, что мы писали в алгоритме, а два остальных — это и есть наша отправка сообщений в чат
Каждую отправку мы сделали через запрос POST к API телеграма. Когда сервер телеграма получает специальным образом подготовленный запрос, он выполняет какое-то действие — это называется работа по API и про это у нас есть отдельная статья.
В нашем случае все запросы используют метод sendMessage, у которого всегда есть два параметра:
- ID получателя.
- Текст сообщения.
В общем виде команда выглядит так:
Мы уже знаем токен бота и ID чата, куда хотим отправить сообщение — это ID нашего чата, который мы выяснили до этого. Подставляем эти значения и получаем команду:
Первым сообщением мы отправляем имя того, кто предложил новость, и сам текст новости, поэтому сообщение будет выглядеть так:
Здесь и — это переменные. Первая переменная стандартная в конструкторе BotMother, а вторую сделали мы сами на этом же экране. Полный текст запроса выглядит так:
Сделаем по аналогии вторую команду, которая присылает отбивку в чат, чтобы отделить одну новость от другой:
Вместо двух запросов на отправку сообщения можно было использовать функцию API телеграма forvardMessage, которая просто пересылает сообщения. Для этого нам понадобился бы порядковый номер сообщения в переписке. Если бы мы писали бота на питоне, с этим бы не было никаких проблем, но в этом конструкторе проще сделать отправкой, как у нас.
Точно так же собираем экран «Предложить статью»:
Единственное, что поменялось на этом экране — приветственный текст и имя переменной
Полезные телеграм-боты
Про телеграм-ботов незаслуженно забывают. А ведь это уникальное преимущество мессенджера: с помощью ботом можно скачивать музыку, заводить знакомства, создавать мемы и даже медитировать. Их огромное множество, причём даже не самый продвинутый пользователь может создать бота, например, для управления своим каналом.
Ниже — популярные телеграм-боты, которые могут быть полезными в быту и работе:
- @Mixvk_bot для поиска музыки — достаточно отправить ему фразу из песни и вам придет трек;
- @YTranslateBot — бот-переводчик от Яндекса;
- @WeathersBot расскажет прогноз погоды;
- @radiobot запускает радио прямо в приложении;
- @remindmemegabot — бот для создания напоминаний;
- @GetYoutubeMp3Bot скачивает музыку из видео на YouTube.
*Сервис компании Meta, которая признана экстремистской организацией и запрещена на территории России.
Создание клиента
Прежде чем вы сможете начать взаимодействовать с Telegram API, вам нужно создать клиентский объект с вашима такжеи подтвердите его с вашим номером телефона. Это похоже на вход в Telegram на новом устройстве; вы можете представить этого клиента как еще одно приложение Telegram
Ниже приведен код для создания и аутентификации объекта клиента, модифицированный из документации Telethon:
from telethon import TelegramClientfrom telethon.errors.rpc_errors_401 import SessionPasswordNeededError# (1) Use your own values hereapi_id = 17349api_hash = '344583e45741c457fe1862106095a5eb'phone = 'YOUR_NUMBER_HERE'username = 'username'# (2) Create the client and connectclient = TelegramClient(username, api_id, api_hash)client.connect()# Ensure you're authorizedif not client.is_user_authorized(): client.send_code_request(phone) try: client.sign_in(phone, input('Enter the code: ')) except SessionPasswordNeededError: client.sign_in(password=input('Password: '))me = client.get_me()print(me)
Как упоминалось ранее,а такжевыше взяты из исходного кода Telegram Desktop. Введите свой номер телефона впеременная.
Telethon создастсохраните сведения о сеансе в своем рабочем каталоге, точно так же, как вам не нужно повторно проходить аутентификацию в приложениях Telegram каждый раз, когда вы закрываете и снова открываете их. Имя файла начинается спеременная. Это зависит от вас, если вы хотите изменить его, если вы хотите работать с несколькими сессиями.
Если предыдущей сессии не было, выполнение этого кода приведет к отправке вам кода авторизации через Telegram. Если вы включили двухэтапное подтверждение в своей учетной записи Telegram, вам также потребуется ввести пароль Telegram. После того, как вы аутентифицировались один раз ифайл сохранен, вам не придется повторно проходить аутентификацию, пока не истечет время сеанса, даже если вы снова запустите скрипт.
Если клиент был создан и аутентифицирован успешно, объект, представляющий себя, должен быть напечатан на консоли. Это будет похоже на (эллипсыозначает, что какой-то контент был пропущен)
User(is_self=True … first_name='Jiayu', last_name=None, username='USERNAME', phone='PHONE_NUMBER' …
Теперь вы можете использовать этот клиентский объект, чтобы начать делать запросы к Telegram API.
Особенности ботов для поиска по мобильному номеру
Сегодня в Телеграмм можно найти достаточное число автоматизированных программ, выполняющих поиск данных о людях. Большинство таких ботов имеет платный характер, что связано с желанием создателей монетизировать свои продукты. Обычно бесплатно можно выполнить несколько тестовых запросов, позволяющих убедиться в функциональности бота и широте его возможностей.
Пробные тесты показывают, что боты для поиска по номеру телефона звёзд в небе не хватают. В большинстве случаев они выдают информацию, которая имеется в свободном доступе в сети. Лишь некоторые из ботов имеют доступ к закрытым базам данных. Но подчас результаты их работы далеко от идеальных. Они регулярно выдают неточную или устаревшую информацию, и слишком полагаться на их функционал мы не рекомендуем.
- Для работы с поисковым ботом необходимо перейти в Телеграмм, в строке поиска вбить название бота и нажать на ввод.
- В результатах отобразится канал бота.
- Необходимо кликнуть по нему и нажать на «Запустить» в правой панели (или использовать прямые ссылки на ботов, приведённые нами ниже).
Далее в строке бота понадобится набрать номер телефона (или другие запрошенные ботом данные) и нажать на ввод. Через пару секунд вы получите искомый результат.
Помните, что незаконный сбор персональной информации без согласия человека, о котором вы запрашиваете данные, может быть наказуем в соответствии с законом «О персональных данных» и статье 137 УК РФ «Нарушение неприкосновенности частной жизни». Выполняя поиск без согласия второй стороны вы действуете на свой страх и риск.
Давайте рассмотрим, какие боты в приложении Telegram мы можем использовать для выполнения поиска по номеру телефона нужных нам людей.
Заключение
Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.
Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в телеграмме есть аж целых два типа клавиатур:
- Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
- Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:
Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.
В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.
Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.