使用Java Discord API将消息从直接消息传输到特定通道

5jvtdoz2  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(250)

我想让我的机器人在服务器通道说,无论用户dm它。

public class PrivateMessage extends ListenerAdapter
{
    private TextChannel channel;

    @Override
    public void onReady(@NotNull ReadyEvent event)
    {
        channel = event.getJDA().getChannelById(TextChannel.class, 962688156942073887L);
    }

    @Override
    public void onMessageReceived(@NotNull MessageReceivedEvent event)
    {
        if (event.isFromType(ChannelType.PRIVATE))
            channel.sendMessage(MessageCreateData.fromMessage(event.getMessage())).queue();
    }
}

一开始它工作正常,直到我把它做成了一个图像。

java.lang.IllegalStateException: Cannot build an empty message. You need at least one of content, embeds, components, or files

我该怎么补救呢?

8hhllhi2

8hhllhi21#

1.通道声明不正确。它没有类型...在这种情况下,应使用TextChannel channel = (whatever)Channel channel = (whatever)
1.您收到错误消息是因为
channel**不在onMessageReceived()的作用域中。您需要了解作用域。

  1. onReady()在这种情况下将没有用处。就像我之前提到的...因为作用域。
    下面是您的代码应该看起来像:
@Override
public void onMessageReceived(@NotNull MessageReceivedEvent event) {
    if(event.isFromType(ChannelType.PRIVATE)){
        TextChannel textChannel = event.getJDA().getGuildById("1046510699809079448").getTextChannelById("1046510701184831540");
        textChannel.sendMessage(event.getMessage().getContentRaw()).queue();
    }

您需要使用公会的ID从公会获取文本通道。然后您可以使用**event.getMessage()获取发送到机器人的消息,并通过.getContentRaw()获取其内容,然后使用textChannel.sendMessage().queue()**发送该消息

相关问题