Если вы когда-либо пользовались онлайн-форумом, вы, возможно, видели, что иногда есть способы публиковать сообщения не только непосредственно на форуме, но и, например, через электронную почту.
В данной статье мы создадим общедоступную доску объявлений. Особенностью этой доски будет то, что пользователи смогут посылать свои объявления Telegram-боту, не заходя на сам сайт.
Сообщения будут просто содержать текст, но мы предоставим дополнительную информацию о том, как использовать другие данные, например, имена пользователей. Реализацию этого мы оставим вам в качестве упражнения по расширению функциональности.
Необходимые приготовления
Для получения максимальной пользы от этого руководства читателю нужно:
- знать язык программирования Python
- иметь аккаунт в Телеграм и установить клиентскую часть на свой компьютер
- иметь аккаунт в Replit или создать его прямо сейчас.
Также было бы полезно, если бы вы были знакомы с базой данных Replit, но это не критично.
Обзор на интересный скрипт телеграмм бота
Регистрация бота
Для начала нам нужно зарегистрировать нашего бота в Telegram, чтобы сгенерировать учетные данные, которые мы будем использовать для подключения к Telegram API. Каждый бот должен быть привязан к конкретной учетной записи пользователя. Это можно сделать с помощью официального управляющего бота Telegram под названием «BotFather».
Для активации BotFather нажмите на кнопку Start :
Для начала рабочего процесса создания нового бота мы должны отправить в BotFather команду /newbot .
Бот у нас спросит следующие данные:
Замечание: полезно иметь короткое имя пользователя, чтобы людям было удобно его вводить. Особенно, если вы планируете добавить встроенный режим.
Как только мы ответим на все вопросы, BotFather отправит нам наш токен аутентификации, который будет выглядеть примерно так:
Обратите внимание, что вся строка (до двоеточия и после) является токеном.
Создание интерфейса бота
Теперь мы можем приступить к написанию той части программы, которая обрабатывает запросы из Telegram. Создадим новую repl-среду, а в качестве языка программирования выберем Python.
Наш бот должен взаимодействовать с Telegram. Для этого нам понадобится доступ к Telegram REST API. Есть много способов сделать это, но в рамках данной статьи мы будем использовать удобную библиотеку, обернутую обернута вокруг API.
Прежде чем мы продолжим, нам нужно сделать наш токен доступным для использования нашим ботом. Создайте переменную среды под названием TOKEN , щелкнув значок замка на боковой панели, как показано ниже, и вставьте свой токен бота, который вы получили ранее, например 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5 :
Это гарантирует, что наш токен доступен как переменная среды и что к нему не смогут получить доступ люди, имеющие доступ к нашей среде repl (в бесплатной версии она открыта для всех, — прим. переводчика).
Создание скелета бота
Теперь, когда все настроено, мы можем приступить к программированию! Начнем с нашего файла main.py :
import os from telegram import Update #upm package(python-telegram-bot) from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext #upm package(python-telegram-bot) def help_command(update: Update, context: CallbackContext) -> None: htext = »’ Welcome Send a message to store it. Send /fetch to retrieve the most recent message»’ update.message.reply_text(htext) def main(): updater = Updater(os.getenv(«TOKEN»)) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», help_command)) dispatcher.add_handler(CommandHandler(«help», help_command)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
Сначала мы импортируем модуль os , чтобы получить доступ к токену как переменной окружения.
Затем мы импортируем некоторые классы из библиотеки Telegram.
Комментарии, начинающиеся с #upm , не являются обязательными. Они используются Replit для загрузки правильного пакета. В общем случае это не нужно, но здесь необходимо, потому что подобных библиотек Telegram очень много.
Функция help_command запускается всякий раз, когда пользователь отправляет нам команду /start или /help . Команда /start также выполняется автоматически, когда новый пользователь запускает ваш бот (как мы ранее запускали BotFather ). Бот будет знать, как использовать эту функцию, потому что мы сообщим ему об этом позже в теле функции main .
В функции main мы инициализируем экземпляр класса updater , который использует наш токен.
updater = Updater(os.getenv(«TOKEN»))
Updater — это класс, который будет постоянно проверять Telegram на наличие новых сообщений в нашем боте.
Когда updater получает новое сообщение, он передает его в класс dispatcher . Тот проверяет, есть ли у нас подходящий обработчик для данного сообщения. Как уже упоминалось выше, нужно задать обработчик для команд /start и /help . Мы cделаем это при помощи функции add_handler , например:
dispatcher.add_handler(CommandHandler(«start», help_command))
dispatcher.add_handler(CommandHandler(«help», help_command))
Чтобы не усложнять задачу, команда /start и команда /help имеют здесь один и тот же обработчик, но при желании для обработки каждой из них вы можете использовать разные функции.
Затем нам нужно сказать классу updater , чтобы он начал проверку новых сообщений. Мы это сделаем при помощи следующей строки.
updater.start_polling()
Важно знать, что start_polling — это неблокирующая функция. Это означает, что код в ней не прекращает выполнение. Он будет исполняться, пока программа не завершится.
Другими словами, если мы оставим это в качестве последней строки функции main , код будет выполнен, а затем немедленно завершится, потому что больше ничего не блокирует его. Поэтому, чтобы наш бот не прекращал прослушку, мы используем строку updater.idle() , чтобы заблокировать скрипт, пока мы слушаем.
Функционал для логирования
Согласно тексту справки, бот должен уметь делать две вещи:
- Если вы отправляете сообщение боту, он должен где-то его сохранить.
- При отправке боту команды /fetch он должен отправить вам последнее сообщение.
Для этого мы будем использовать встроенную в Replit базу данных ключ-значение. Начнем с импорта API:
from replit import db
Модуль db — это объект, который ведет себя как словарь, но сохраняет свое содержимое между запусками. Он также сериализует свои ключи в виде строк.
Отправка сообщений в Telegram из PHP с обычного аккаунта в обход ограничений Bot API
Отправлять сообщения в Телеграм от бота очень просто, но есть крайне неудобная проблема: из-за ограничений Telegram Bot API бот не может писать первым. То есть, сначала пользователь, которому вы собрались что-нибудь отправить, должен первым написать вашему боту любое сообщение. Это ограничение вполне разумно и предотвращает спам сообщениями от ботов, но очень мешает честным людям. Например, отправлять сервисные сообщения с информацией о заказе в интернет-магазине.
Решение этой проблемы только одно: не использовать ботов. Придётся всё делать с обычного аккаунта.
Копаться в подробностях телеграмовского протокола MTProto не нужно, как оказалось, всё уже сделано до нас. Для PHP существует чудесная библиотека MadelineProto. Её мы и будем использовать, ниже пошаговая инструкция.
1. Регистрируем аккаунт, с которого будет осуществляться отправка сообщений. Можно использовать существующий (но лучше сделать новый).
2. Нужно зарегистрировать приложение. Просто формальная процедура. Для этого идём на сайт https://my.telegram.org/, логинимся через ваш аккаунт в Телеграме. Лучше всего, чтобы этот аккаунт не совпадал с акаунтом из пункта 1. Далее переходим на страницу https://my.telegram.org/apps, заполняем поля (платформа — Web, остальное не так важно), отправляем форму. Всё готово — приложение создано. Вас перенаправит на страницу настроек, запоминаем оттуда поля App api_id и App api_hash, остальное не нужно.
3. Теперь нужно установить библиотеку MadelineProto. Делается это очень легко. Создаём на веб-сервере папку, в неё помещаем php-файл (например, index.php) со следующим содержимым:
include ‘madeline.php’; $MP = new danogMadelineProtoAPI(‘session.madeline’); $MP->start();
Созданный скрипт должен иметь права на запись в папку. Библиотека требует PHP 7, но у меня всё завелось на PHP 5.6.
4. Запускаем созданный php-файл из браузера. На первом шаге выбираем Manually, затем вставляем значения полей App api_id и App api_hash из пункта 2, ждём, выбираем User, указываем телефонный номер акаунта из пункта 1, получаем на него смс, вводим код, готово — вы залогинились в Телеграме из вашего веб-приложения.
5. Переходим непосредственно к программированию. Весь код мы будем дописывать в имеющийся php-файл из пункта 3. У библиотеки MadelineProto есть хорошая документация, но некоторые моменты не очень понятны с первого раза.
Для отправки сообщений нужно использовать метод sendMessage :
$MP->messages->sendMessage([‘peer’ => », ‘message’ => »]);
Здесь peer — ID получателя, message — текст сообщения. И вот тут есть загвоздка: а где, собственно, взять айдишник пользователя, которому мы будем слать сообщения, если мы знаем только номер телефона?
Для этого проще всего добавить телефон получателя во внутренний список контактов. Делается это так:
$contact = [‘_’ => ‘inputPhoneContact’, ‘client_id’ => 0, ‘phone’ => ‘+79xxxxxxxxx’, ‘first_name’ => », ‘last_name’ => »]; $import = $MP->contacts->importContacts([‘contacts’ => [$contact]]); // $import[‘imported’][0][‘user_id’] — ID пользователя
Здесь мы указываем phone — номер телефона, first_name и last_name — имя и фамилия (можно указать любые, это не важно). В переменной $import[’imported’][0][’user_id’] будет содержаться ID нашего получателя. Хорошо бы его куда-нибудь сохранить у себя, чтобы можно было использовать дальше.
Использовать данный метод для рассылки спама бесполезно — аккаунт довольно быстро заблокируют по жалобам пользователей.
Источник: kirkizh.ru
Как установить бота для telegram на VPS/VDS?
Всем привет! В этой статье хочу рассказать как установить бота для telegram.
И так для начала нам нужен уже готовый и 100% рабочий скрипт бота.
Спойлер: 110% Рабочие боты:
Где купить VPS/VDS?
Я рекомендую Fornex или можете выбрать варианты подешевле в этой ветке — покупает лайтовый вариант за 350 рублей или вы можете взять на тест за 50 рублей на 4 дня.
Что нужно для работы с VPS?
Нам нужна программа FileZilla для того чтобы загружать и редактировать наши файлы скрипта.
После покупки сервера нам на почту придут данные ip(host):loginassword — нам нужно открыть filezilla и вставить:
HOST: IP — который пришел на почту.
Имя пользователя — логин.
Пароль — пароль.
Порту оставляем пустым или указываем по умолчанию 21. и жмем быстрое соединение. Если при первом разе не подключилось — нужно выбрать SFTP подключение.
Дальше переходим в папку root и загружаем файлы которые скачали с сайта. Именно файлы не архив.
Дальше для того чтобы заставить наш скрипт работать на сервере нам еще нужна программа Putty.
Дальше отрываем патти и в поле вставляем наш ip и жмем open.
В открывшемся окне вводим логин потом пароль который пришел нам на почту (обычно логин root и еще, когда вводишь пароль он не отображается). Должно получиться так:
Дальше нам нужно установить python3 на сервер, для этого вписываем команды:
sudo apt update sudo apt install rar sudo apt install screen sudo apt install python3.9 sudo apt-get install python3-pip sudo apt-get install python3-dev sudo apt-get install python3.9-dev
Для определенного скрипта нужны библиотеки (модули) и устанавливаем их командой:
pip3 install name_module ( к примеру pip3 install aiogram ). Если не хватает какого-то модуля консоль будет выдать вам ошибку error no module name_module
Когда все модули установлены мы можем запустить наш бот командой python3 name.py обычно файлы для запуска называются main.py или app.py т.е:
python3 main.py
Думаю будут вопросы поэтому задавайте их в этой теме
Источник: hack-web.com