簡體   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