Гайд Нормальный Discord RPC с кнопками без нативок

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Мар 2024
Сообщения
48
Реакции
2
Ну тип да всем привет. Мне нехуй было делать, поэтому выложу здесь то, как сделать нормальный дисорд рпс с кнопками без использования нативок (что бы можно было запускать на windows, linux и macos).

Первое что вам надо сделать, так это добавить в ваш проект мою библиотеку, которая находится на моём гитхабе (репозиторий —
Пожалуйста, авторизуйтесь для просмотра ссылки.
). По сути это сильно модифицированный discord-ipc от метеора, но вам на это будет конечно же похуй.
Если вы используете gradle в вашем проекте (тобишь вы делаете клиент на фабрике или фордже), то вы можете добавить библиотеку через мой maven репозиторий:
build.gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:discord-ipc:1.2" //Данная строчка не включит библиотеку в ваш джарник при билде. Вы можете использовать ShadowGradle плагин либо другие способы, чтобы внедрить библиотеку в джарник.
}
Если вы сидите на mcp, то просто скачайте последний релиз и закиньте в либы либо куда-то ещё я хз, ни сидел на mcp.

Ну так, с этим разобрались, теперь остался вопрос как этим пользоваться? Для этого я дам вам пример кода:

example:
Expand Collapse Copy
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 (никак не связано с примером кода, данным выше!!!):
1762122881174.png


Ну, вроде всё. Если есть вопросы — пишите. :CoolCat:
 
Последнее редактирование:
Ну тип да всем привет. Мне нехуй было делать, поэтому выложу здесь то, как сделать нормальный дисорд рпс с кнопками без использования нативок (что бы можно было запускать на windows, linux и macos).

Первое что вам надо сделать, так это добавить в ваш проект мою библиотеку, которая находится на моём гитхабе (репозиторий —
Пожалуйста, авторизуйтесь для просмотра ссылки.
). По сути это сильно модифицированный discord-ipc от метеора, но вам на это будет конечно же похуй.
Если вы используете gradle в вашем проекте (тобишь вы делаете клиент на фабрике или фордже), то вы можете добавить библиотеку через мой maven репозиторий:
build.gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:discord-ipc:1.2" //Данная строчка не включит библиотеку в ваш джарник при билде. Вы можете использовать ShadowGradle плагин либо другие способы, чтобы внедрить библиотеку в джарник.
}
Если вы сидите на mcp, то просто скачайте последний релиз и закиньте в либы либо куда-то ещё я хз, ни сидел на mcp.

Ну так, с этим разобрались, теперь остался вопрос как этим пользоваться? Для этого я дам вам пример кода:

example:
Expand Collapse Copy
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 (никак не связано с примером кода, данным выше!!!):
Посмотреть вложение 319002

Ну, вроде всё. Если есть вопросы — пишите. :CoolCat:
лев :roflanEbalo:
 
Ну тип да всем привет. Мне нехуй было делать, поэтому выложу здесь то, как сделать нормальный дисорд рпс с кнопками без использования нативок (что бы можно было запускать на windows, linux и macos).

Первое что вам надо сделать, так это добавить в ваш проект мою библиотеку, которая находится на моём гитхабе (репозиторий —
Пожалуйста, авторизуйтесь для просмотра ссылки.
). По сути это сильно модифицированный discord-ipc от метеора, но вам на это будет конечно же похуй.
Если вы используете gradle в вашем проекте (тобишь вы делаете клиент на фабрике или фордже), то вы можете добавить библиотеку через мой maven репозиторий:
build.gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:discord-ipc:1.2" //Данная строчка не включит библиотеку в ваш джарник при билде. Вы можете использовать ShadowGradle плагин либо другие способы, чтобы внедрить библиотеку в джарник.
}
Если вы сидите на mcp, то просто скачайте последний релиз и закиньте в либы либо куда-то ещё я хз, ни сидел на mcp.

Ну так, с этим разобрались, теперь остался вопрос как этим пользоваться? Для этого я дам вам пример кода:

example:
Expand Collapse Copy
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 (никак не связано с примером кода, данным выше!!!):
Посмотреть вложение 319002

Ну, вроде всё. Если есть вопросы — пишите. :CoolCat:
Годно
 
Назад
Сверху Снизу