RichPresence больше не работает с JDA - PullRequest
1 голос
/ 08 июня 2019

Я заметил, что мой бот установил RichPresence не больше, чем я смотрел сегодня.Последний раз я проверял это в среду, и код работал там же.Поэтому я выполнил это снова сегодня, и RichPresence не был переустановлен как обычно.Теперь я думаю, что Discord изменит свой интерфейс.

Теперь я включил в свой проект последнюю версию JDA и адаптировал код так, чтобы DataObject стал JSONObject, и он все еще не работал.На втором этапе я попытался сделать свой объект «Spielst» объектом RichPresence.К сожалению, это тоже не сработало.

Старый класс:

public class Spielst implements Activity {

    private String name;
    private String url;
    private ActivityType type;

    public static  Spielst getSpielt(String name, String url, ActivityType typ){
        return new Spielst(name,url,typ);
    }


    protected Spielst(String name, String url, ActivityType typ) {
        this.name = name;
        this.url = url;
        this.type = typ;
    }

    @Override
    public boolean isRich() {
        return false;
    }

    @Override
    public RichPresence asRichPresence() {
        return null;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getUrl() {
        return url;
    }

    @Override
    public ActivityType getType() {
        return type;
    }

    @Nullable
    @Override
    public Timestamps getTimestamps() {
        return null;
    }

    public void setPresence(OnlineStatus status, String state, String details, String application_id,
                            String large_image, String small_image, String large_text, String small_text,
                            long timestamp, long since){
        if(Bot.getInstance().getBot() == null)
            return;
        PresenceImpl presence = new PresenceImpl((JDAImpl) Bot.getInstance().getBot()).setCacheActivity(this)
                .setCacheStatus(status);
        JSONObject data = presence.getFullPresence();
        JSONObject game = data.getJSONObject("game");
        game.put("state",state);
        game.put("details", details);
        game.put("application_id", application_id);
        JSONObject assets = new JSONObject();
        game.put("timestamps",new JSONObject().put("start",timestamp));
        assets.put("large_image", large_image);
        assets.put("small_image", small_image);
        assets.put("large_text", large_text);
        assets.put("small_text", small_text);
        game.put("assets",assets);
        game.put("since",since);
        data.put("game",game);
        ((JDAImpl) Bot.getInstance().getBot())
                .getClient().send((new JSONObject()).put("d", data).put("op", 3).toString());
        System.out.println((new JSONObject()).put("d", data).put("op", 3).toString());
    }
}

новый класс:

package de.letsplaybar.discordbot.main.utils;

import de.letsplaybar.discordbot.main.Bot;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.ActivityFlag;
import net.dv8tion.jda.api.entities.RichPresence;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.EnumSet;


/**
 * @author Letsplaybar
 * Created on 05.09.2017.
 */
public class Spielst implements RichPresence {

    private String name;
    private String url;
    private ActivityType type;
    private OnlineStatus status;
    private String state;
    private String details;
    private String application_id;
    private String large_image;
    private String small_image;
    private String large_text;
    private String small_text;
    private long timestamp;
    private long since;

    public static  Spielst getSpielt(String name, String url, ActivityType typ,OnlineStatus status, String state, String details, String application_id,
                                     String large_image, String small_image, String large_text, String small_text,
                                     long timestamp, long since){
        return new Spielst(name,url,typ,status,state,details,application_id,large_image,small_image,large_text,small_text,timestamp, since);
    }


    protected Spielst(String name, String url, ActivityType typ,OnlineStatus status, String state, String details, String application_id,
                      String large_image, String small_image, String large_text, String small_text,
                      long timestamp, long since) {
        this.name = name;
        this.url = url;
        this.type = typ;
    }

    @Override
    public boolean isRich() {
        return false;
    }

    @Override
    public RichPresence asRichPresence() {
        return null;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getUrl() {
        return url;
    }

    @Override
    public ActivityType getType() {
        return type;
    }

    @Nullable
    @Override
    public Timestamps getTimestamps() {
        return null;
    }



    public void setPresence(){
        Bot.getInstance().getBot().getPresence().setActivity(this);
    }

    @Override
    public long getApplicationIdLong() {
        return Long.parseLong(application_id);
    }

    @Nonnull
    @Override
    public String getApplicationId() {
        return application_id;
    }

    @Nullable
    @Override
    public String getSessionId() {
        return "4b2fdce12f639de8bfa7e3591b71a0d679d7c93f";
    }

    @Nullable
    @Override
    public String getSyncId() {
        return "e7eb30d2ee025ed05c71ea495f770b76454ee4e0";
    }

    @Override
    public int getFlags() {
        return ActivityFlag.JOIN_REQUEST.getOffset();
    }

    public long getTimestamp() {
        return timestamp;
    }

    public long getSince() {
        return since;
    }

    @Override
    public EnumSet<ActivityFlag> getFlagSet() {
        return EnumSet.of(ActivityFlag.JOIN_REQUEST);
    }

    @Nullable
    @Override
    public String getState() {
        return state;
    }

    @Nullable
    @Override
    public String getDetails() {
        return details;
    }

    @Nullable
    @Override
    public Party getParty() {
        return new Party("party1234", 1, 6);
    }

    @Nullable
    @Override
    public Image getLargeImage() {
        return new Image(getApplicationIdLong(), large_image, large_text);
    }

    @Nullable
    @Override
    public Image getSmallImage() {
        return new Image(getApplicationIdLong(), small_image, small_text);
    }
}

, но в новом классе я пропускаю синхронизацию ии я тоже не знаю, откуда я их взял, потому что их нет в документации на сайте discord.кто-нибудь нашел реализацию, которая все еще работает для старой версии, или кто-нибудь знает, как получить эти два значения?

Ответы [ 2 ]

1 голос
/ 08 июня 2019

JDA - библиотека, созданная для учетных записей ботов.Поскольку боты вообще не могут использовать богатое присутствие, они фактически не поддерживают его настройку.Более того, API-интерфейс Discord не поддерживает эту настройку таким образом.

Правильный способ использовать расширенное присутствие - это соединение через IPC с discord-rpc SDK или GameSDK .Вы можете использовать библиотеку Java для SDK Discord-RPC, например Java-Discord-RPC , который подключается к вашему клиенту Discord и устанавливает там свое присутствие.

Обновление расширенного присутствия через сеанс шлюза (как использует JDA) не документированное поведение и может быть изменено.

0 голосов
/ 08 июня 2019

Боты не могут иметь богатого присутствия.Отправка запроса вручную в Discord вам не поможет.Если вы самостоятельно загружаетесь, это против Discord TOS .

...