Ограничить пользователей бота ТГ

Время от времени владельцы Telegram-групп сталкиваются с тем, что злонамеренные граждане начинают вести себя не особо культурно и наливают в вашу группу тысячи ботов.

Помимо того, что это приводит к параличу любого общения в группе из-за спама сообщениями « Такой-то вступил в группу » и сообщениями от самих ботов, также это может закончится довольно печально, если боты «обучены» выходить из группы, нажав при этом кнопку «Пожаловаться». При достаточном количестве жалоб вы можете лишиться вашего телеграм-чата!

Так что же делать, если в один «прекрасный» день вы видите, что к вам в группу стали пачками добавляться непонятные пользователи?

Наша тактика защиты будет состоять из трёх вещей:

  1. Добавление в группу бота-администратора, который будет автоматом банить всех новых пользователей
  2. Очистка всех тех, кто уже успел вступить, до момента, когда был добавлен бот-администратор
  3. Создание сложностей для проведения повторных атак

Добавляем бота-администратора

Если у вас достаточно большой телеграм-чат и до сих пор нету бота, с помощью которого его можно администрировать и модерировать пользователей, то это большая ошибка!

Виртуальная валюта в Телеграм боте

На рынке существует с десяток решений данной проблемы, лично я выбрал для себя бота ChatKeeper. Бот довольно удобный, масса настроек, имеется веб-интерфейс, короче — рекомендую.

После того, как вы добавите его в свою группу и сделаете администратором, вы сможете посылать боту команды. Просто пишите их в чат, бот на них реагирует. С полным списком вы можете ознакомиться вот тут, нас же в данный момент интересует всего одна: /kickall . Смотрим описание

Итак, после включения «режима атаки» ваш новоиспечённый админ будет банить всех ботов, которых вам продолжают наливать в группу. Отлично, мы прекратили приток новых ботов, но что делать с теми, которые уже успели к нам вступить?

Чистим вступивших ботов

Перво-наперво засеките время, когда вы перевели бота-администратора в режим атаки. Допустим, это было 12:15. Далее проматываете вашу группу и ищете момент, когда в неё стали добавляться невнятные пользователи. Допустим, это было в 10:42.

Всех новых пользователей, добавившихся в промежутке 10:42 — 12:15 вам необходимо удалить. Как получить список таких пользователей?

Для решения этой задачи Telegram предоставляет нам полный лог действий, произошедших на канале. Называется он « Recent Actions » и доступен в меню группы.

Если зайти в этот лог, то справа вверху будет кнопка, позволяющая отфильтровать лог по различным типам действий. Нас интересует действие « New members «.

После применения фильтра мы увидим лог добавления всех новых пользователей нашей группы. Но как быть, если к вам успело залететь несколько тысяч ботов? Не будем же мы сами искать их всех в логе и удалять руками?

Конечно же нет. Специально для этой задачи мне пришлось написать небольшое консольное приложение, работающее как под Windows так и под MacOs. Оно делает ровно то, о чём я написал выше: читает лог действий группы за заданный промежуток времени и удаляет новых пользователей.

ВНИМАНИЕ: Лог группы хранится на серверах Telegram в течение 48 часов, после чего удаляется, поэтому начинайте очистку как можно раньше!

Приложение живёт тут и вот как с ним работать:

  • Скачиваете весь код из GitHub репозитория в виде zip-архива и разархивируете его в какую-нибудь папку
  • Открываете в любом текстовом редакторе файлик Program.cs и редактируете настройки. Вот как выглядит блок настроек

Вам нужно поменять здесь всё-всё-всё. Начнём по порядку:

  1. Ваш номер телефона — тут всё вполне очевидно.
  2. Название вашего чата в телеграме. Без собаки!
  3. Начальная дата, начиная с которой софт будет чистить пользователей. Формат у неё такой: год, месяц, день, часы, минуты, секунды. ВНИМАНИЕ: часовой пояс здесь UTC+0. Поэтому, если у вас, например +3, то вам надо вычесть 3 часа чтобы получить нужную дату.
  4. Конечная дата, формат тот же, что и у начальной
  5. apiId и apiHash — число и хэш для доступа к API Телеграма от вашего лица. Их нужно взять вот отсюда.

После того, как вы всё поменяли и сохранили, необходимо скомпилировать и запустить софт. Для этого:

  • Ставите себе последний .NET SDK с сайта Microsoft
  • Запускаете консоль/терминал и командой cd переходите в папку, в которую разархивировали код
  • Пишете dotnet run и жмёте Enter

После того, как вы запустили программу, она спросит у вас код доступа, который придёт вам в Телеграм. Введите его в консоли.

Далее софт начинает чистить всех пользователей в заданном промежутке времени, выглядит это всё примерно вот так

Скорость очистки равна 300 пользователей за 13 минут, т.е. примерно полторы тысячи в час. К сожалению, быстрее не получится, Telegram ограничивает повторяющиеся API-запросы. Так что просто запустите программу фоном и пусть работает.

Заметка: если вы программист, то вы можете ускорить работу программы, добавив в группу ещё несколько админов, далее получить для них apiId и apiHash, после чего чистить группу многопоточно, используя все аккаунты админов, что есть в наличии.

После того, как софт закончит удалять ботов, переходим к третьей части Марлезонского балета.

Еще по теме:  1 файл сохранен в загрузки Телеграм Ксяоми

Усложняем возможность проведения последующих атак на вашу группу

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

Проверки могут быть разнообразными: нажатие на кнопку «Войти», решение несложной математической задачки, капча и т.п. Мы с вам остановимся на самой простой: кнопке «Войти».

Для её реализации нам потребуется всё тот же бот-администратор ChatKeeper. Переходим в веб-интерфейс бота, выбираем «Настройки» — «Приветствие» и ставим всё примерно так как на скрине ниже:

После чего сохраняем настройки. Всё, теперь все пользователи, которые не проходят проверку (т.е. не нажамают на кнопку) будут удалены!

Поздравляю! Вы только что сделали всё необходимое, чтобы защитить вашу Telegram-группу. Для того, чтобы добавить вместо кнопки, например, математическую задачку — читайте справку ChatKeeper-а, а я же со своей стороны пожелаю вашей группе процветать и здравствовать, успехов!

Источник: yellowweb.top

Имя бота отображается в контактных данных и в других местах.

Имя пользователя бота — это логин бота и представляет из себя короткое имя, которое будет использоваться в упоминаниях и ссылках на t.me . Обратите внимание, что в дальнейшем имя пользователя изменить нельзя! Имена пользователей (логины) состоят из 5–32 символов и нечувствительны к регистру, и могут включать только латинские символы, числа и символы подчеркивания. Имя пользователя бота должно заканчиваться на bot , например tetris_bot или TetrisBot .

Токен представляет собой строку типа 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw , которая требуется для авторизации бота и отправки запросов в API бота. Держите свой токен в безопасности и храните его, он может быть использован кем угодно для управления вашим ботом.

Пересоздание токена авторизации Telegram бота.

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

  • /mybots — возвращает список ваших ботов с удобными элементами управления для редактирования их настроек.
  • /mygames — делает то же самое для ваших игр

Команды редактирования Telegram бота:

  • /setname — изменить имя вашего бота.
  • /setdescription — изменить описание бота, текст до 512 символов, описывающий бота. Пользователи увидят этот текст в начале разговора с ботом, озаглавленный «What can this bot do?».
  • /setabouttext — изменить информацию о боте, более короткий текст до 120 символов. Пользователи увидят этот текст на странице профиля бота. Когда они делятся вашим ботом с кем-то, этот текст отправляется вместе со ссылкой.
  • /setuserpic — изменить фото профиля бота.
  • /setcommands — изменить список команд, поддерживаемых ботом. Пользователи будут видеть список команд всякий раз, когда они набирают ‘/’ в разговоре с вашим ботом. Каждая команда имеет имя (должно начинаться с косой черты ‘/’ , буквенно-цифровое значение плюс подчеркивание, не более 32 символов, без учета регистра), параметры и текстовое описание.
  • /deletebot — команда удаляет бота и освобождает его логин.

Команды изменения настроек Telegram бота.

  • /setinline — переключает встроенный режим запросов для бота.
  • /setinlinegeo — запрашивает данные о местоположении для предоставления встроенных результатов на основе местоположения.
  • /setjoingroups — переключатель, который отвечает за то, можно ли добавлять бота в группы или нет. Любой бот должен уметь обрабатывать личные сообщения, но если создаваемый бот не предназначен для работы в группах, то можно отключить этот режим.
  • /setprivacy — установить, какие сообщения будет получать бот при добавлении в группу. Если режим конфиденциальности отключен, то бот будет получать все сообщения. Мы рекомендуем оставить режим конфиденциальности включенным. Вам нужно будет повторно добавить бота в существующие группы, чтобы это изменение вступило в силу.

Команды управления играми.

  • /newgame — создать новую игру.
  • /listgames — получить список ваших игр.
  • /editgame — редактировать игру.
  • /deletegame — удалить существующую игру.

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

Ограничения и предупреждения о статусе Telegram бота.

Ответы на предупреждения.

По умолчанию вы будете получать только одно предупреждение на одного бота в час. Каждое предупреждение имеет следующие кнопки:

Отслеживаемые проблемы Telegram бота.

В настоящее время Telegram будет уведомлять о следующих проблемах:

  1. Too few private messages are sent compared to previous weeks: . Бот отправляет гораздо меньше сообщений, чем в предыдущие недели. Такие уведомления полезны для ботов в стиле новостной рассылки, которые рассылают сообщения без возможности получения ответов от пользователей. Чем больше значение, тем значительнее разница.
  2. Too few replies to incoming private messages. Conversion rate: . Бот не отвечает на все сообщения, которые ему отправляются (коэффициент конверсии запроса/ответа для бота был слишком низким по крайней мере в течение двух из последних трех 5-минутных периодов). Чтобы обеспечить хороший пользовательский опыт, пожалуйста, отвечайте на все сообщения, которые отправляются вашему боту.
  3. Too few answers to inline queries. Conversion rate: . Бот не отвечает на все встроенные запросы, которые ему посылаются, рассчитанные таким же образом, как и выше. Отвечайте на обновления inline_query , вызывая answerInlineQuery .
  4. Too few answers to callback queries. Conversion rate: или Too few answers to callback game queries. Conversion rate: . Бот не отвечает на все запросы обратного вызова, которые ему посылаются (с играми или без них), рассчитанные таким же образом, как и выше. Отвечайте на сообщения callback_query , вызывая answerCallbackQuery .

Обратите внимание, что функция оповещения о состоянии все еще тестируется и будет улучшена в будущем.

Источник: docs-python.ru

Как создать бота Telegram для разблокировки AD аккаунтов

В этой статье будет рассмотрен способ работы с Telegram через Powershell. Основная задача, которая будет решаться в статье, получение списка заблокированных пользователей и их разблокировка. Обычно, когда такие ситуации случаются, я редко нахожусь за компьютером и мне приходится делать подключение через телефон и RDP — это не удобно. С помощью описанного методы разблокировать пользователя можно будет в 2 клика.

Еще по теме:  Как в своей группе в Телеграмме посмотреть кто посмотрел

Логика, описанная в статье, применима и для других похожих сервисов. Например я планировал написать тесты для Exchange если пользователь сообщает, что у него проблемы с ящиком.

Навигация по посту

  • Для чего нужен API
  • Регистрация бота Telegram
  • Взаимодействие с API Telegram
  • Invoke-RestMethod
  • Получение сообщений
  • Отправка сообщений
  • Формирование списка пользователей
  • Отправка списка пользователей
  • Реализация команд

Для чего нужен API

У многих приложение (веб и локальных) есть понятие API, которое описывает процесс взаимодействия с программой и упрощает его. Например вам нужно узнать количество новых сообщений на своей почте и для этого вы открываете веб страницу. Веб страница весит 7Мб, а такую процедуру вы проделываете 100 раз в минуту. Этот способ плох и для вас и для сервера. Будет лучше, если вам будет отправлено только количество новых сообщений. Одна из таких проблем и решается с помощью API. У нас будет возвращена информация типа:

Формат выше называется JSON и это самый популярный способ общения с веб-API. Он похож на хэш-таблицы Powershell и для работы с ним есть отдельный командлет.

Умение разбираться и взаимодействовать с разными API — это весомый навык разработчиков и ,особенно, для системных администраторов.

Регистрация бота Telegram

Для ботов в Telegram есть свой публичный API и что бы им воспользоваться — вы должны пройти регистрацию. Это делается в несколько шагов.

Регистрация вашего персонального бота выполняется через специальный канал BotFather. Найти его вы можете через поиск (у него будет галочка):

Регистрация бота в Telegram через BotFather

В этом боте мы должны выполнить несколько команд. Выведем окно взаимодействия с ботом:

/start

Диалоговое окно BotFather в Telegram

Команда ‘/start’ поможет в случаях, если вы забудете названия ботов или захотите изменить какие-то данные.

Что бы создать бота пишем следующую команду:

/newbot

В Telegram нет ограничений на создания ботов и, если, вы совершите ошибку вы всегда сможете удалить бота и создать нового.

После этого нам будет предложено ввести название для бота. Это название, которое легче всего будет понять вам. Я назову его:

  • ‘fixmypc_ad_test’

После названия для бота нужно будет придумать название для канала, который он сможет обслуживать. Главным правилом названия — оно должно заканчиваться на ‘bot’. Учтите, что вашего бота можно будет найти через поиск и лучше не использовать идентифицирующие вас имена. Я буду использовать:

  • ‘fixmypc_ad_test_bot’

Регистрация бота в Telegram для Powershell

В выделенном фрагменте, под номером 4, ссылка на ваш канал. Под номером 5 — ваш персональный токен. Токен — это как пароль, если кто-то получит к нему доступ сможет управлять ботом. Этот токен нужно будет отправлять при каждом запросе Telegram.

Нажмите на ссылку во фрагменте 4 и нажмите кнопку /start что бы у вас было хотя бы 1 сообщение.

Взаимодействие с API Telegram

Большая часть взаимодействия с API ботов (есть и другие) сводится к обращению по 1 url. Этот url выглядит следующим образом и состоит из частей:

https://api.telegram.org/bot/

  • — это поле ‘пароля’ от вашего бота. Мы его получили раннее;
  • — это команда, которую мы отправляем к Telegram и получаем какой-то ответ.

Названия методов и способ обращения к ним заранее определен и описан в документации. Документация по работе с ботами описана по ссылке.

В рамках всей статьи у меня определены 2 переменных, которые составят часть Url для обращения к Telegram. В примерах вы можете не увидеть эти переменны, но они могут использоваться:

$token = «12345:sadasdasdasd» $url = «https://api.telegram.org/bot$token/»

Invoke-RestMethod

Как уже писалось выше — Telegram использует формат JSON. Такой формат не поддерживается в базовой реализации Powershell, но он содержит команду Invoke-RestMethod для преобразования JSON в hash-table.

В следующем примере мы соединим наш Url и токеном с методом getMe, который вернет базовую информацию о боте:

$result = Invoke-RestMethod -Uri $($url+’getMe’) $result

Выполнение запроса в Telegram через Powershell Invoke-RestMethod

$result.result $result.result.username

Получение информации о боте в Telegram через Powershell Invoke-RestMethod

Получение сообщений

После регистрации бота вы должны были нажать на кнопку /start, т.е. у вас должно быть хотя бы одно сообщение. Что бы получить его воспользуемся методом getUpdates:

$result = Invoke-RestMethod -Uri $($url+’getUpdates’) $result

Выведем информацию, которая находится внутри массивов:

$result.result # выводим информацию о каждом сообщении $result.result.message # выводим текст из каждого сообщения $result.result.message.text

Получение информации о сообщении в Telegram через Powershell Invoke-RestMethod

Обратите внимание, что у каждого пользователя бота свой собственный чат/канал с ним. Вы, как пользователь, не можете видеть сообщения другого пользователя, а он ваши. Бот же видит оба ваших чата и идентифицирует вас по идентификатору ‘chat.id’. В дальнейшем мы будем использовать этот идентификатор что бы понять от кого мы получили сообщение и кому будем отправлять ответ:

$result.result.message.chat.id

Получение идентификатора сообщения Telegram через Powershell Invoke-RestMethod

У меня 2 ‘chat_id’ так как я отправлял 2 сообщения. Для ответа нужно только 1 — и так его можно получить:

$result.result.message.chat.id[-1]

Отправка сообщений

Методы для получения данных от API могут нуждаться в дополнительных, обязательных, параметрах. Эти параметры описаны в документации. Для отправки сообщений используется метод ‘sendMessage’ и в документации для него описаны следующие обязательные параметры (в колонке Required):

Описание API ботов Telegram

В предыдущем примере мы уже получили chat.id и должны его передать для отправки сообщения. Текст сообщения вы можете изменить на свое усмотрение. Все параметры и их значения помещаются в хэш таблицу, а затем в -Body команды Invoke-RestMethod :

Отправка сообщения в Telegram через Powershell Invoke-RestMethod

Получаем заблокированных пользователей AD

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

Get-ADUser -Filter * -Properties LockedOut | where LockedOut -eq True

Получение заблокированного пользователя AD в Powershell

Что бы такой пользователь смог зайти в систему он должен быть разблокирован и ему должен быть установлен новый пароль. В этой статье будет рассмотрен одинаковый пароль во всех случаях — ‘Zx12345’:

Еще по теме:  Как зайти на ссылку в Телеграмме если срок ссылки истек

$SID = (Get-ADUser -Filter * -Properties LockedOut | where LockedOut -eq True).SID $new_password = ‘Zx12345’ Unlock-AdAccount -Identity $SID Set-ADAccountPassword -Identity $SID -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $new_password -Force)

Снятие блокировки пользователя AD и установка пароля с Powershell

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

Вам так же будет интересно:

Как отправлять письма используя Powershell Send-MailMessage

Связываем Telegram и AD

Все сообщения, которые будут посланы пользователями боту, можно разделить на обычный текст и команды. Команды — это то что мы должны обработать. Удобнее всего сделать команды через Telegram кнопки или ссылки. Их удобство в том, что мы можем не печатать текст, а просто нажать на эту команду. В этой статье будут рассмотрены только ссылки. Они начинаются со знака ‘/’ и не могут содержать символы пробелов:

Команды Telegram

# Ожидаем получить список заблокированных пользователей /get_user # После выполнения предыдущей команды # будет выводиться текст с информацией и командами Unlock Anna Petrovna /0 Unlock Елена Патрушева /1 Unlock Игорь Пелевен /2

Команды Telegram

Каждый идентификатор типа /0, /1, /2 будет соответствовать индексу значения в массиве (массив содержащий пользователей). Создадим функции, которые позволят сделать это.

Формирование списка пользователей

Нам нужно создать функцию, которая получила бы заблокированных пользователей и создала бы из них массив вида:

В примере выше, Anna Petrovna, будет соответствовать индексу 0, а Патрушева — 1. Нужно так же учитывать, что заблокированных пользователей может не быть. Создадим функцию получения пользователей:

Получение списка заблокированных пользователей AD для Telegram

С помощью следующего скрипта мы получим заблокированных пользователей использую созданный командлет и создадим текст для отправки в Telegram (который мы спланировали раннее):

$users = Get-LockedUsers # текст для отправки $full_text = » foreach ($user in $users)< $name = $user.Name # Получаем индекс элемента в массиве $index = $users.indexOf($user) # формируем сообщение для конкретного пользователя с новой строкой # и добавляем все к полному тексту $full_text += «Unlock user $name /$index`n» >

Создание текста с заблокированными пользователей AD для Telegram

Отправка списка пользователей

Создадим функцию с помощью которой мы будем отправлять сообщения. Как уже и описывалось раньше для отправки сообщений нужно указать текст и chat_id. Эти данные мы тоже будем передавать через функцию. В примере ниже не видно переменных $token и $url, подразумевается что вы уже объявляли их раннее:

Отправка текста с заблокированными пользователей AD для Telegram

В выделенном фрагменте видно, что у нас получилось реализовать вывод сообщений в планируемом формате.

Реализация команд

Теперь нам нужно создать команды, которые описывались ранее:

  • Команду на получение списка заблокированных пользователей — /get_user;
  • Команду на разблокировку пользователей — они у нас уже выводятся в виде /1, /2 и т.д.

Что бы суметь получить команды мы должны создать вечный цикл. Этот вечный цикл, раз в 2 секунды, будет выполнять запрос к API telegram и получать последнее сообщение. Выполнять запросы чаще чем раз в 2 секунды не рекомендуется, т.к. у Telegram может быть на это ограничение. Получить последнее сообщение из чата можно так:

Получение последнего сообщения Telegram через Invoke-RestMethod Powershell

У пользователей есть идентификаторы чатов (chat_id), а у чатов есть идентификаторы сообщений (message_id). В примере выше мы вернули последнее сообщение из всех чатов (с помощью offset=’-1′). Последнее сообщение не значит «новое» и нам нужно научится их различать. Один из способов сделать это, при запуске программы, запомнить последнее сообщение написанное в чате. Каждые 2 секунды мы будем повторять запрос и сравнивать идентификаторы сообщений (message_id). Если они отличаются, то значит пришло новое сообщение и мы заменяем старый message_id на новый и выполняем еще какую-то логику:

Получение сообщений Telegram через Invoke-RestMethod Powershell

Теперь нам нужно понять начинается ли сообщение на ‘/’ (т.е. является командой). Если это команда — мы определяем какая именно (разблокировать или получить). Ниже уже готовый скрипт, в котором объедены предыдущие части. Добавлены моменты, которые могли бы вызвать недопонимание:

  1. Если нет заблокированных пользователей (массив пустой) — будет отправлено сообщение «Нет заблокированных пользователей»;
  2. Если пользователь успешно разблокирован (не было критичных ошибок) — «Пользователь $($user.Name) разблокирован».

Бот по разблокировки пользователей Telegram через Powershell

Безопасность и возможные проблемы

Работая с ботом вы должны понимать, что он публичный и его может найти и использовать каждый. Есть несколько ограничения доступа. Самый популярный способ — задать явно chat_id и исполнять команды только от него. Так как это персональный идентификатор, который присваивается Telegram каждому пользователю, его будет тяжело подделать. Вообще, вместе с сообщением, возвращается несколько идентификаторов, каждый из которых вы можете использовать:

$result = Invoke-RestMethod -Uri $($url+’getUpdates’) $result.result.message

Идентификаторы пользователя Telegram с Powershell Invoke-RestMethod

Чтобы работать с определенным ChatID — нужно будет исправить скрипт в двух местах: в переменной $MessageID и в командлете Get-TelegramMessage:

Учтите, что скрипт читает сообщение раз в 2 секунды и если вы отправите в этот промежуток 2 сообщения — будет прочитано только последнее.

Второй способ — это создание приватного канала, в который будет добавлен этот бот. Это другой API и он не рассматривается в этой статье.

Скрипт изначально не делался для работы более чем с 1 пользователем. Это связано с переменной chatid, которая идентифицирует только одного пользователя. Если вам нужно реализовать приватный доступ более чем 1 пользователю вы должны реализовать следующее:

  1. Объявить массив с ChatID пользователей, которые могут работать через бот;
  2. При проверке последнего сообщения, в Get-TelegramMessage, добавить проверку на ChatID;
  3. Если проверка успешная, командлет должен возвращать не только текст сообщения, но и ChatID. Этот ChatID и станет основным для отправки ответа.

У меня нет возможности проверить работу для 2 пользователей, но исправления в этих местах должны сработать:

При этом проблема с 2-я сообщениями за 2 секунды останется.

Этот скрипт может дорабатываться и его последнюю версию вы можете посмотреть на моем github.

Источник: fixmypc.ru

Рейтинг
( Пока оценок нет )
Загрузка ...