gpt4 book ai didi

java - RichPresence 不再与 JDA 配合使用

转载 作者:行者123 更新时间:2023-11-30 05:36:30 25 4
gpt4 key购买 nike

我注意到我的机器人没有设置 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);
}
}

但是到了新类(class),我错过了syncid和seasonid,而且我也不知道从哪里得到它们,因为它们不在discord网站的文档中。有没有人找到仍然适用于旧版本的实现,或者有人知道如何获取这两个值?

最佳答案

JDA 是为机器人帐户制作的库。由于机器人根本无法使用丰富的存在,因此它实际上不支持设置它。此外,discord 的 API 并不真正支持以这种方式进行设置。

使用丰富状态的正确方法是通过 IPC 连接 discord-rpc SDKGame SDK 。您可以使用discord-rpc SDK的java库,例如java-discord-rpc它连接到您的 Discord 客户端并设置在那里的状态。

通过网关 session 更新丰富的状态(如 JDA 使用)未记录在案,并且可能会发生更改。

关于java - RichPresence 不再与 JDA 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com