Команды для работы с ботом с Дискорд Ботом Symbol-Protocol-Treasury:
- !treasury nem
- !treasury symbol
- !treasury all
Всем доброго времени суток, в этой статье я расскажу о моем опыте по созданию дискорд бота, который позволяет отслеживать сокровищницу Symbol & NEM. Здесь будет рассказано с какими сложностями мы столкнулись, так как команда по созданию дискорд бота состоит из трех человек:
– Fabrizio (Node Symbol: conrad.symbolnode.ninja)
– Klim (Node Symbol: NIS2.host)
– Angel (Node Symbol: XYM007.host)
Поддержите наши ноды Symbol!
Создание бота началось с создания открытого репозитория на GitHub:
Нам нужно было выбрать язык программирования для нашего бота. При выборе языка программирования, нужно было учитывать API Discord, а также Symbol SDK & NEM.
Код Java структурирован как проект maven и у нас должен быть установлен плагин maven в нашей среде разработки IDE pyCharm, но так как pyCharm не поддерживает JAVA, нужно работать в среде Eclipse IDE, что представляло для меня и для Angel сложность.
Фабрицио создал фундамент на языке JAVA,так как он достаточно хорошо знаком с языком программирования JAVA, а я в это время, вместе с Ангел приступил к созданию бота, через сайт разработчиков дискорд https://discord.com/developers
Также мы создали инфографику, возможно в будущем мы изменим ICON, мы будем рады любым идеям из комьюнити.
Дальше нам нужно было, узнать точные адреса сокровищницы Symbol и NEM. В итоге мы это получили:
- NEM: https://explorer.nemtool.com/#/s_account?account=NCHESTYVD2P6P646AMY7WSNG73PCPZDUQNSD6JAK
- Symbol:https://symbol.fyi/accounts/NCHEST3QRQS4JZGOO64TH7NFJ2A63YA7TPM5PXI
Мы нашли руководство по создание дискорд бота с помощью Discord4J + Spring Boot https://www.baeldung.com/spring-discord4j-bot . В данном руководстве было сказано:
Discord4J — это библиотека Java с открытым исходным кодом, которую в первую очередь можно использовать для быстрого доступа к Discord Bot API. Эта библиотека тесно интегрируется с Project Reactor, чтобы предоставить полностью неблокирующий API.
В этом руководстве мы будем использовать Discord4J для создания простого бота Discord, способного реагировать на предопределенную команду.
На этом этапе я закончил создание бота через дискорд разработчиков и получил новый токен. Фабрицио соединил бота через API, эта была сложная задача, как казалось но спустя 15 минут Фабрицио сообщил что бота должен выдавать команду hello world! при запросе !symbol:
Документацию которую мы использовали для NEM и Symbol:
https://docs.symbol.dev/guides/account/getting-account-information.html
Далее Фабрицио планировал запустить Symbol Java sdk для получения информации с казначейского счета Symbol. Поэтому нам нужна была помощь в документации Symbol и NEM.
И в это время у Фабрицио появилась проблема с его рабочим пространством Eclipse.
Работа над созданием бота была задержана на несколько дней, но вскоре все нормализовалось.
Чтобы тестировать бота нам пришлось добавить его на неофициальный дискорд сервер, чтобы тестировать бота:
И основная проблема которая была выявлена это «reactive» API в Discord4J. Так как при вызове команды SDK для казначейства Symbol, вне метода обратного вызова сообщения Discord, получается положительный ответ с казначейского счета, а когда вызов происходит из SDK Symbol, метод «Mono» в «reactive» Discord4j, появляется ошибка. Но Фабрицио благодаря его знаниям в программировании удалось решить это.
Через несколько дней было обнаружено, что ключ (токен) бота был виден в истории GitHub, поэтому он больше не был безопасным, поэтому мы сгенерировали новый ключ, за несколько минут.
При работе с NEM Java sdk https://github.com/NEMPH/nem-apps-lib у нас возникла проблема с Maven JSON API код изменен и обновлен до Git. Следующим шагом является тестирование путем отключения работающего бота на VPS сервере nis2.host, копирования новых источников и повторного запуска.
Также все сводилось к изучению https://docs.discord4j.com/
Нам нужно было решить, какой код добавить в строку с 37 по 43 исходного файла Java https://github.com/klimgeran/Protocol-Treasury/blob/main/src/main/java/com/github/klimgeran/symbol/discord/treasury/event/MessageListener.java . Это предназначено для добавления message.getContent().equalsIgnoreCase(“!nem”)), если мы сможем добавить эту строку кода, мы закончим. Код который мы добавили, вы можете посмотреть выше по ссылке.
Мы решили создать следующие команды для работы с ботом:
!treasury nem
!treasury symbol
!treasury all
В основном проблема заключается в том, что nis2.host vps работает на Centos 8, и нужно было установить Git, чтобы можно было клонировать репозиторий с GitHub и скомпилировать исходники.
Поскольку установщик пакета centos 8 выдает ошибку, пришлось скопировать исходники с VPS Фабрицио с помощью команды scp.
Скопировав исходники, нужно было запустить «maven» для компиляции.
Чтобы скомпилировать исходники Java, нужно установить openjdk на vps nis2.host.
Снова установщик пакетов Centos 8 выдавал ошибку при “настройке базового репозитория”, поэтому пришлось изменить репозитории Centos в соответствии с этим руководством
Затем можно было запустить (RUN)
Обновить: update -y
Тем самым это позволило обновить докер, но привело к выведу из строя symbol-bootstrap.
Следующим шагом была установка openjdk, чтобы скомпилировать и запустить дискорд бота.
Нода Symbol nis2.host была остановлена, пришлось перезапустить symbol-bootstrap. На этом все.
💜Скажем честно , что идею создания бота предложила Ангел 👼🏻 она сказала звёзды сойдутся так что мы сделаем бота – пазлы 🧩 сложатся и бот 🤖 для комьюнити будет – мы не знали с чего начинать но у нас была команда , страсть , Вера в Symbol . Мы поговорили с Фабрицио и он с удовольствием согласился и Клим , создал группу в телеграмм для общения ! Конечно нас вдохновляете Ягуар, Топорик, Гимре , и все наше сообщество! Мы хотим изучать , вносить вклад , и идти вперёд вместе ! Были моменты когда каждый из нас грустил , но вместе мы поддерживали друг друга особенную поддержку давал Ангел он очень вдохновлял нас ! Ведь всегда тяжело в одиночку – а вместе мы всегда найдём путь и мы идем правильной дорогой , поддерживая и изучая новое мы становимся сильными . Фабрицио и Клим помогали так же Мне ( ангелу ) давая нужные рекомендации! Мы действовали принципам :Не позволяйте своим словам расходиться с поступками. Если ваши действия не соответствуют вашим убеждениям, вы всегда будете чувствовать себя некомфортно.
Мы не спешили, мы делали , ошибались , пробовали . Ошибаются все, и то, как вы поступаете с последствиями своих неверных решений, отражает ваш характер. Признание своих ошибок — это показатель силы, а не слабости. Мы сплатили сильную команду для того что бы вместе сделать пользу для Symbol
Абсолютно нормально испытывать раздражение в некоторых ситуациях. Но терпение и выдержку можно и нужно тренировать. Например, если ваш друг ( это про (ангел 👼🏻 )не так быстро схватывает информацию, как вам хотелось бы, задумайтесь, может, это связано с тем, что вы недостаточно доходчиво объясняете? А может, у него просто нет вашего технического бэкграунда и вам стоит сократить использование специальных терминов? Поэтому мы все не делали поспешных выводов, а помогали друг другу ! Простое «спасибо» или развёрнутый комментарий о том, как вы цените действия другого человека, помогал всем нам идти вперёд!