Категория

Команды для работы с ботом с Дискорд Ботом 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:

ovSUe2ETDxbCIpWego3UiOihSTy8PpXDG rNNJ10SlV IPWWM4yFW0PbHk9qFgjrcqco7niZjc97LBqmYtZPOmeuSbEx40x7D3 r8x NQtG3zPwYkaVk5o6rT21pYz502IEpaevEEAHv2ujPpeigKpE • 🇷🇺 Блог Symbol

Нам нужно было выбрать язык программирования для нашего бота. При выборе языка программирования, нужно было учитывать API Discord, а также Symbol SDK & NEM.

Код Java структурирован как проект maven и у нас должен быть установлен плагин maven в нашей среде разработки IDE pyCharm, но так как pyCharm не поддерживает JAVA, нужно работать в среде Eclipse IDE, что представляло для меня и для Angel сложность.

https://www.eclipse.org/downloads/packages/release/2022-03/r/eclipse-ide-enterprise-java-and-web-developers

Фабрицио создал фундамент на языке JAVA,так как он достаточно хорошо знаком с языком программирования JAVA, а я в это время, вместе с Ангел приступил к созданию бота, через сайт разработчиков дискорд https://discord.com/developers

SAy2d5vnoZs9RGVBlpeAz1tQwhW5Y6V9l0TB8kVlukZaHuquzUA355dPpvQ9L BPBlTss1qaEkaAMut6 v1Cv9YO1TcU • 🇷🇺 Блог Symbol

Также мы создали инфографику, возможно в будущем мы изменим ICON, мы будем рады любым идеям из комьюнити.
LT9xWD8GFgCzP0CpVTe • 🇷🇺 Блог Symbol

Дальше нам нужно было, узнать точные адреса сокровищницы Symbol и NEM. В итоге мы это получили:

Мы нашли руководство по создание дискорд бота с помощью 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:

fk2c1X4fq5rpvUDuZPQheGNyY ZHUOYGMH2P3gy6hkC62C9bxnz 5k60AOZTwD RzzZwfGFhK6PF7VTZjdF0JrRysMpWxXXLM j7Vv4h 80zZ9nRPrfZDLl5NmOIVE4QpVzgJ70LXHtv1F7 CXIQF 0 • 🇷🇺 Блог Symbol

Документацию которую мы использовали для NEM и Symbol:

https://bob.nem.ninja/docs

https://docs.symbol.dev/guides/account/getting-account-information.html

Далее Фабрицио планировал запустить Symbol Java sdk для получения информации с казначейского счета Symbol. Поэтому нам нужна была помощь в документации Symbol и NEM.

И в это время у Фабрицио появилась проблема с его рабочим пространством Eclipse. 

e7xnfwe5fz9a 2ERHeC1e3a93CzqkFcdx79XleQA3ed9zof4C5yElMxN2R5W9ah65Z7Z0w7rWnVFwRrl mwKkBKUHTc3ZQIX77KArkKu4TPqJXxFRybqpDqwQoWF7wmw z1PMYEO 1gYva8FGF4KCEU • 🇷🇺 Блог Symbol

Работа над созданием бота была задержана на несколько дней, но вскоре все нормализовалось.

Чтобы тестировать бота нам пришлось добавить его на неофициальный дискорд сервер, чтобы тестировать бота:

R2xJdjb kr7CRFeWhD8uVEijk9XElcxeJjfRXcefGkmwe2BfnvCEPw35GRJfS mpBYlnpYjCTwRtSX2fn9IVJglqE7ceZPBlOZy HdWkJ9OH8vsxVVVB7 1m7euYAl vC5p59634 TibiHe K 8CW0k • 🇷🇺 Блог Symbol

И основная проблема которая была выявлена это «reactive» API в Discord4J. Так как при вызове команды SDK для казначейства Symbol, вне метода обратного вызова сообщения Discord, получается положительный ответ с казначейского счета, а когда вызов происходит из SDK Symbol, метод «Mono» в «reactive» Discord4j, появляется ошибка. Но Фабрицио благодаря его знаниям в программировании удалось решить это.

Через несколько дней было обнаружено, что ключ (токен) бота был виден в истории GitHub, поэтому он больше не был безопасным, поэтому мы сгенерировали новый ключ, за несколько минут.

iVsATegnW8DqfjxGHdhXTw79apycQTD3zawZ11qgjMfteMFV69j9laY54Sug xKR2u3mdElSCyl6ZXnTajEOdPSrqHoEwFWjZ dBsgYT4zl ZaSWPkQVPVuVR8KhlhIw2F69YU7v2rV56zLeAy5srg • 🇷🇺 Блог Symbol

При работе с 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 в соответствии с этим руководством

https://techglimpse.com/failed-metadata-repo-appstream-centos-8

Затем можно было запустить (RUN)

Обновить: update -y

Тем самым это позволило обновить докер, но привело к выведу из строя symbol-bootstrap.

Следующим шагом была установка openjdk, чтобы скомпилировать и запустить дискорд бота.

Нода Symbol nis2.host была остановлена, пришлось перезапустить symbol-bootstrap. На этом все.

💜Скажем честно , что идею создания бота предложила Ангел 👼🏻 она сказала звёзды сойдутся так что мы сделаем бота – пазлы 🧩 сложатся и бот 🤖 для комьюнити будет – мы не знали с чего начинать но у нас была команда , страсть , Вера в Symbol . Мы поговорили с Фабрицио и он с удовольствием согласился и Клим , создал группу в телеграмм для общения ! Конечно нас вдохновляете Ягуар, Топорик, Гимре , и все наше сообщество! Мы хотим изучать , вносить вклад , и идти вперёд вместе ! Были моменты когда каждый из нас грустил , но вместе мы поддерживали друг друга особенную поддержку давал Ангел он очень вдохновлял нас ! Ведь всегда тяжело в одиночку – а вместе мы всегда найдём путь и мы идем правильной дорогой , поддерживая и изучая новое мы становимся сильными . Фабрицио и Клим помогали так же Мне ( ангелу ) давая нужные рекомендации! Мы действовали принципам :Не позволяйте своим словам расходиться с поступками. Если ваши действия не соответствуют вашим убеждениям, вы всегда будете чувствовать себя некомфортно. 

Мы не спешили, мы делали , ошибались , пробовали . Ошибаются все, и то, как вы поступаете с последствиями своих неверных решений, отражает ваш характер. Признание своих ошибок — это показатель силы, а не слабости. Мы сплатили сильную команду для того что бы вместе сделать пользу для Symbol 

Абсолютно нормально испытывать раздражение в некоторых ситуациях. Но терпение и выдержку можно и нужно тренировать. Например, если ваш друг ( это про (ангел 👼🏻 )не так быстро схватывает информацию, как вам хотелось бы, задумайтесь, может, это связано с тем, что вы недостаточно доходчиво объясняете? А может, у него просто нет вашего технического бэкграунда и вам стоит сократить использование специальных терминов? Поэтому мы все не делали  поспешных выводов, а помогали друг другу ! Простое «спасибо» или развёрнутый комментарий о том, как вы цените действия другого человека, помогал всем нам идти вперёд!