繁体   English   中英

Discord Bot,嵌入消息不会发送到频道

[英]Discord Bot, Embed message wont send to the channel

我的机器人不会在 discord 中显示嵌入消息。 它打印的错误位于代码下方。 它命中了 if 语句,因为我在其中放置了一条普通消息并显示了该消息。 但嵌入消息不会显示。

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


public class Commands extends ListenerAdapter{
    
    public String prefix = "!";
    
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        
        String[] args = event.getMessage().getContentRaw().split(" ");
        
        if (args[0].equalsIgnoreCase(prefix + "test")) {
            
            EmbedBuilder embed = new EmbedBuilder();
            embed.setTitle("Stonks Thang", null);
            embed.setDescription("this is the description");
            embed.addField("Embed Feild 1", "This is the field", false);
            embed.setColor(Color.GREEN);
            embed.setFooter("Created by Nick", "");
            event.getChannel().sendMessage(embed.build()).queue();
            embed.clear();
            
        }
    }
    
}

打印出来的错误是这个

[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.IllegalArgumentException: URL must be a valid http(s) or attachment url.
    at net.dv8tion.jda.internal.utils.Checks.check(Checks.java:48)
    at net.dv8tion.jda.api.EmbedBuilder.urlCheck(EmbedBuilder.java:801)
    at net.dv8tion.jda.api.EmbedBuilder.setFooter(EmbedBuilder.java:694)
    at Commands.onGuildMessageReceived(Commands.java:22)
    at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:466)
    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:160)
    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)

试试下面的代码:

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


public class Commands extends ListenerAdapter{
    
    public String prefix = "!";
    
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        
        String[] args = event.getMessage().getContentRaw().split(" ");
        
        if (args[0].equalsIgnoreCase(prefix + "test")) {
            
            EmbedBuilder embed = new EmbedBuilder();
            embed.setTitle("Stonks Thang");
            embed.setDescription("this is the description");
            embed.addField("Embed Feild 1", "This is the field", false);
            embed.setColor(Color.GREEN);
            embed.setFooter("Created by Nick");
            event.getChannel().sendMessage(embed.build()).queue();
        }
    }
    
}

setTitle 和 setFooter 都可以使用 1 arguments 而不是 2。因为如果这样做,默认情况下不会设置它们。 此外,每次您的代码通过 EmbedBuilder 时,它都会创建一个新的构建器。 所以你不需要清除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM