В этой серии заметок хотел бы немного коснуться данной темы. Серия будет включаться в себя три раздела:
- Разработка бота на Go для поиска заклинаний для Dungeon And Dragons
- Публикация бота на платформе heroku
- Добавление аналитики использования бота
Итак, начнём!
Во-первых, нам потребуется сам список заклинаний DnD. Найти его можете в моём bitbucket-репозитории этого бота.
Во-вторых, создать новую папку. Например, dndspellsbot.
В-четвертых, чтобы не изобретать велосипед, добавить библиотеку telegram-bot-api:
go get gopkg.in/telegram-bot-api.v4
И, наконец-то, в-пятых, написать код самого бота.
config.json
Создадим пустой Go-файл dndspellsbot.go в папке dndspellsbot. Туда же добавим конфигурационный файл config.json со следующим содержимым:
Конечно же, можно обойтись без этих усложнений и зашить токен прямо в коде бота, но в случае, если вы случайно зальетё код вашего бота в какой-то публичный репозиторий на github/bitbucket/whatever, то утечёт и токен, а это, согласитесь, неприятно. И это только сейчас у нас такой простой конфиг — в дальнейшем будут добавляться новые свойства и всё будет храниться в одном месте. Удобно, согласитесь?
Telegram Bot на Python | История (лог) переписки с ботом в файле Excel | Бот от моего подписчика
Получить этот токен из конфигурационного файла довольно просто стандартными средствами Go:
package main import ( «fmt» «gopkg.in/telegram-bot-api.v4» «log» «os» «encoding/json» ) type Config struct < TelegramBotToken string >func main() < file, _ := os.Open(«config.json») decoder := json.NewDecoder(file) configuration := Config<>err := decoder.Decode( log.Panic(err) >fmt.Println(configuration.TelegramBotToken) >
Теперь при добавлении в config.json новых свойств и модификации структуры Config можно получать необходимые параметры конфигурации.
ping?
В репозитории telegram-bot-api есть пример echo-бота — бота, который отвечает вам те же сообщением. Возьмём его за основу:
bot, err := tgbotapi.NewBotAPI(configuration.TelegramBotToken) if err != nil < log.Panic(err) >bot.Debug = false log.Printf(«Authorized on account %s», bot.Self.UserName) u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates, err := bot.GetUpdatesChan(u) if err != nil < log.Panic(err) >// В канал updates будут приходить все новые сообщения. for update := range updates < // Создав структуру — можно её отправить обратно боту msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) msg.ReplyToMessageID = update.Message.MessageID bot.Send(msg) >
Вы уже добавила вашего бота в свой список контактов? Если нет — сейчас самое время.
Теперь самое интересное — запускаем наше приложение командой go run dndspellsbot.go и пишем что-нибудь нашему боту. Если всё сделано правильно, то бот ответит вам вашим же сообщением:
ТЕЛЕГРАММ БОТ НА PYTHON ЗА 8 МИНУТ | Отправка файлов, обработка нажатия на кнопки клавиатуры
Однако, мы хотели не этого.
Опустим подробности парсинга XML — пост не об этом (полный код можно будет найти по ссылке в конце статьи).
Будем считать, что у нас есть слайс всех заклинаний и любой запрос пользователя к боту — это запрос на поиск подходящего заклинания по его имени (усложнять можно бесконечно, но на данный момент этого достаточно):
. query := update.Message.Text // Получим те заклинания, в имени которых есть искомое слово или фраза filteredSpells := Filter(spells.Spells, func(spell Spell) bool < return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 >) // Если не нашлось ни одного заклинания — скажем об этом пользователю if len(filteredSpells) == 0 < msg := tgbotapi.NewMessage(update.Message.Chat.ID, «No one spells matches») bot.Send(msg) >// Каждое заклинание отправляем отдельным сообщением for _, spell := range(filteredSpells) < text := «» for _, t := range(spell.Texts) < text = text + t + «n» >msg := tgbotapi.NewMessage(update.Message.Chat.ID, fmt.Sprintf(«%sn%s», spell.Name, text)) bot.Send(msg) > . // Функция фильтрации слайсов func Filter(spells []Spell, fn func(spell Spell) bool) []Spell < var filtered []Spell for _, spell := range(spells) < if fn(spell) < filtered = append(filtered, spell) >> return filtered >
Теперь, при любом запросе от пользователя, бот будет возвращать все подходящие заклинания из phb.xml .
В следующей статье немного улучшим нашего бота: добавим форматирование сообщений, inline-режим и добавим пару команд.
Код бота можно найти на bitbucket.
Источник: ashirobokov.wordpress.com
Telegram API Bot
Развитие Телеграмм во многом определяется наличием большого числа ботов – небольших сервисных программ-роботов. Их может создать каждый пользователь, знакомый с программированием на среднем уровне. Telegram API Bot – это программный интерфейс, позволяющий программировать собственного бота.
API включает в себя объекты и команды, предназначенные для установки поведения бота Telegram. Используя интерфейс, вы можете создавать собственные программные коды, которые при запуске в Telegram начинают работать как боты.
Элементы управления
В Бот Телеграмм API все элементы управления представляют собой объекты, которые представлены в JSON, то есть в виде строки, заданной по определенным правилам. Это позволяет производить обмен данными по сети максимально быстро и наименее затратно, так как передается не программный код, а набор пар «ключ:значение» в текстовом виде. В таблице приведены все типы API. Большая часть объектов предназначена для создания команд бота. Ключи дадут более расширенное представление о возможностях объекта.
User | Пользователь в Телеграмм | id first_name last_name username |
Chat | Чат | id type title username first_name last_name all_members_are_administrators |
Message | Сообщение | message_id from date chat forward_from forward_date reply_to_message text entities audio document photo sticker video voice caption contact location venue new_chat_member left_chat_member new_chat_title new_chat_photo delete_chat_photo group_chat_created supergroup_chat_created channel_chat_created migrate_to_chat_id migrate_from_chat_id pinned_message |
MessageEntity | Отдельная сущность в текстовом сообщении (хештег, ссылка и пр.) | type length url offset |
PhotoSize | Изображение заданного размера или превью фото, файла или стикера | file_id width height file_size |
Audio | Аудиозапись | file_id duration performer title mime_type file_size |
Document | Любой файл, не являющийся изображением, аудиозаписью или голосовой записью | file_id thumb file_name mime_type file_size |
Sticker | Стикер | file_id width height thumb file_size |
Video | Видеозапись | file_id width height duration thumb mime_type file_size |
Voice | Голосовое сообщение | file_id duration mime_type file_size |
Contact | Телефонный контакт | phone_number first_name last_name user_id |
Location | Точка на карте | longitude latitude |
Venue | Объект на карте | location title address foursquare_id |
UserProfilePhotos | Фото профиля пользователя | total_count photos |
File | Готовый к загрузке файл | file_id file_size file_path |
ReplyKeyboardMarkup | Клавиатура с возможностью ответа | keyboard resize_keyboard one_time_keyboard selective |
KeyboardButton | Кнопка клавиатуры для ответа | text request_contact request_location |
ReplyKeyboardHide | Заменяет клавиатуру бота на стандартную клавиатуру Telegram | hide_keyboard selective |
InlineKeyboardMarkup | Встроенная клавиатура, появляющаяся под сообщением | inline_keyboard |
InlineKeyboardButton | Одна кнопка на встроенной клавиатуре | text url callback_data switch_inline_query switch_inline_query_current_chat callback_game |
CallbackQuery | Входящий запрос обратной связи для встроенной кнопки с заданным параметром callback_data | id from message inline_message_id data |
ForceReply | Эмулирует действия пользователя: выбор сообщения и нажатия кнопки «Ответить» | force_reply selective |
ResponseParameters | Сообщает, почему запрос не выполнился успешно | migrate_to_chat_id retry_after |
Результирующие строки, которые присылает мессенджер, представлены в виде тех же объектов API.
Обмен сообщениями происходит в виде запросов. В следующей таблице приведены примеры некоторых из них.
getMe | Позволяет получить информацию о пользователе |
sendMessage | Отправляет сообщение |
sendPhoto | Отправляет фото |
sendAudio | Отправляет аудио |
sendDocument | Отправляет документ |
sendVideo | Отправляет видео |
sendContact | Отправляет контакт |
getUpdates | Получает обновления из чата |
Все методы (а их достаточно много) делятся на группы:
- Получение обновлений и информации.
- Работа в чате.
- Отправка различных элементов.
- Работа со стикерами.
- Обновление сообщений.
- Режим inline.
- Платежный функционал.
- Для игр.
Полной документации Telegram Bot API на русском пока не существует. Однако стандартный перевод в браузере Google Chrome прекрасно справляется с задачей.
Языки программирования
Telegram API поддерживается множеством языков программирования. Это дает возможность выбора создателю.
Любители JavaScript могут использовать Node.js Telegram Bot API. Здесь необходимо знание не только языка, но и умение обращаться с этим фреймворком, превратившим клиентский язык в полноценный серверный интерфейс.
Одним из самых популярных для написания ботов с использованием Telegram Bot API является PHP. Этот язык изначально был предназначен для создания серверных web-приложений. Он отличается простотой, логичностью и специализированностью именно для web-среды.
Часто используется Telegram Bot API в Python. Этот язык отличается минимализмом и достаточно прост в изучении. Он очень популярен за счет своей производительности.
Классикой является применение Telegram Bot API в С++. Язык нельзя назвать простым, но он является базой, на которой были созданы все остальные вышеперечисленные ЯП. Соответственно в нем не заложена определенная специализация. Инструменты позволяют создавать любые приложения.
Пример использования
Кроме объектов API имеет набор методов, которые позволяют отправлять сообщения, файл, фото стикеры, редактировать и многое другое. Все эти команды можно найти в описании API на официальном сайте.
Все запросы имеют вид:
https://api.telegram.org/bot/КОМАНДА
Всего существует 4 способа подачи запроса:
- Запрос в URL
- application/x-www-form-urlencoded
- application/json (не подходит для загрузки файлов)
- multipart/form-data (для загрузки файлов)
Доступны как GET, так и POST запросы.
Самый простой способ попробовать команды API – адресная строка в браузере. Зайдите в свой бот в web-версии или с мобильного устройства. Затем в браузере наберите команду:
В результате в окне появится JSON-строка
В браузере появится строка
А в чате Телеграмм вы увидите приветствие от созданного робота.
Как видите, создать с нуля новый элемент для Телеграмм не сложно. Трудности начинаются в момент программирования, но об этом расскажем в других статьях.
Источник: telegramzy.ru
Как создать простого бота для Телеграм на PHP
Создадим простого бота для мессенджера Telegram с использованием PHP. Данная статья создана исключительно в поучительных целях и не претендует на полноту или правильность подхода. Весь код бота очень простой и может быть освоен начинающими PHP-разработчиками.
Предупреждаю сразу профессионалов и перфекционистов от программирования — вам здесь делать нечего . Никаких фреймворков и гитхабов! Все будет очень просто и примитивно, но работать будет. И это главное. Всем счастья
Шаг 1: подготовка
Что нам понадобится:
- Веб-сервер с работающим PHP 5.6 и выше — не локальный веб-сервер, а веб-сервер на хостинге, что важно! Так как сервисы Telegram должны будут видеть вашего бота по внешней URL-ссылке;
- Веб-сервер должен работать через https — то есть на веб-сервере должен быть установлен давно (больше суток назад) зарегистрированный SSL-сертификат. Достаточно будет бесплатного Let’s Encrypt SSL-сертификата;
- Доступ к файлам на этом сервере, конечно же — иначе как мы что-то сделаем;
- Установленная кодовая страница UTF-8 на сервере по-умолчанию или добавьте в файл .htacces в корне сайта строку AddDefaultCharset utf-8;
- Аккаунт в мессенджере Telegram;
Шаг 2. Регистрация вашего бота в Телеграм
Да, да. Бот еще даже не создан, но перед этим его уже нужно зарегистрировать, чтобы получить уникальный идентификатор, чтобы в дальнейшем обращаться к BOT API Telegram.
Шаг 3. Создаем код бота
Будем делать прямо в корне сервера (не самый верный подход, можно создать папку bot, а в ней уже файл verysimple_bot.php). Для этого на сервере создадим файл verysimple_bot.php в котором и будет весь код бота. Не забываем, что весь код в файле verysimple_bot.php должен быть в кодировке UTF-8.
Для редактирования файлов кода и заброске их на сервер удобно использовать FAR Manager — в нем есть и подсветка синтаксиса и FTP/SFTP клиент для копирования файла на сервер.
Делаем заготовку бота, который сможет выдавать список команд и информацию о нас:
Шаг 4. Делаем WebHook и конкретизируем код бота
-
Чтобы все заработало, нужно сособщить сервису Телеграм, что наш бот лежит там-то — используй его код для такого-то бота verysimple_bot.
Для этого нужно сформировать ссылку, которая называется WebHook и её мы и сообщим телеграму:
https://api.telegram.org/bot 1234567899:AAKJhkkjhkjhKhKhjkhkhk_kJhgkjhJhgjghjhG /setWebhook?url= https://www.mysite.ru/verysimple_bot.php
Не забываем где красное заменяем на свои данные!
Как сформируете эту ссылку — вставьте её в браузер и запустите!
- Пользователь в диалоге с ботом пишет запрос, например /help
- Telegram Bot API через WebHook, что мы установили, берет этот запрос и отправляет в код бота
- Мы в боте получаем его, анализируем, видим например, /help и через Telegram Bot API и
функцию message_to_telegram отправляем ответ — который появлется в диалоге как ответ бота.
Шаг 5. Добавим возможность делать заявки через бота
Заявкой будем считать сообщение или вопрос, которое можно будет отправить через нашего бота какому-то пользователю, назовем его менеджер компании. То есть нам нужно организовать такую цепочку:
- Пользователь запрашивает у бота «Оставить заявку», например набрав команду /order
- Бот входит в режим ожидания текста Заявки
- Если пользователь ввел текст и нажал Enter, только тогда отослать это сообщение заранее запрограммированному по менеджеру компании.
Получим идентификатор chat_id пользователя кому нужно отсылать заявки:
- Помните наш файл message.txt — вот он сейчас понадобится
- Присоединяемся к нашему боту тем пользователем, кому будем слать заявки (менеджер компании)
- Сразу открываем файл message.txt и смотрим блок: [chat]
$order_chat_id = ‘123456789’; //chat_id менеджера компании для заявок $bot_state = »; // состояние бота, по-умолчанию пустое
Сохраняем состояние бота для каждого пользователя
Далее, важный момент: у нас любой присоединившийся пользователь сможет сделать заявку, и чтобы бот понимал, что находится в режиме ввода заявки именно с этим пользователем, мы должны сохранять и считывать состояния бота для каждого пользователя отдельно!
Напишем две функции: set_bot_state($chat_id, $data) и get_bot_state($chat_id) — которые сохраняют текущее состояние бота и получают соответсвенно, для нужного пользователя. Сохранять будем в подпапке /users на сервере, которую создадим предварительно не забыв дать права на запись. Состояния будут хранится все в тех же текстовых файлах с именами chat_id пользователей и содержать последнюю команду:
// сохранить состояние бота для пользователя function set_bot_state ($chat_id, $data) < file_put_contents(__DIR__ . ‘/users/’.$chat_id.’.txt’, $data); >// получить текущее состояние бота для пользователя function get_bot_state ($chat_id) < if (file_exists(__DIR__ . ‘/users/’.$chat_id.’.txt’)) < $data = file_get_contents(__DIR__ . ‘/users/’.$chat_id.’.txt’); return $data; >else < return »; >>
Теперь дополним код бота, добавив запись и отлов состояния и отправив заявку менеджеру компании, если состояние отправки заявки.
Шаг 6. Регистрация команд бота
Вот и все — простой бот работает! Всем спасибо, если дочитали и что-то заработало.
Николай Комарков
Источник: www.novelsite.ru