Как создать бота в icq new

REDMOND

ICQ New: инструкция по разведению ботов

Каждый раз, заходя в мессенджер, мы встречаем ботов в самых различных своих проявлениях. Одни рассказывают про погоду, другие разыгрывают бургеры, а третьи так и вообще кидают мемы под настроение. Наверняка у многих из вас проскакивала мысль: «А не сделать ли мне своего бота?». К сожалению, частенько такие мысли разбиваются о непонимание, как вообще сделать бота. Наверное, для этого нужно быть крутым айтишником и разбираться в миллионах технологий? На самом деле, нет. И сегодня мы попытаемся показать, что создание своего бота — процесс простой и понятный. Разберем полный цикл создания бота, от получения необходимых данных из мессенджера до написания кода и его запуска на сервере.

Некоторое время назад в ICQ сильно обновилась платформа ботов. Она стала более дружелюбной, понятной и удобной. С помощью Python-библиотеки от разработчиков мы и будем создавать своего первого бота.

Первым делом

Для начала, нужно быть зарегистрированным в ICQ. Сделать это можно через приложение для мобильного телефона, компьютера или прямо из браузера в веб-версии.

После регистрации можно приступать к заведению собственного бота в системе:

  1. Найти metabot в ICQ.
  2. Написать ему команду /newbot .
  3. Отправить имя для своего нового бота (должно оканчиваться на bot).
  • botId : уникальный номер бота;
  • nick : имя бота для поиска;
  • token : токен, который используется для сетевых запросов к серверу.

На страннице https://icq.com/botapi/#/ есть полное описание методов API. Они используются для взаимодействия с сервером. Разберем некоторые из них подробнее.

Базовый метод — /events/get . Он используется для получения новых событий бота. Например, если кто-то написал боту, то это событие будет отдаваться при запросе /events/get . Давайте напишем боту какое-нибудь сообщение и проверим появление соответствующего события. Сделать это можно, например, в браузере. Для этого нужно перейти по адресу https://api.icq.net/bot/v1/events/get?token=Ваш токен&pollTime=1&lastEventId=0. Параметр pollTime отвечает за длительность удержания запроса сервером. Например, если ввести значение 60, то сервер в течение 60 секунд будет ждать событий для бота, а если их не будет за это время, то сервер вернет пустой массив событий. lastEventId отвечает за последнее обработанное событие. Другими словами, события со значениями меньше, чем переданное, будут отсечены.

После перехода по этому адресу на экране появится что-то подобное:

Таким же образом можно отправить сообщение от имени бота с помощью метода /messages/sendText .

Изучать эти методы подробнее не нужно, у нас есть готовая Python-библиотека, которая позволяет, не вдаваясь в подробности, писать своего бота.

Пишем код?

Да, но для начала нам нужно подготовить для этого свой компьютер. Будем использовать Python третьей версии (скачайте версию для своей ОС здесь: https://www.python.org/downloads/ и менеджер пакетов pip здесь: https://pip.pypa.io/en/stable/installing/ ) Также, нужно установить библиотеку для работы с ботами:

Вот теперь можно приступать.

Пишем!

В качестве примера будем писать игрового бота, который будет проверять знания простейшей математики. Работать он будет так: человек пишет боту какое-нибудь сообщение, тот представляется и предлагает поиграть. После того, как пользователь соглашается, бот генерирует простой математический пример и 4 варианта на выбор. Когда пользователь нажимает кнопку с выбранным ответом, бот отвечает, правильно или неправильно.

Итак, бот в первую очередь должен получать события от сервера. Для этого нам нужно, помимо импортирования всех библиотек, создать объект класса Bot и запустить получение обновлений:

Здесь мы импортируем библиотеку для журналирования и запускаем ее. Также импортируем библиотеку для ICQ-ботов, задаем необходимый параметр token , создаем объект класса Bot и запускаем получение обновлений от сервера ( bot.start_polling() ).

Сейчас наш бот может получать события, но не может их обрабатывать. Дополним бота, чтобы он мог отвечать на сообщения. Для этого добавим необходимые импорты:

json нужен для форматирования части сообщения, отвечающей за кнопки. MessageHandler нужен для добавления в код обработчика новых сообщений.

Далее, нам нужна функция, которая будет составлять сообщение для ответа:

Она принимает на вход созданного бота и событие нового сообщения. default_markup — матрица кнопок (объект «список», состоящий из массива строк кнопок. В нашем случае это единственная кнопка Начать!). first_message_text — строка, текст которой будет отправлен пользователю. Метод send_text принимает:

  • chat_id (поле из обрабатываемого события) — идентификатор чата, из которого было получено сообщение,
  • текст отправляемого сообщения,
  • и inline_keyboard_markup — наши кнопки.

Она позволяет при получении нового сообщения автоматически вызывать функцию startup() с необходимыми параметрами. Этот обработчик нужно поместить в функцию main() . У нас получился вот такой код, который позволяет отправлять стартовое сообщение при получении ботом любого сообщения:

Для пользователя это будет выглядеть так:

Рассмотрим подробнее кнопку, которую мы отправляли в сообщении:

Помимо текста, который написан на кнопке, в сообщении есть поле callbackData . При нажатии на кнопку сервер генерирует событие нажатия на кнопку. В нём он передает это поле как идентификатор нажатой кнопки. То есть, по этой строке, полученной от сервера, мы можем судить, какую именно кнопку нажал пользователь. таким образом, дальше нам нужно добавить в бота логику обработки нажатия на кнопку. Для этого нам снова потребуется импортировать необходимые методы:

Первая строка — обработчик события нажатия на кнопку, вторая — фильтр, помогающий понять, какая именно кнопка нажата. Также нам нужно описать логику ответа на нажатия кнопки:

По аналогии с сообщениями, функция принимает на вход такие же аргументы. Затем генерируется пример и массив кнопок с ответами. Один из ответов будет правильным. По этому признаку у ответов будут разные callbackData . В конце нужно обязательно вызвать метод answer_callback_query с параметрами:

  • query_id — уникальный номер события нажатия на кнопку,
  • и text — текст, который будет показан во всплывающей подсказке при нажатии на кнопку.

Давайте сразу добавим и функции для обработки правильных и неправильных ответов:

Эти функции будут вызываться при нажатии на правильный и неправильный ответы. И после сообщения с правильным ответом пользователь получит новый вопрос.

Всё, осталось только добавить обработчики нажатия на кнопки:

В каждом из этих трех обработчиков записан фильтр по callbackData (например, filters=Filter.callback_data(«start») ) и функция для вызова.

На этом программирование бота завершено. Итоговый код выглядит так:

Замечу, что в нем присутствуют импорты, необходимые для работы функции генерирования вопроса. Вместо этой и других функций можно написать какую-то свою логику 🙂

ICQ bot через современное API

  • scr1.jpg
  • scr2.jpg

(5) у HTTPЗапроса есть метод УстановитьИмяФайлаТела, с его помощью можно и без ДвоичныхДанных обойтись,
хотя через ДвоичныеДанные тоже можно, конечно.

Request body это не совсем параметр, а тело запроса

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Все работает за исключением отправки сообщений в группы. Бот в группу добавлен.

При отсылке сообщения в группу код ответа 200. Все отработало.

Сообщение отправляет, блокировки отправки не происходит, т.к. StatusText при блокировке другой.

Вот такая ошибка выходит в ответе. Документацию по ошибкам у аськи не смог найти к сожалению(.

  • Скопировать ссылку
  • Перейти

(9) разрабы перепилили API

старый работает, но наверное лучше попробовать переписать подо новый вариант

  • Скопировать ссылку
  • Перейти

Просмотры 5987

Загрузки 16

Рейтинг 10

REDMOND

Создание 29.02.20 10:03

Обновление 29.02.20 10:03

№ Публикации 1202497

Конфигурация Конфигурации 1cv8

Операционная система Не имеет значения

Вид учета Не имеет значения

Доступ к файлу Абонемент ($m)

Код открыт Да

См. также

Модуль обмена с QIWI Промо

Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.

5 стартмани

25.05.2020 8244 0 Neti 10

Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)

Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.

1 стартмани

01.04.2021 8881 11 SaschaG 4

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021 10549 32 Parsec1C 11

Отправка Push-уведомлений через сервис Firebase Cloud Messaging по протоколу FCM HTTP v1 API

При разработке нативного приложения Android для ТСД, в котором присутствует функционал отображения задач кладовщикам, созданных в 1С, возникла необходимость отправлять push-уведомления о появлении новых задач. Для отправки таких уведомлений было решено использовать сервис Firebase Cloud Messaging (FCM). Так как для 1С, в отличии от других языков программирования, не существует готовых библиотек, что вполне логично, то очевидным способом отправки является использование протокола HTTP. Однако, существующая информация в интернете в части 1С содержит только сведений об отправке push-уведомлений через этот сервис с использованием устаревшего протокола HTTP Firebase Cloud Messaging. Сам Google не рекомендует использовать данный протокол и настоятельно склоняет к переходу на новый протокол FCM HTTP v1 API. Что ж, пришлось разбираться самостоятельно.

1 стартмани

24.03.2021 7165 13 ltfriend 12

BIM: взаимодействие с платформой Autodesk Forge Промо

Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.

icq-bot

Интерфейс для работы с ICQ ботами для NodeJS/TypeScript. В этом пакете я (разработчик) попытался максимально избавится от всех зависимостей и сделал максимально похожий код и интерфейс на версию "bot-python" из pip от mail.ru

Все интерфейсы ответов сервера, сущностей и доступны для работы с TypeScript и готовы к экспорту.

Тестирование проекта выполняется с помощью фреймворка mocha.

Также имеется описание проекта на английском языке в README.EN.md доступное после скачивания.

Создержание

Вступление

Библиотека поддерживает Bot API 1.0 интерфейс и совместимый с NodeJS верси 13.10.1

Регистрация

Что бы создать собственного бота необходимо зарегистрироваться в ICQ и написать в чат Metabot команду

Далее следуйте инструкции.

Метобот сможет ответить вам если вы добавите его в список контактов или сами начнёте диалог.

Установка

Установка с использованием npm:

Обратите внимание на актуальную мажерную версию бота

Использование

Инициализация для JS проекта

где XXX.XXX.XXX:XXX — токен, который выдал метобот в диалоге

Конструктор класса поддерживает два параметра

  • apiUrlBase — Базовая ссылка на API. по умолчанию: https://api.icq.net/bot/v1
  • name — имя бота
  • version — версия бота (используется в запросах в заголовке в параметре User-Agent)
  • timeoutS — Время на ответ. не используется нигде.
  • pollTimeS — время максимально разрещенного запроса

Отправка сообщений чрез API

где XXX — номер чата

Как использовать пулинг

Для начала нужно созать обработчик. Вы можете использовать следующие обработчики (Хэндлеры): ICQ.Handler.* :

  • HelpCommand — пользователь отправил команду help
  • Message — пользователь отправил сообщение
  • NewChatMembers — пользователь присоединился к общему чату
  • LeftChatMembers — пользователь покинул чат
  • PinnedMessage — пользователь закрепил запись в чате
  • UnPinnedMessage — пользователь открепил запись в чате
  • EditedMessage — пользователь отредактировал запись
  • DeletedMessage — пользователь удалил сообщение
  • Command — пользователь отправил команду в которая команда это первое слово
  • StartCommand — пользователь отправил команду start
  • FeedbackCommand — пользователь отправил команду "feedback текст" и в ответ администратор (указанный в параметрах обработчика) получает сообщение с номером чата и текстом
  • UnknownCommand — Все не обработанные команды другими обработчиками
  • BotButtonCommandHandler — пользователь нажал на кнопку с командой

С версии 2.1.42

  • deleteMembers — удалить членов группы по номеру пользователя или массиву. Бот должен быть администратором.
  • setAvatar — установить аватар для группы. Бот должен быть администратором.

Хэндлер должен быть помещён в экземпляр класса дипечер в экземпляре класса бот. Для этого в ранее созданном боте необходимо вызвать метод getDispatcher() который вернёт актуальный диспетчер.

Далее следует вызвать метод addHanler( handler: BaseHandler ) и поместить один из выше перечисленных созданных обработчиков. В примере приведен обработчик Message

Как использовать фильтры для обработчиков

Вы можете использовать следующие фильтры: ICQ.Filters.* :

  • message * — обработчик фильтрует только сообщения с текстом
  • command * — филтрует только сообщения с префиксом команд "/" или "."
  • file * — обработчик фильтрует только отправку файлов
  • image * — только отправка файлов изображений
  • video * — только отправка файлов видео
  • audio * — только отправка файлов со звуковыми расширениями
  • media * — фильтрует файлы изображений, видео и аудио
  • sticker * — отправлен стикер
  • url * — только ссылки в сообщениях за исключением отправки файлов
  • regexp — фильтр по регулярному выражению
  • mention — сообщения с упомянанием вас
  • forward * — только сообщение с типом Forward (Пересланное сообщение из другого чата)
  • reply * — только сообщения с типом Reply (Цитируемое сообщение)
  • sender — только сообщения конкретного пользователя

Все фильтры с * возвращают уже созданные объекты. Все остальные возвращают классы.

REDMOND

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *