Начинающий
- Статус
- Оффлайн
- Регистрация
- 7 Мар 2024
- Сообщения
- 63
- Реакции
- 2
Ну тип да всем привет. Мне нехуй было делать, поэтому выложу здесь то, как сделать нормальный дисорд рпс с кнопками без использования нативок (что бы можно было запускать на windows, linux и macos).
Первое что вам надо сделать, так это добавить в ваш проект мою библиотеку, которая находится на моём гитхабе (репозиторий —
Если вы используете gradle в вашем проекте (тобишь вы делаете клиент на фабрике или фордже), то вы можете добавить библиотеку через мой maven репозиторий:
Если вы сидите на mcp, то просто скачайте последний релиз и закиньте в либы либо куда-то ещё я хз, ни сидел на mcp.
Ну так, с этим разобрались, теперь остался вопрос как этим пользоваться? Для этого я дам вам пример кода:
Пример работы rpc (никак не связано с примером кода, данным выше!!!):
Ну, вроде всё. Если есть вопросы — пишите.
Первое что вам надо сделать, так это добавить в ваш проект мою библиотеку, которая находится на моём гитхабе (репозиторий —
Пожалуйста, авторизуйтесь для просмотра ссылки.
). По сути это сильно модифицированный discord-ipc от метеора, но вам на это будет конечно же похуй.Если вы используете gradle в вашем проекте (тобишь вы делаете клиент на фабрике или фордже), то вы можете добавить библиотеку через мой maven репозиторий:
build.gradle:
repositories {
maven {
name = "ferra13671-maven"
url = "https://ferra13671.github.io/maven/"
}
}
dependencies {
implementation "com.ferra13671:discord-ipc:1.2" //Данная строчка не включит библиотеку в ваш джарник при билде. Вы можете использовать ShadowGradle плагин либо другие способы, чтобы внедрить библиотеку в джарник.
}
Ну так, с этим разобрались, теперь остался вопрос как этим пользоваться? Для этого я дам вам пример кода:
example:
package example;
import com.ferra13671.discordipc.AvatarType;
import com.ferra13671.discordipc.UserAvatar;
import com.ferra13671.discordipc.activity.Button;
import com.ferra13671.discordipc.DiscordIPC;
import com.ferra13671.discordipc.activity.RichPresence;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void startRPC() {
//Запускаем дискорд ipc
if (!DiscordIPC.start(932987954815696957L, () -> System.out.println("Discord IPC подключен для пользователя: " + DiscordIPC.getUser().username()))) {
System.out.println("Не удалось запустить Discord IPC");
return;
}
//Настраиваем активность
RichPresence presence = new RichPresence();
/*
Если нужно изменить информацию об активности,
то можно использовать presence.update(), в который вы должны передать функцию,
принимающую информацию о текущей активности и возвращающую измененную информацию об активности.
*/
presence.update(activityInfo ->
activityInfo
.setDetails("Monkey!!!")
.setState("ABC")
.setLargeImage("a")
.setLargeText("Large image")
.setSmallImage("b")
.setSmallText("Small Image")
//.setParty(new Party("party", 1, 4)) //Можно также добавлять команду (правда смысл от этого?)
.setButtons(new Button("Nah", "https://www.youtube.com/watch?v=dQw4w9WgXcQ")) //Максимально под активностью может быть видно только 2 кнопки
);
//Устанавливаем активность в ipc
DiscordIPC.setRichPresence(presence);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
Можно также получить InputStream аватарки пользователя, которая может быть как и простой картинкой, так и гифкой (можно узнать при помощи энума AvatarType)
Не рекомендую пытаться получить аватарку пользователя сразу после старта ipc, т.к. информация о пользователе еще может быть не передана дискордом.
*/
UserAvatar userAvatar = DiscordIPC.getUser().getAvatarImage();
if (userAvatar != null) {
Path path = Paths.get("Avatar." + (userAvatar.avatarType() == AvatarType.Image ? "png" : "gif"));
try (OutputStream outputStream = Files.newOutputStream(path)) {
outputStream.write(userAvatar.inputStream().readAllBytes());
userAvatar.inputStream().close();
System.out.printf("Аватарка пользователя была сохранена по пути '%s'", path);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public static void stopRPC() {
//При надобности останавливаем рпс
DiscordIPC.stop();
}
}
Пример работы rpc (никак не связано с примером кода, данным выше!!!):
Ну, вроде всё. Если есть вопросы — пишите.

Последнее редактирование:
