Подробная инструкция о том, как создать бота для предоставления демо-доступа и контроля подписок на приватный канал в Telegram.
Александр Волков
Руководитель отдела разработки программного обеспечения компании «Синимекс»
Telegram набирает популярность не только у пользователей, но и у разработчиков. Многие создают там свои каналы и ботов. В этой статье мы создадим приватный канал с фасадом для него — ботом.
Возможности бота
Через бота можно будет:
- получить полную информацию о канале;
- получить демо-доступ на канал. Пользователь в автоматическом режиме получит ссылку на вступление в приватный канал. Через n дней демо-доступа пользователь будет удалён из канала;
- выдать полный доступ для пользователей. Пользователь сможет отправить данные для получения полного доступа. Данные могут быть проверены как в автоматическом режиме, так и в ручном — самим администратором. По итогам пользователю выдаётся полный доступ.
Дополнительно к этому мы создадим интерфейс на React для управления подписками и сбором аналитики по каналу. Особенность этого решения — простота. Время на его создание — около 4 часов. Все компоненты решения для удобства будут развёрнуты в docker-контейнерах. Схема нашего решения будет выглядеть так:
Создание бота
Начнём с самого простого шага — создания бота в Telegram. Для этого достаточно написать команду /newbot боту по созданию других ботов BotFather и следовать инструкциям:
После успешного создания бота вы получите сообщение:
Также появится токен, который мы будем использовать для подключения к боту из своего приложения.
Бот для приватного канала с информацией о самых вкусных плюшечках и пирожочках создан. Далее создадим сам канал и добавим туда нашего бота в качестве администратора.
Создание базы данных
Для простоты решения поднимем PostgreSQLв docker-контейнере:
docker network create buns-net docker run -d —network=»buns-net» —name bot-postgres -e POSTGRES_PASSWORD=Pass2020! -p 5432:5432 postgres
Контейнер запущен, БД готова к работе.
Для минимальной аналитики и контроля подписок нам хватит одной таблицы. Заполним её модель и далее в миграции lequibase создадим:
Создание бэкенда
Перейдём на Spring Initializr и сгенерируем каркас бэкенд-приложения. Достаточно выбрать следующие библиотеки:
Развернём сгенерированный проект в среде разработки и добавим туда зависимость для работы с Telegram:
compile «org.telegram:telegrambots-spring-boot-starter:5.0.1»
Также добавим библиотеку для мапинга, которая нам пригодится при мапинге сущностей БД в REST-модели:
compile(«net.rakugakibox.spring.boot:orika-spring-boot-starter:1.9.0»)
Создадим миграцию для таблицы, добавим описание подключения к БД и запустим приложение:
1-add-tables.yaml databaseChangeLog: — changeSet: id: 1-add-tables author: avolkov changes: — createTable: tableName: subscriber columns: — column: name: id type: bigint autoIncrement: true constraints: primaryKey: true nullable: false — column: name: name type: varchar(255) constraints: nullable: true — column: name: login type: varchar(255) constraints: nullable: true — column: name: telegram_id type: varchar(100) constraints: nullable: false — column: name: start_subscribe type: timestamp constraints: nullable: false — column: name: end_subscribe type: timestamp constraints: nullable: false — column: name: type_subscribe type: varchar(50) constraints: nullable: false — column: name: enable type: boolean constraints: nullable: false db.changelog-master.yaml databaseChangeLog: — include: file: db/changelog/1-add-tables.yaml
application.yaml server: servlet: context-path: /api spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://bot-postgres:5432/postgres — при локальной разработке поменять на localhost username: postgres password: Pass2020! jpa: properties: hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect hibernate.globally_quoted_identifiers: true
После успешного запуска приложения накатится миграция и создастся таблица:
Таблица создана, приложение успешно запустилось. Теперь можно приступить к описанию Data Access Layer. Для этого опишем сущность, репозиторий и сервис:
Подключение к API Telegram
Чтобы можно было получать данные из бота в наше приложение, достаточно унаследовать от абстрактного класса org.telegram.telegrambots.bots.TelegramLongPollingBot и реализовать три метода:
public String getBotUsername(); // логин бота, который устанавливался при создании бота public String getBotToken(); // токен, полученный при создании от BotFather public void onUpdateReceived(Update update); // метод срабатывает каждый раз, когда боту отправляется сообщение
Добавим в application.yaml данные бота, которые получили от BotFather:
telegram: name: bot_login token: 164024384:AAFHwer2342pVF3zm_wZ45454554JVr_I chanel-id: -1001415979632 — id приватного канала, куда будет даваться доступ
Реализуем поддержку 5 команд:·
- /info — запрос информации о боте и канале;
- /start — такая же, как и info. Нужна для первого сообщения с ботом;
- /demo — получение демо-доступа на канал;
- /access — запрос на получение информации о полном доступе;
- /success — запрос на получение полного доступа.
Чтобы всеми этими командами было удобно пользоваться, реализуем их в виде кнопок, используя org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup.
Готово! Теперь бот умеет обрабатывать следующие команды.
Как получить доступ?
Хочу демо-доступ на 3 дня.
После получения демо-доступа информация об этом сохраняется в БД. При повторном запросе на демо-доступ пользователю отобразится ошибка:
Если пользователи могут получать временный доступ, то появляется задача проверки истечения этого доступа. К сожалению, не получится создать планировщик, который будет раз в день отписывать пользователей с истекшим доступом. Поэтому надо реализовать поддержку ещё одной команды для чистки подписчиков.
Чтобы этой командой мог пользоваться только администратор, его Chat ID надо добавить в application.yaml. Далее этот идентификатор будет использоваться при проверке, от кого пришла команда и имеет ли этот пользователь права на выполнение этой команды.
telegram: name: bot_login token: 164024384:AAFHwer2342pVF3zm_wZ45454554JVr_I chanel-id: -1001415979632 — id приватного канала, куда будет выдаваться доступ support: chat-id: 14334538544
Дополнительно к этому требуется реализовать команду выдачи полного доступа. Класс поменяется следующим образом:
Появилась обработка команд от администратора.
Если пользователь отправит сообщение message please, то администратору от бота придет сообщение:
После этого администратор может отправить боту команду на выдачу прав пользователю:
И пользователю от бота придет сообщение:
Таким образом, мы реализовали следующие возможности для пользователя:
- пользователь может узнать подробную информацию о канале и понять, подходит ли он ему;
- пользователь может получить временный доступ к каналу;
- пользователь может получить информацию о дальнейших действиях для получения полного доступа к каналу;
- пользователь может отправить запрос на предоставление полного доступа.
В свою очередь, у администратора канала появились следующие возможности:
- проверить предоставляемые пользователем данные для полного доступа и выдать полный доступ;
- очистить канал от пользователей с истекшим доступом.
Для удобства развёртывания упакуем наше приложение в Docker и развернём. Добавим в build.gradle:
bootJar
FROM openjdk:8-jdk-alpine COPY build/libs/buns.jar buns.jar EXPOSE 8081 ENTRYPOINT [«java»,»-jar»,»/buns.jar»]
Далее выполним следующие команды для создания образа и запуска его в докере:
Создание фронтенда
После того, как мы создали handler для обработки команд бота, хочется визуально контролировать подписки и смотреть графики по приросту подписок в разрезе месяца. Для этого создадим отдельное приложение на React с использованием Ant Design. Выполним команду:
npx create-react-app my-app
После этого у нас будет сгенерировано приложение с минимальной функциональностью. Однако требуется установить ещё несколько библиотек:
После этого основной компонент надо изменить на:
App.js import ‘./App.css’; import < QueryClient, QueryClientProvider >from ‘react-query’ import SubscriberTable from «./SubscriberTable»; import React from «react»; import ‘antd/dist/antd.css’; const queryClient = new QueryClient(); function App() < return > ; > export default App;
И добавить новый компонент:
Дополнительно к этому добавить функции для выполнения запросов:
axiosInstance.js import axios from ‘axios’; const host = process.env.REACT_APP_API_ENDPOINT; export const baseUrl = `http://localhost:8080/api/`; const instance = axios.create(< baseURL: `$`, withCredentials: true, headers: < ‘Cache-Control’: ‘no-store, no-cache, must-revalidate’, Pragma: ‘no-cache’, >, >); instance.defaults.headers.common[‘Accept-Language’] = ‘ru-RU, ru’; instance.interceptors.request.use(config => < return < . config, url: encodeURI(config.url), >; >); export default instance;
subscribersApi.js import * as log from ‘loglevel’; import instance from ‘./axiosInstance’; const SUBSCRIBER_PATH = ‘/subscribers’; const SubscribersApi = < name: ‘SubscribersApi’, async getAll() < return instance .get(`$`, < auth: < username: ‘admin’, password: ‘admin’ >>) .then(response => < log.info(`All Lines`, response); return response.data; >) .catch([]); >, async getStatistic() < return instance .get(`$/stat`) .then(response => < return response.data; >) .catch([]); >, >; export default SubscribersApi;
Это личный проект, аутентификация зашита, можно с ней особо не заморачиваться. Также в бэкенд требуется добавить конфигурацию Spring Security:
В итоге после выполнения команды npm start откроется http://localhost:3000/ с отображением списка подписок и статистикой. Статистику можно выводить в любом разрезе. В текущей реализации показывается, в каком месяце сколько полных подписок было оформлено.
А теперь для удобства упакуем и развернём UI в docker-контейнере. Для этого создадим DockerFile:
Dockerfile FROM nginx:1.19.5 COPY build /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/ RUN chown -R nginx:nginx /var/cache/nginx /etc/nginx/ /var/run/ USER nginx EXPOSE 80 ENTRYPOINT [«nginx», «-g», «daemon off;»]
nginx.conf worker_processes 1; pid /tmp/nginx.pid; events < worker_connections 1024; >http < proxy_temp_path /tmp/proxy_temp; client_body_temp_path /tmp/client_temp; fastcgi_temp_path /tmp/fastcgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; scgi_temp_path /tmp/scgi_temp; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main ‘$remote_addr — $remote_user [$time_local] ‘ ‘$server_name to: $proxy_host [$upstream_addr] «$request» ‘ ‘$status $body_bytes_sent «$http_referer» ‘ ‘»$http_user_agent» «$http_x_forwarded_for»‘; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; >
И выполним команды для сборки и развертывания:
Вывод
Используя Spring Вoot, React и Docker, можно быстро создать небольшую систему для контроля подписок и подписчиков на канале в Telegram. Исходный код двух приложений можно посмотреть здесь и здесь.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Источник: tproger.ru
Существуют ли боты в Телеграме, которые платят за задания?
Я не знаю людей, которые не пробовали бы себя в заработке в интернете. В моём случае всё несколько серьёзнее, чем у моего круга общения – я начала с мелких заданий на несколько копеек на Сеоспринт и сейчас пишу о своём опыте, как вы понимаете, тоже за деньги. Поэтому вы можете мне доверять, когда я говорю, что боты, которые платят в Телеграме – вполне реальный, но сомнительный способ заработка. Почему? Поговорим об этом.
За что платят боты в Телеграм?
Выше я уже упоминала Сеоспринт. Это такая площадка, которая генерирует трафик и контент для сайтов, площадок обзоров и социальных сетей. Да, они реально дают деньги, например, за посещение сайта. Только вот на вывод вы точно поставите не миллионы – максимальная стоимость задания, которая мне попадалась – 5 рублей. Стоит оно того? Сомневаюсь. И боты для заработка в Телеге недалеко ушли от площадок, аналогичных Сеоспринт. Вы выполняете задания, а они платят вам деньги, которые можно вывести на кошелёк или телефон. Задачи причём разные: от вас может требоваться ввести капчу или, например, подписаться на канал. Неизменны лишь две вещи: мизерный доход и огромное количество мошеннических ботов.
О заработке без вложений в Телеграме читайте в нашем специальном материале.
Подборка Телеграм-ботов, которые платят
Платит ли капча-бот в Телеграм? Этот вопрос частый, ведь вы просто вводите комбинацию символов и получение, хоть маленькой, но прибыли обеспечено. Честно говоря, мне ещё не попадались боты, которые платят в Телеграме за капчи. Я не ручаюсь, что это миф или влажные фантазии людей, которые видят в мошеннических ботах ставку в 20 рублей за капчу. Я просто говорю о том, что вы рискуете, надеясь на выплаты с таких сомнительных ресурсов. Вот заработок на просмотрах и подписках вполне реален, поэтому я и дам вам небольшой список вариантов, чтобы вы больше не гуглили, какие боты реально платят в Телеграме. Они, к тому же, могут быть полезны, если вы захотите приобрести себе накрутку.
Здесь можно заработать как на просмотрах постов, так и на подписках на каналы. Выплаты, судя по отзывам пользователей, есть, заработок же составляет 1 копейку за просмотр или 10 за подписку. В общем, не много. Жалко, что не белорусских рублей.
Здесь «гонорар» уже повыше и составляет 25 копеек за подписку. Так что, получение прибыли будет идти эффективнее.
Расценки здесь такие же, как и в первом нашем варианте. Так что, сказать на его счёт мне нечего. Попробуйте и этот вариант.
Как вывести деньги с Телеграм-ботов?
Теперь пара слов о том, как выводить заработанное. Хочу сразу вас предостеречь: никаких денег вы никому не должны скидывать. Если вас просят оплатить какой-либо «шлюз», знайте: это обман. Вы наткнулись на мошенников и потеряете не только заработанное сейчас, но и вполне реальное. Поэтому будьте внимательнее. Обычно деньги выводятся на Яндекс.Кошелёк или Киви. Реже – на карту или телефон. Алгоритм действия я описывать не буду, потому что чаще всего алгоритм один: кнопка «Баланс» в меню, затем – «Вывод» или «Вывести», выбираете, куда хотите получить деньги, и вводите реквизиты. Всё. Никакой информации больше не надо. Также никаких паролей от кошельков или карт, разумеется, давать не надо. С кодом с оборотной стороны карты тоже будьте внимательнее.
Сколько можно заработать, выполняя задания Телеграм-ботов?
Как вы думаете, сколько можно получить с таких ботов? Я поставила эксперимент. На одном боте задания кончились, когда на моём счету было 3 рубля, а на другом – 1,5. Минимальный вывод в одном случае 30 рублей, во втором – 10. Как думаете, как долго мне нужно ждать заданий, чтобы эти деньги получить? Долго. Так что, не надейтесь сделать ввод капчи и подписки основным видом заработка. Даже если у вас будет 10 профилей и 20 ботов, вы не обеспечите себе и минимальный прожиточный минимум.
Смотрите также о более эффективных способах заработка в Телеграме в статье по ссылке.
Заключение
Итак, боты, которые платят в Телеграме, существуют. Только вот чаще всего заработать минимальный вывод проблематично – вы скорее университет закончите, чем заработаете первую сотку от этих сервисов. Поэтому не стоит тратить на это время.
Читайте далее:
Как не нужно зарабатывать деньги в Телеграм?
Заработок в ВКонтакте на лайках, репостах и подписках: в выигрыше даже начинающий!
Проверенные сервисы для накрутки ботов в Телеграм
Заработок на играх ВК: с удовольствием и пользой
Как, где и сколько платят за подписчиков в Инстаграме: реальная история о заработке на фолловерах
Источник: smmx.ru
Осторожно. Развести теперь может даже бот в Telegram
Изобретательности интернет-мошенников можно только позавидовать. Методы у них почти каждый день новые, а вот цель всегда одна — получить доступ к вашим личным данным. Очередная новинка сезона — использование поддельных ботов в Telegram для верификации аккаунта. Ненастоящий бот предлагает вам пройти по указанной ссылке, иначе грозит заблокировать аккаунт.
С такой ситуацией столкнулся корреспондент РИА «Новости», а эксперты пояснили, в чём фишка нового развода. Бот, схожий с официальным от мессенджера, информирует вас, что аккаунт не прошёл верификацию. Заодно мошенники решают вас припугнуть: мол, если за 6 часов не пройдёте по указанной ниже ссылке, то аккаунт заблокируем насовсем. Это толкает жертву как можно быстрее выполнить указания.
Специалист по кибербезопасности «Лаборатории Касперского» Виктор Чебышев объяснил, что это типичный фишинг . Чтобы не попасться на удочку злоумышленников, стоит обращать внимание на оформление официальных аккаунтов и синюю галочку. Отличия обязательно будут.
Плюс аккаунты от сервисов вы не можете заблокировать или добавить в список контактов — сообщения там формируются автоматически. Если эти функции доступны, значит, вы имеете дело с мошенниками.
Владельцам Telegram-аккаунтов лучше всего включить двухфакторную аутентификацию. Она потребует не только пройти верификацию, но ещё и ввести пароль. Из-за этого шансы преступников что-то украсть сокращаются.
Ещё не стоит забывать, что можно закрыть «активные сеансы» в настройках, если вы обнаружили там подозрительное устройство.
Вот ещё одна схема, когда аферисты грозят заблокировать ваш аккаунт. Так что будьте бдительны. О том, чем может быть полезна двухфакторная идентификация, «Секрет» рассказал тут.
Источник: secretmag.ru