我想让机器人在 Discord 上发送一条消息,但它给了我 Java JDA 错误

时间:2021-06-02 19:58:10

标签: java api discord-jda

我编写了代码并且它一开始可以工作,但是当我键入机器人提到的命令“$info”时,它向我显示了下面提到的错误。请我需要帮助

测试机器人类 这个是token的类,这段代码可以正常工作,让bot上线没有任何问题,但问题出在第二类

package testbot1;

import javax.security.auth.login.LoginException;

import net.dv8tion.jda.api.JDA;

import net.dv8tion.jda.api.JDABuilder;

public class Testbot1 {

    public static JDA jda;
    public static String prefix = "$";

      public static void main(String[] args) throws LoginException {

        JDA jda = JDABuilder.createDefault("The Token Here").build();
        
        jda.addEventListener(new commands());

    }
    
}

commands class这是我输入discord $info时应该出现的消息的类,但它给了我以下问题,并告诉我问题出在这一行< /p>

event.getChannel().sendMessage(info.build()).queue();
package testbot1;

import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

public class commands extends ListenerAdapter {
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String[] args = event.getMessage().getContentRaw().split("\\s+");
        
        if (args[0].equalsIgnoreCase(Testbot1.prefix + "info")) {
            EmbedBuilder info = new EmbedBuilder();
            info.setTitle("ElhadedyBot");
            info.setDescription("Currently, this bot is for testing only");
            info.setColor(0xf45642);
            info.setFooter("Created by Youssefeka116", event.getMember().getUser().getAvatarUrl());
            
            event.getChannel().sendTyping().queue();
            event.getChannel().sendMessage(info.build()).queue();
            info.clear();
        }
    }
}

这是我输入 Discord 这个命令“$info”时出现的错误

[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
net.dv8tion.jda.api.exceptions.InsufficientPermissionException: Cannot perform action due to a lack of Permission. Missing permission: MESSAGE_EMBED_LINKS
    at net.dv8tion.jda.internal.entities.AbstractChannelImpl.checkPermission(AbstractChannelImpl.java:329)
    at net.dv8tion.jda.internal.entities.AbstractChannelImpl.checkPermission(AbstractChannelImpl.java:320)
    at net.dv8tion.jda.internal.entities.TextChannelImpl.sendMessage(TextChannelImpl.java:358)
    at testbot1.commands.onGuildMessageReceived(commands.java:19)
    at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:445)
    at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
    at net.dv8tion.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:88)
    at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:70)
    at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:151)
    at net.dv8tion.jda.internal.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:97)
    at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:952)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:839)
    at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:817)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:990)
    at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
    at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
    at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
    at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
    at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
    at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
    at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)

1 个答案:

答案 0 :(得分:1)

<块引用>

net.dv8tion.jda.api.exceptions.InsufficientPermissionException:由于缺乏权限而无法执行操作。缺少权限:MESSAGE_EMBED_LINKS

这会告诉你一切。

您尝试使用

发送嵌入消息
event.getChannel().sendMessage(info.build()).queue();

但是,机器人需要 MESSAGE_EMBED_LINKS 权限才能发送嵌入消息。

在频道或公会中授予机器人权限。

注意频道权限会覆盖公会权限。