Начинающий
			
			
				
					
				
			
		- Статус
 - Оффлайн
 
- Регистрация
 - 7 Мар 2024
 
- Сообщения
 - 48
 
- Реакции
 - 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 (никак не связано с примером кода, данным выше!!!):
Ну, вроде всё. Если есть вопросы — пишите.

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