Как защитить телеграм бота
Общие сведения
Что могут делать боты?
Вот несколько примеров использования ботов:
- Интеграция с другими сервисами. Например, бот может отправлять комментарии или управлять «умным домом». Или, например, отправлять вам уведомления при совершении каком-то действия или события (Примеры: GitHub Bot, Image Bot).
- Утилиты и инструменты. Бот может отображать погоду, переводить тексты или предупреждать о предстоящих событиях по вашему запросу (Например: бот опросов).
- Одно- и многопользовательские игры. Бот может поиграть с вами в шашки или шахматы, проводить викторины и так далее. (Пример: Trivia bot).
- Социальные сервисы. Бот может находить вам собеседника, основываясь на ваших общих интересах и увлечениях. (Пример: HotOrBot).
- Все, что вам захочется. Бота можно запрограммировать для чего угодно. Разве что посуду они помыть не смогут.
Как работают боты?
Как уже было сказано ранее, роботы — особые аккаунты, которые не требуют номера телефона при создании. По сути, эти аккаунты играют роль интерфейса к вашему сервису, который работает на удалённом сервере.
Рекомендуем также ознакомиться с подробным описанием Bot API.
Как создать бота?
Для этого есть. Бот. Просто напишите пользователю @BotFather и следуйте его инструкциям. Как только вы создали бота и получили свой ключ (токен) авторизации, переходите в раздел документации Bot API, чтобы начать настраивать вашего бота.
Чем бот отличается от обычного аккаунта?
Суперспособности
У роботов Telegram есть много уникальных возможностей — например, кастомизированные клавиатуры, дополнительные интерфейсы для команд по умолчанию, внешнее связывание и специальные режимы приватности для групп.
Инлайн-режим
С помощью ботов пользователи могут играть в HTML5-игры в группах или приватных чатах. Игровая платформа Telegram поможет составить таблицу рекордов и оповещать пользователей об изменении рейтинга.
Под капотом у игр — HTML5, поэтому вы можете создавать игры любой сложности. На данный момент командой Telegram созданы несколько демо-игр:
Клавиатуры
За более подробной информацией обращайтесь к описанию метода sendMessage.
Команды
Команды представляют собой более гибкий способ общения с ботом. Рекомендуется следующий синтаксис:
Команда должна начинаться с символа косой черты «/» и не может быть длиннее 32 символов. Команды могут состоять из букв латинского алфавита, цифр и подчёркивания. Несколько примеров:
Если в группе есть несколько ботов, вы можете дописать после команды имя бота, чтобы избежать коллизий в общих командах:
Это происходит автоматически, если вы выбираете команду из списка доступных.
Глобальные команды
Чтобы пользователям было проще работать с ботами, мы просим всех разработчиков реализовывать поддержку нескольких простых команд. В интерфейсе приложений Telegram будут ярлыки (быстрые ссылки) для этих команд.
При попытке начать общение с роботом, пользователь увидит кнопку СТАРТ. На странице профиля бота также будут доступны ссылки Помощь и Настройки.
Режим приватности
Внешнее связывание
Боты имеют механизм внешнего связывания, которые позволяет передать дополнительные параметры при запуске. Например, для передачи авторизационного токена пользователя, чтобы соединить его аккаунт с каким-либо внешним сервисом.
Допустимо использование символов A-Z , a-z , 0-9 , _ и - . Мы рекомендуем использовать base64url для кодирования параметров.
В PAYLOAD будет значение параметра start или startgroup , который был передан в ссылке.
Пример реализации внешнего связывания
BotFather
Создание бота
Напишите команду /newbot , чтобы создать нового робота. BotFather спросит у вас имя нового бота и предложит придумать username.
Имя (name) будет отображаться в контактах и чатах.
Username — короткое имя на латинице, которое используется для упоминаний бота и в ссылках на профиль в telegram.me. Username должен состоять из букв латинского алфавита, подчёркиваний и цифр и быть длиной от 5 до 32 символов. Также имя пользователя обязательно должно заканчиваться на «bot», например: «tetris_bot» или «TetrisBot».
Создание токена
Если вы потеряли или утратили доступ к токену, отправьте команду /token , чтобы сгенерировать новый.
Настройки
Пожалуйста, имейте в виду, что для применения настроек на сервере, возможно, потребуется некоторое время.
Сайт про Telegram на русском (неофициальный).
Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.
На самом деле создать чат-бота для Telegram с имеющимися инструментами стало максимально просто, что я и собираюсь продемонстрировать в этой статье. Буквально за полчаса мы с тобой напишем достаточно сложного антиспам-бота на Node.js с использованием TypeScript 3 и хранением записей в MongoDB, а после закинем его на Digital Ocean и настроим быстрый и бесплатный CI на основе простых веб-хуков GitHub. Конечно, можно было бы развернуть все и на «Докере», но, думаю, новичкам в программировании сложнее разбираться с этой магией. Сегодня только олдскул!
Настройка окружения
Хоть в статье я и буду использовать мой верный «Мак», на других платформах все примерно так же, за исключением некоторых настроек и процесса установки программ и утилит. Если у тебя возникнут проблемы с установкой, можешь связаться со мной в Telegram — попробую помочь.
В качестве IDE (или текстового редактора, смотря какого лагеря этого холивара придерживаться) я воспользуюсь VSCode. Хранить код буду на GitHub. Скачай и установи себе VSCode, а затем зарегистрируйся на GitHub.
Первым делом стоит установить то, на чем мы будем писать проект, — Node.js. Можно стянуть инсталлятор c официального сайта, но я крайне рекомендую использовать NVM — менеджер версий для Node.js, который позволяет не только установить разные версии, но и переключаться между ними. Установить его можно из официального репозитория следующей командой:
Советую использовать наиболее актуальную команду из репозитория Readme. Не забудь перезапустить терминал после установки NVM. После стоит установить сам Node.js. У меня одиннадцатая версия, но все последующие, в принципе, должны работать примерно так же. Установим последнюю версию «Ноды»:
Если после выполнения $ which node терминал выдает папку, то все прошло успешно. Вместе с Node.js ставится и менеджер пакетов NPM, который мы заменим на более быстрый yarn . Пропиши следующую команду, чтобы установить его:
Без опций npm и yarn добавляют и устанавливают пакеты в открытую папку проекта. Однако если к npm добавить флаг -g , то пакет установится прямо в систему (на самом деле в пользователя — но углубляться не будем) и будет доступен как отдельное приложение. Таким образом, мы установили yarn отдельным приложением и уже будем использовать его. Время заставить yarn установить TypeScript 3 глобально! Делается это не флагом, а отдельным аргументом при вызове:
Одна команда — и у тебя в системе теперь есть TypeScript. Вся мощь Unix на кончиках пальцев!
Последний кусочек пазла — это база данных MongoDB, которую мы и будем использовать для этого проекта. MongoDB — база данных типа NoSQL, что означает отсутствие очевидных связей между таблицами при помощи связных таблиц (или join tables), но зато дает упрощенную структуру данных в читабельном виде и простейшие миграции. Человеческим языком: эффективных связей между объектами быть не может, но разрабатывать проще.
Проще всего установить MongoDB с официального сайта. Разработчики будут всячески пытаться продать тебе собственное хранилище базы данных (БД) в облаке — не ведись на провокации. Все хранилища БД в облаках дешевые только до первых 10 тысяч пользователей, дальше тебя начнут разорять. Мы поднимем собственное облако для БД с блек-джеком и прочими атрибутами. Также есть и официальный туториал по установке MongoDB на «Мак» через терминал — именно это я и советую сделать. Заодно и homebrew себе поставь, лишним точно не будет.
На этот момент у тебя должны быть установлены:
- Node.js;
- Yarn;
- TypeScript;
- MongoDB.
Тест-драйв
Типичная вещь, с которой нужно начинать писать любой проект. Давай прохеллоуворлдим наш технологический стек (или его часть) до начала реального кодинга — чтобы понять, все ли работает.
Создай в любом месте у себя на компьютере (у меня есть удобная папочка
/code , где я держу все проекты) папку shieldy_bot и зайди в нее в терминале. В папке проекта пропиши
Эта команда задаст тебе ряд вопросов и создаст проект вместе с файлом package.json — это тот самый мастер-файл, на который будет смотреть Node.js при запуске проекта. Обязательно укажи dist/index.js в качестве entry point (точки входа) — чуть позже я расскажу зачем.
Таким образом я настроил свой проект
Создай файл index.js в папке dist в папке проекта. Внутри пропиши лишь одну строку: console.log('Hello world!') . В файл package.json добавь скрипт start вида node dist/index.js .
Примерно так должен выглядеть проект
Здесь и далее: команды Unix должны выполняться в папке проекта, если не сказано иначе.
После добавления TypeScript прямо в проект будет использоваться именно он, а не тот, что установлен в системе. TypeScript не запускается напрямую «Нодой», он сначала компилируется в JavaScript, а потом компилированный код и запускается при помощи Node.js. В нашем проекте мы будем хранить и писать наш код TypeScript в папке src , а компилироваться и запускаться JavaScript будет в папке dist . Чтобы tsc (тулза — компилятор из TypeScript в JavaScript) работала правильно, ее нужно настроить. Добавь в корень проекта файл tsconfig.json со следующим содержанием:
Вдаваться в подробности, что это за файл и как он работает, я не буду: это задача вне текущего руководства. Стоит лишь отметить, что мы берем TypeScript-файлы из src , конвертируем в стандарт es2017 и кладем в папочку dist .
После удаляем папку dist — она теперь должна генерироваться сама. Добавляем папку src и кладем туда уже index.ts с содержанием console.log('Жизнь за Харамби') ( ts — это расширение файлов TypeScript). В принципе, любой рабочий JavaScript (JS) — это еще и рабочий TypeScript (TS), так как TS — это надстройка над JS.
Также стоит отметить, что TS — это типизированный язык, в отличие от JS. Но так как множество пакетов было изначально написано на JS, сообщество начало дополнять уже существующие проекты информацией о типах в репозитории Definitely Typed, откуда все разработчики заимствуют типы. Так и мы сделаем для «Ноды» — выполним команду $ yarn add @types/node . Если все было правильно, твой проект должен походить на следующий скрин.
Добавили шаг компиляции TS
Теперь перед каждым запуском $ yarn start тебе нужно запускать команду $ tsc , чтобы компилировать код TS в JS. К слову, можно еще и использовать $ tsc -w . Флаг -w заставит tsc перекомпилировать файлы, которые изменяются, при их сохранении. Удобно! Но еще удобнее будет поменять команду start из package.json на tsc && node dist/index.js — тогда каждый раз при запуске $ yarn start будет запускаться и tsc .
Запусти $ yarn start , предварительно добавив или запустив $ tsc вручную. Ты должен увидеть выплюнутую консолью строку «Жизнь за Харамби».
Если все получилось, то поздравляю: ты настроил окружение для разработки и теперь знаешь, что TypeScript работает. Теперь настроим контроль версий!
Наш механизм Continuous Integration (CI) будет основан на веб-хуках GitHub. Запушил в репозиторий — и код сразу же развернулся на сервере в продакшене. Поэтому никак нельзя обойти стороной контроль версий.
Любой контроль версий начинается с правильного игнорирования файлов. Добавь в корне проекта файл с названием .gitignore и следующим содержанием:
Это позволит избежать коммитов с пакетами из NPM (в идеале они должны устанавливаться теми, кто качает репозиторий с кодом), скомпилированным кодом (он должен компилироваться тем, кто качает репозиторий) и переменными окружения, куда мы добавим разного рода информацию, наподобие местонахождения нашей БД. Информация из .env не должна ни в коем случае попасть на GitHub, а в зависимости от окружения (разработка, тестовый или боевой сервер) должна отличаться.
Теперь инициализируем репозиторий Git, добавим все файлы в систему контроля версий и закоммитим их следующими командами:
Думаю, на этом с контролем версий и закончим — главное, не забывай, что в случае пожара делаем add , commit , push . Также стоит отметить, что, хоть к «Гиту» мы вернемся только ближе к концу статьи, смело делай commit и push на свое усмотрение.
Пишем бота-автоответчик
Для начала нужно убедиться, что мы можем написать простейшего бота, — чтобы после продолжить с более сложным концептом. Первый шаг создания любого бота для «Телеграма» — это общение с @botfather — отцом всех ботов. После пары-тройки несложных манипуляций (уверен, ты справишься) ты получишь токен бота в следующем виде:
Если что, этот токен уже не актуален, так что все же сделай свой. Мы его добавим в файл .env , который теперь должен выглядеть так:
.env — это файл для переменных окружения. Так как мы добавили его в gitignore , он не только не будет загружен на GitHub, но еще и не будет доступен людям и сервисам, которые захотят клонировать репозиторий. Более того, контроль версий его вообще видеть не будет, так что на разных серверах (и даже просто в разных папках) ты всегда сможешь указать разные файлы .env . Например, для тестового сервера и боевого.
Чтобы заполучить доступ к переменным из этого файла, нам нужно добавить свой первый пакет зависимостей. Пропиши в терминале следующее:
Теперь у тебя в проекте установлен модуль dotenv с его типами. Стоит отметить, что сразу несколько пакетов можно устанавливать, указав их через пробел команде $ yarn add . Также типы из Definitely Typed не обязательно ставить для каждого пакета зависимостей — велика вероятность, что пакеты уже будут идти со своими типами, прописанными разработчиками. Все-таки TypeScript уже давно на рынке и успел понравиться многим.
Перепишем наш index.ts следующим образом:
Здесь и далее я подразумеваю, что ты запускаешь и тестируешь свой код, сначала скомпилировав его при помощи команды $ tsc , а потом запустив с $ yarn start .
После запуска твоя консоль должна выдать такую строчку:
Если это так, то все в ажуре — переходим к непосредственному написанию бота. Использовать мы будем библиотеку Telegraf, она на данный момент самая продвинутая. Поставим ее командой $ yarn add telegraf — типы ставить не нужно, они идут в пакете с основным кодом.
Изменим наш index.ts на что-то такое:
Давай разберем код и посмотрим, что же он делает.
Запустив этот код, ты получишь рабочего бота, который умеет… пока что только передразнивать пользователя.
Подобный бот у тебя должен был получиться
Дальше я не стану приводить длинные выкладки кода: просто буду говорить, куда и что добавлять. Поэтому будь внимателен!
Робот-вышибала
Идея, которую мы реализуем, очень проста: когда человек заходит в чат, бот ему говорит, что у него 60 секунд, чтобы что угодно написать в чат — хоть стикер, хоть команду, хоть фоточку. Если человек в течение минуты ничего не прислал, то мы кикаем его из группы.
Пока что не будем заморачиваться с перезапуском бота и сохранением состояний, просто будем держать список кандидатов на бан в памяти, а каждую секунду проверять, не нужно ли кого-то забанить.
Где-нибудь вверху добавь переменную chats со следующей сигнатурой:
Эта басурманская вязь — объявление типа объекта до его непосредственного использования. У нас будет объект идентификаторов чатов к списку кандидатов на бан в этом чате. У каждого кандидата на бан будет идентификатор от «Телеграма» и время, когда он зашел. Конечно, чище будет использовать интерфейсы — но это позже.
В принципе, здесь все просто — как только человек приходит в чат, мы создаем ему объект кандидата с его идентификатором и временем, когда он пришел. После мы либо достаем существующий массив кандидатов для определенного чата и добавляем туда нашего кандидата, либо создаем новый массив сразу же с кандидатом — а после возвращаем новый массив в объект идентификаторов чата к кандидатам.
Убирать кандидатов еще проще — мы получаем список кандидатов для чата. Если его нет — все хорошо, кандидата и убирать не надо. Если есть, то мы фильтруем массив кандидатов.
После нам остается лишь добавить таймер, который раз в секунду будет проверять, не нужно ли кого-нибудь снова забанить. Добавляем следующий код:
Каждую секунду мы запускаем эту функцию. Она проходится по всем идентификаторам чатов из нашего объекта чатов с кандидатами. Если кандидатов нет, то просто пропускает этот чат. Иначе — проходится по всем кандидатам и сверяет, не зашел ли кто-то из них более 60 секунд назад. Если это так, то банит и убирает из списка кандидатов.
Вот и все — можешь запускать бота, добавлять его в любой чат с админскими правами и забыть про спамеров!
Современное программное обеспечение и онлайн-сервисы имеют достаточную степень защиты, которая обеспечивает неприкосновенность персональных данных. Иногда случаются утечки, однако обычно они прямо или косвенно связаны с наличием в цепочке «человеческого фактора». Сегодня напомним о некоторых базовых правилах обеспечения безопасности в мессенджере Telegram.
1. Включите двухфакторную авторизацию (иначе — двухэтапная аутентификация)
Если вы не впитали с молоком матери правило активировать двухфакторную авторизацию в абсолютно любом приложении или сервисе, нужно сделать это прямо сейчас. У вас не должно быть иллюзий о том, что раз ваш телефон у вас в кармане и в Telegram стоит сложный пароль уровня 1q2w3e4r5t6y, вас не взломают. Сегодня важнее не пароль, который можно потерять или засветить, а дополнительные инструменты.
Telegram сделал все, чтобы настроить безопасность в один присест: не нужно лазить по меню, достаточно войти в настройки и перейти в «Конфиденциальность».
Здесь вы активируете двухэтапную аутентификацию, задаете пароль и почту для его получения. Желательно выбрать новый и неизвестный ранее пароль: мошенники знают, что обычно люди используют одно кодовое слово для всего.
Отметим, что на Android двухфакторная аутентификация в настройках именно так и называется. А на iOS в русскоязычной версии приложения Telegram «двухфакторка» указана как «облачный пароль».
2. Проверяйте «Активные сеансы»: в них перечислены все устройства, с которых вы входили в учетную запись Telegram. Это могут быть компьютеры и смартфоны ваших друзей, рабочие компьютеры, где вы, например, воспользовались веб-версией Telegram, ваши старые телефоны и так далее. Здесь можно завершить все остальные сессии, оставив авторизованной лишь на том устройстве, с которого вы проводите настройки мессенджера.
3. Пройдитесь по всем пунктам в закладке «Конфиденциальность»: здесь есть подробное описание каждой функции. В частности, есть запрет на просмотр вашего номер телефона (найти вас можно будет только по никнейму, если это, опять же, разрешено в настройках). В настройках можно посмотреть, кто уже видит ваш номер.
4. Запретите включения вас в группы, каналы — такие действия не стоит разрешать для всех, в лучшем случае — для ваших контактов. Можно отключить данные функции вовсе и лишь при необходимости активировать — доверенное лицо добавило вас в чат, например, после чего вы снова активируете запрет на такие действия. Да, это требует лишних телодвижений и времени, но потеря аккаунта — хуже. Запретите звонки тем, кто не включен в список контактов.
6. Скройте фотографию профиля вашей учетной записи либо для всех, либо (и это обязательный минимум) для тех, кто не внесен в список ваших контактов.
7. Проверьте «синхронизацию контактов» — она обеспечивает хранение данных в облаке и синхронизацию списков контактов с адресной книгой телефона. Если функция активна, все, кто записан в вашей телефонной книге (не Telegram, а именно мобильника), смогут связаться с вами через мессенджер (как и вы с ними). Иногда данную функцию рекомендуют отключить, так как обычно в телефонной книге есть немало малознакомых людей, в том числе случайных.
Есть о чем рассказать? Пишите в наш телеграм-бот. Это анонимно и быстро
11- Cообщений: 555
- Поинты: 89
- Предупреждений: 0
- Онлайн: 22д 8ч 39м
Какие бесплатные способы защиты канала от накрутки есть?
Также нужно очистить канал от уже накрученых юзеров, подскажите плс
- Cообщений: 1 052
- Поинты: 9
- Предупреждений: 10
- Онлайн: 19д 1ч 30м
закрытый не поможет, просто чисть или ставь спец ботов, которые будут блокировать заливку подозрительную
- Cообщений: 555
- Поинты: 89
- Предупреждений: 0
- Онлайн: 22д 8ч 39м
закрытый не поможет, просто чисть или ставь спец ботов, которые будут блокировать заливку подозрительную
Какие боты не знаешь? искал кроме crosser bot ничего не нашел, а он платный
- Cообщений: 1 052
- Поинты: 9
- Предупреждений: 10
- Онлайн: 19д 1ч 30м
Какие боты не знаешь? искал кроме crosser bot ничего не нашел, а он платный
бесплатных не видел с таких функуионалом, можешь на заказ сделать что бы кросеру не платить как вариант
Какие бесплатные способы защиты канала от накрутки есть?
Также нужно очистить канал от уже накрученых юзеров, подскажите плс
- Cообщений: 3 980
- Поинты: 0
- Предупреждений: 50
- Онлайн: 60д 14ч 14м
Медали
Какие бесплатные способы защиты канала от накрутки есть?
Также нужно очистить канал от уже накрученых юзеров, подскажите плс
Это как с сексом без презерватива, просто не бери рекламу у ботоводов )
- Cообщений: 555
- Поинты: 89
- Предупреждений: 0
- Онлайн: 22д 8ч 39м
Все остроумные ппц, кто нибудь конструктива может накинуть? каким именно образом бот crosser вычисляет фейк акки, мне это непонятно
VDS ДЕШЕВО - vk.cc/9DLOux
Медали
Какие боты не знаешь? искал кроме crosser bot ничего не нашел, а он платный
других нету, да и кроссер такое себе решение, кроссер вычисляет только удаленные акки, и показывает как давно подписчики заходили в свои аккаунты, больше показателей у него никаких нет, так что фигня для конкретно твоей задачи
С этим ничего не сделаешь. Закрыть канал не поможет, потому что можно и в закрытый канал налить ботов.
Была у меня такая ситуация, когда в канал залили 4к ботов в течение 1-1.5 недели. Я через кроссер почистил больше 2к человек, но в итоге, пошла отписка и все эти 4к отписались.
В итоге испортили мне всю статистику канала..
- Cообщений: 555
- Поинты: 89
- Предупреждений: 0
- Онлайн: 22д 8ч 39м
Понял, спс за ответы
VDS ДЕШЕВО - vk.cc/9DLOux
Медали
Понял, спс за ответы
кстати, если будешь делать приватной ссылку на канал во время рекламы. правильно же я понял, чтоб тебе ботов не лили во время рекламы?
так вот есть вариант менять ссылку?
ну например, делаешь пост на прокладку с публичной ссылкой, а там приватная ссылка - ну и меняй ее периодически, чем чаще тем лучше
Читайте также: