Привет! Я Саша Омельяненко, тимлид в отделе Flutter в AGIMA. На одном из наших проектов мне нужно было сделать бота для Telegram. Я нашел инструкции, как создать только базового бота. Но как оформить его, добавить кнопки и повесить на них Listener, я не нашел.
Пришлось разбираться с документацией Telegram, а это занятие не из приятных. Чтобы избавить вас от этого удовольствия, я решил написать гайд по разработке функционального Telegram-бота на Dart. Мы пройдем весь процесс от регистрации бота до его развертывания на удаленном сервере. Эта инструкция будет полезна Flutter-разработчикам уровня Junior и Middle.

Что будет уметь наш бот
Мы разработаем бота, который будет имитировать регистрацию пользователя и отдавать токен.
При выполнении команды /start бот будет проверять, зарегистрирован пользователь или нет.
Если пользователь не зарегистрирован, бот будет отправлять текст приветствия и выводить кнопки «Регистрация» и «Инструкция».
Если пользователь нажимает кнопку «Регистрация», бот отправит запрос на бэк и получит токен.
Если пользователь нажимает кнопку «Инструкция», бот покажет сообщение с инструкцией.
Если пользователь зарегистрирован, то бот покажет текст и кнопку с инструкцией.
Теперь, когда мы определили функциональность нашего бота, приступим к его созданию.
1. Регистрация нового бота в Telegram

Для начала нужно зарегистрировать нового бота в Telegram. Для этого:
Откройте Telegram и найдите бота BotFather.
Напишите команду /newbot.
Следуйте инструкциям BotFather для создания нового бота. Укажите имя бота и его Username.
После успешной регистрации BotFather выдаст вам токен доступа (API Token). Сохраните его, он понадобится для взаимодействия с Telegram API.
2. Разработка бота
Теперь, когда у нас есть токен, можно приступить к написанию кода. Мы будем использовать библиотеку teledart для взаимодействия с Telegram API.
Создаем новый Dart-проект
dart create -t console-full dart_test_habr_botУстанавливаем зависимости
Добавьте зависимость teledart в ваш pubspec.yaml:
dependencies:
teledart: ^0.6.1Архитектура
Здесь определим, из каких частей будет состоять бот.
Инициализация.
Оформление.
Стартовые команды.
Listener.
Список команд.
Инициализация bin/dart_test_habr_bot.dart
late TeleDart _teleDart;
final telegram = Telegram(YOUR_BOT_TOKEN_FROM_BOT_FATHER);
final username = (await telegram.getMe()).username;
_teleDart = TeleDart(YOUR_BOT_TOKEN_FROM_BOT_FATHER, Event(username!));
final repository = Repository();
_teleDart.start();Оформление
Тут мы можем пойти двумя путями. Оформить бота в проекте или использовать BotFather.
1. Через бота.
Добавим описание бота:
Откройте BotFather и выберите команду
/setdescription.Следуйте инструкциям для добавления описания вашему боту.
Добавим меню. Для этого используем команду /setcommands в BotFather. Укажите команды и их описания.
2. В проекте.
Добавим описание бота:
_teleDart.setMyShortDescription(
'Это бот для регистрации и управления аккаунтом', 'ru');Добавление меню:
_teleDart.setMyCommands([
BotCommand(command: '/start', description: ' 