В данной статье подробно описан процесс создания простейшего чат-бота для сервиса Discord на языке Java с помощью библиотеки Discord4J, который будет представлять собой обычный эхо-бот, который отвечает на все сообщения их копиями.
Discord4J - это библиотека написанная на Java 8, выполняющая роль интерфейса к Discod API. С помощью нее как раз можно сделать чат-бот для вашего Discord-сервера.
Для реализации эхо-бота в рамках данной статьи, нам понадобится:
- Java 8 (JDK 8)
- Eclipse IDE с поддержкой Maven проектов (с 2016 года интеграция Maven в Eclipse идет "в коробе", начиная с Eclipse Neon)
- Discord4J (на момент написания статьи, использовалась версия v2.7.0)
1. Создание проекта в Eclipse с использованием Maven
Для начала создаем Maven проект в Eclipse. File -> New -> Project ... или Alt + Shif + N -> Project ... . В списке находим категорию Maven и в ней выбираем Maven Project. Жмем далее.
В следующем окне обязательно ставим галочку "Create a simple project". Жмем далее.
В следующем окне заполняем поля Group ID, Artifact ID, Name, Description на свой вкус. Жмем финиш.
Таким образом мы создали пустой Maven проект для нашего будущего бота, содержание которого примерно следующее:
Открываем в текстовом редакторе файл проекта: pom.xml.
В блок <project> (где-то между <project> и </project>) добавляем следующие тэги:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<repositories> <repository> <id>jcenter</id> <url>http://jcenter.bintray.com</url> </repository> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.github.austinv11</groupId> <artifactId>Discord4j</artifactId> <version>2.7.0</version> </dependency> </dependencies> |
Сохраняем файл и обновляем проект следующим образом: правой кнопкой мыши по проекту в Package Explorer, в всплывающем меню выбираем: Maven -> Update Project.
После проделанной процедуры Maven автоматически загрузит с указанных репозиториев в pom.xml зависимые библиотеки, в нашем случае это Discord4j, и встроит их в проект.
Если ничего плохого не произошло, то проект готов и переходим к написанию кода.
2. Пишем код
Создаем новый package в src/main/java, в нем создаем новый класс для своего бота.
Я приведу пример того, что получилось у меня. Подробно описывать этот код я не буду, потому что эти 100 строк крайне просты. Я добавил комментарии к коду, чего для понимая должно хватить.
Самое важное, что нужно изменить в данном коде, это значение статической константы ECHO_BOT_TOKEN, которая содержит значение уникального ключа вашего чат-бота. Его можно получить в настройках вашего бота на discordapp.com/developers/ в разделе APP BOT USER. Уникальное значение поля Token необходимо скопировать и присвоить переменной ECHO_BOT_TOKEN.
Ниже привожу полный код эхо чат-бота (ниже есть ссылка на Github проекта):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
import sx.blah.discord.api.ClientBuilder; import sx.blah.discord.api.IDiscordClient; import sx.blah.discord.api.events.EventDispatcher; import sx.blah.discord.api.events.IListener; import sx.blah.discord.handle.impl.events.MessageReceivedEvent; import sx.blah.discord.handle.obj.IChannel; import sx.blah.discord.handle.obj.IMessage; import sx.blah.discord.util.DiscordException; import sx.blah.discord.util.MessageBuilder; import sx.blah.discord.util.MissingPermissionsException; import sx.blah.discord.util.RateLimitException; public class EchoBot implements IListener<MessageReceivedEvent>{ /* * Ключ чат-бота, который нужно получить после регистрации бота * тут: https://discordapp.com/developers/applications/me */ public static final String ECHO_BOT_TOKEN = ""; private IDiscordClient dscordClient; // Сущность клиента discord private boolean isConnected; public EchoBot(){ this.isConnected = false; } private void regBot(){ /* * Получаем ссылку на диспетчер событий. */ EventDispatcher dispatcher = dscordClient.getDispatcher(); /* * Регистрируем этого бота в диспетчере. */ dispatcher.registerListener(this); } public void login() throws DiscordException{ ClientBuilder cBuilder = new ClientBuilder(); cBuilder.withToken(EchoBot.ECHO_BOT_TOKEN); /* * В случае неудачи подключения произойдет * исключение DiscordException. */ dscordClient = cBuilder.login(); regBot(); this.isConnected = true; } public void handle(MessageReceivedEvent event){ /* * Получаем объект пришедшего сообщения из объекта события. */ IMessage message = event.getMessage(); /* * Получаем объект канала пришедшего сообщения. */ IChannel channel = message.getChannel(); /* * Достаем содержание сообщения. */ String inputMsgStr = message.getContent(); try{ /* * Отправляем полученное сообщение inputMsgStr обратно * в discord в указанный канал channel через клиент * dscordClient. */ new MessageBuilder(this.dscordClient).withChannel(channel).withContent(inputMsgStr).build(); } catch(RateLimitException e){ System.err.println("Ошибка при отправке сообщения: " + e.getMessage()); e.printStackTrace(); } catch(DiscordException e){ System.err.println("Ошибка при отправке сообщения: " + e.getMessage()); e.printStackTrace(); } catch(MissingPermissionsException e){ System.err.println("Ошибка при отправке сообщения: " + e.getMessage()); e.printStackTrace(); } } public static void main(String[] args){ // создаем бота EchoBot echoDiscordBot = new EchoBot(); try{ // подключаем бот к серверу Discord echoDiscordBot.login(); System.out.println("Бот успешно подключен."); } catch(DiscordException e){ System.err.println("Ошибка при подключении бота к Discord: " + e.getMessage()); } } } |
3. Добавление чат-бота на свой сервер Discord
Как легко и быстро добавить свой чат-бот на свой сервер Discord описано в этой статье.
4. Запуск и тестирование работы чат-бота
Запускаем проект в Eclipse (Ctrl + F11). Если все успешно, то получаем в итоге следующий вывод в консоль:
1 2 3 4 5 |
20:24:38.432: [INFO][main][sx.blah.discord.Discord4J] - Discord4J v2.7.0 20:24:38.442: [INFO][main][sx.blah.discord.Discord4J] - A Java binding for the official Discord API, forked from https://github.com/nerd/Discord4J. Copyright (c) 2016, Licensed under GNU GPLv2 Бот успешно подключен. 20:24:40.251: [INFO][HttpClient@1645942224-21][sx.blah.discord.Discord4J] - Websocket Connected. 20:24:40.531: [INFO][HttpClient@1645942224-20][sx.blah.discord.Discord4J] - Connected to Discord Gateway v5. Receiving 2 guilds. |
А в клиенте Discord мы увидим в онлайне наш добавленный чат-бот, который помечается синей меткой "BOT". Можно проверять работоспособность. Идем в Discord на свой сервер, куда добавили свой чат бот и пишем любое сообщение, получая такую реакцию:
Работает - бот отвечает нам нашими же сообщениями.
На этом все, осталось только поделится полезными ссылками. Свой проект я вкладываю на Github.
Полезные ссылки:
- Список доступных библиотек-оболочек для API Discord
- Репозиторий библиотеки Discord4J на Github
- Официальный сайт библиотеки Discord4J
Давно ищу уроки по написанию бота для Discord, но на русском языке их нет.
Отличная статья. Может быть данный код можно переделать в другой. Например: Пишешь в одном чате, а бот дублирует сообщение в другом чате.
Продолжай писать уроки по боту Discord. Я точно буду их смотреть
Кто-нибудь может помочь? не понял что надо создать в src/main/java.Какой именно package? И как в нем написать данный код?
В src/main/java должны находится файлы исходного кода — классы Java. Эти классы можно располагать для удобства в каталогах — package. В данном случае для данного эхо чат-бота package можно и не создавать, можно сразу создать новый класс в каталоге src/main/java, а в него скопировать код из статьи.
Еще раз, вот ссылка на Github данного проекта: https://github.com/Tetraquark/EchoChatBot — там видно что и как сделано.
Слушай у меня проблема я жму Ctrl+F11 а он пишет не возмаожно загрузить ru.tetraquark.discord.echo-bot.EchoBot.java что делать
P.S. ещё у меня не стоит JRE у меня просто java 8 144
Что за дела??? Я написал скрипт, как в статье
jcenter
http://jcenter.bintray.com
jitpack.io
https://jitpack.io
com.github.austinv11
Discord4j
2.7.0
И на 12-й строчке показывает ошибку. Из-за этого я не могу продолжить. Помогите!
Попробуйте скопировать проект чат-бота из статьи от сюда: https://github.com/Tetraquark/EchoChatBot : перейдя по ссылке надо нажать на зеленую кнопку «Clone or download» и во всплывающем окне нажать «Download zip». Разархивировав проект, импортируйте его в свою Eclipse IDE (File — Import — Exisiting Maven Projects). После импорта можно обновить проект: правой кнопкой мыши по проекту в Package Explorer, в всплывающем меню выбираем: Maven -> Update Project.
Сделайте видео, а то я нифига не понимаю
Вот так
пишет консоль
Error: Could not find or load main class ru.tetraquark.discord.echo_bot.EchoBot
первая проблема это
Build path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace that are strictly compatible with this environment.
вторая проблема это
The value of the field EchoBot.isConnected is not used EchoBot.java