Урок 1. Быстрый старт. Эхо-бот

Подготовка к запуску

Перед началом убедитесь, что у вас установлен интерпретатор языка Python версии не ниже 3.6 (актуальные версии посмотреть и скачать можно здесь). Первый и второй уроки будут проведены на версии 3.6.4, версия библиотеки aiogram 1.0.4, проверено на версии 1.1.

Этот пункт можно пропустить, если вы не новичок, и уже всё проверили.

Проверить версию интерпретатора можно следующим образом (справедливо для большинства систем): python --version. Будет возвращено Python 3.6.4 . Если у вас установлено несколько версий интерпретатора, будет необходимо указать версию: python3 --version.

Далее устанавливаем библиотеку командой pip install -U aiogram. Если у вас установлено несколько интерпретаторов (например 2 и 3), то необходимо явно указать версию pip: pip3 install -U aiogram. Если у вас установлено несколько версий 3 (например 3.4, 3.5, 3.6), то обращаемся к необходимому интерпретатору командой <python interpreter> -m pip ..., то есть в данном случае python3.6 -m pip install -U aiogram. Проверить версию библиотеки можно командой pip freeze | grep aiogram(тут так же не забудьте правильно указать версию pip), вернется aiogram==1.0.4 . Возможно, у вас в Windows не будет работать команда grep, тогда используйте просто команду pip freezeи убедитесь в присутствии aiogram в результате выполнения команды.

Начинаем писать код

Давайте для знакомства с библиотекой создадим бота, который будет приветствовать пользователя и высылать в ответ присланный ему текст. Для этого создадим каталог для нашего бота и сохраним там два файла: bot.py и config.py.
Открываем последний любимым текстовым редактором и записываем туда токен, полученный от @BotFather:

TOKEN = '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'

Теперь возьмемся за основной файл - приступаем к редактированию файла bot.py. Для этого импортируем необходимые модули библиотеки aiogram и токен бота, а так же инициализируем объекты бота и диспетчера:

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

from config import TOKEN


bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

Команда, с которой начинается общение пользователя с ботом - /start. Поэтому давайте научим нашего бота реагировать на эту команду. Создаем message_handler и объявляем там функцию ответа:

@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!\nНапиши мне что-нибудь!")

Ещё в ботах принято создавать обработчик команды /help- вдруг пользователь заинтересуется возможностями бота.
Вообще, мы могли бы добавить просто help в массив, передаваемый параметру commands, чтобы получилось:

@dp.message_handler(commands=['start', 'help'])

Но зачем приветствовать пользователя снова? Поэтому создадим отдельный message_handler для этой команды:

@dp.message_handler(commands=['help'])
async def process_help_command(message: types.Message):
    await message.reply("Напиши мне что-нибудь, и я отпрпавлю этот текст тебе в ответ!")

Обращу внимание новичка на то, что называть функции можно как угодно - хоть abc, хоть qwerty, однако называя функции понятным языком - process_start_command, process_help_command сразу понятно, какая за что отвечает. Главное, чтобы имена не повторялись. Называть как угодно можно также и имя параметра, покажу дальше.

Итак! Осталось сделать обработку текстового сообщения. Для этого пишем следующее:

@dp.message_handler()
async def echo_message(msg: types.Message):
    await bot.send_message(msg.from_user.id, msg.text)

Объясняю, что мы только что написали:
Если не указывать тип обрабатываемого сообщения, то библиотека по умолчанию делает обработку только текстовых сообщений - то, что нам и нужно. Поэтому скобки на первой строчке остаются пустыми.
Параметр msg это всё то же сообщение, как и в предыдущих пунктах.
В данном случае на последней строчке мы отправляем пользователю сообщение не ответом, а простым сообщением. Для этого мы воспользовались методом send_message и передали в него два обязательных параметра - айди чата, куда отправляем, и сам текст сообщения. Их мы взяли из объекта msg, который является представителем класса Message. Параметр from_user ссылается на ещё один объект - данный параметр имеет класс User. У него есть параметр id - уникальный идентификатор для чатов и каналов в телеграме. Ну и текст полученного сообщения мы получили из поля text.

Финальный штрих

Чтобы получать сообщения от серверов Telegram воспользуемся поллингом (polling. to poll - опрашивать) - постоянным опросом сервера на наличие новых обновлений. Для этого дописываем в bot.py следующее:

if __name__ == '__main__':
    executor.start_polling(dp)

Всё! Наш первый бот готов. Полный листинг программы:

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

from config import TOKEN


bot = Bot(token=TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!\nНапиши мне что-нибудь!")


@dp.message_handler(commands=['help'])
async def process_help_command(message: types.Message):
    await message.reply("Напиши мне что-нибудь, и я отпрпавлю этот текст тебе в ответ!")


@dp.message_handler()
async def echo_message(msg: types.Message):
    await bot.send_message(msg.from_user.id, msg.text)


if __name__ == '__main__':
    executor.start_polling(dp)

Осталось запустить программу. Для этого в командной строке переходим в директорию проекта и пишем

python bot.py

Теперь можно написать нашему боту:

Поздравляю! Вы написали своего первого Telegram бота на языке Python 3 с использованием библиотеки aiogram!

results matching ""

    No results matching ""