Discord4J 3.x 版本提供了一种新的方式来添加消息内的按钮,使用ButtonInteractionListener接口来监听按钮事件。以下是添加按钮的步骤:

  1. 导入 Discord4J 和 Javacord 库
<dependency>
    <groupId>com.discord4j</groupId>
    <artifactId>discord4j-core</artifactId>
    <version>3.1.1</version>
</dependency>

<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.3.2</version>
</dependency>
  1. 创建一个ButtonInteractionListener实现类来处理按钮点击事件
public class MyButtonListener implements ButtonInteractionListener {

    @Override
    public void onButtonInteraction(ButtonInteractionEvent event) {
        // 处理按钮点击事件
    }
}
  1. 创建一个Button对象并将其添加到消息中
// 创建一个按钮
Button button = Button.primary('myButton', 'Click me!');

// 创建一个消息,并将按钮添加到消息中
MessageCreateSpec spec = MessageCreateSpec.create(channelId).setContent('Hello, world!').addComponents(button);
  1. 注册ButtonInteractionListener实现类
// 注册按钮点击事件监听器
client.getEventDispatcher().on(ButtonInteractionEvent.class).subscribe(new MyButtonListener());

完整的示例代码:

import com.discord4j.core.DiscordClientBuilder;
import com.discord4j.core.event.domain.interaction.ButtonInteractionEvent;
import com.discord4j.core.event.domain.message.MessageCreateEvent;
import com.discord4j.core.object.entity.Message;
import com.discord4j.core.object.entity.channel.MessageChannel;
import com.discord4j.core.spec.MessageCreateSpec;
import com.discord4j.discordjson.json.ApplicationCommandOptionData;
import com.discord4j.discordjson.json.ButtonData;
import com.discord4j.discordjson.json.ButtonStyle;
import com.discord4j.discordjson.json.MessageComponentData;
import com.discord4j.discordjson.json.MessageCreateRequest;
import com.discord4j.discordjson.json.MessageRequest;
import com.discord4j.discordjson.json.component.ButtonComponentData;
import com.discord4j.rest.entity.RestChannel;
import com.discord4j.rest.entity.RestMessage;
import com.discord4j.rest.entity.RestMessageChannel;
import com.discord4j.rest.util.AllowedMentions;
import com.discord4j.rest.util.Color;
import com.discord4j.rest.util.MultipartRequest;
import com.discord4j.rest.util.Permission;
import com.discord4j.rest.util.PermissionSet;
import com.discord4j.rest.util.RouteMatcher;
import com.discord4j.rest.util.Snowflake;
import com.discord4j.rest.util.UserData;
import com.discord4j.rest.util.WebhookMessageBuilder;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.MessageAuthor;
import org.javacord.api.entity.message.MessageDecoration;
import org.javacord.api.entity.message.MessageFlag;
import org.javacord.api.entity.message.MessageType;
import org.javacord.api.entity.message.embed.EmbedBuilder;
import org.javacord.api.entity.message.embed.EmbedField;
import org.javacord.api.entity.message.embed.EmbedFooter;
import org.javacord.api.entity.message.embed.EmbedImage;
import org.javacord.api.entity.message.embed.EmbedThumbnail;
import org.javacord.api.entity.message.embed.EmbedVideo;
import org.javacord.api.entity.message.embed.EmbedAuthor;
import org.javacord.api.entity.message.embed.EmbedProvider;
import org.javacord.api.entity.message.embed.internal.EmbedBuilderDelegate;
import org.javacord.api.entity.message.internal.MessageBuilderDelegate;
import org.javacord.api.entity.permission.Permissions;
import org.javacord.api.entity.user.User;
import org.javacord.api.event.interaction.ButtonInteractionCreateEvent;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.interaction.ButtonInteractionListener;
import org.javacord.api.interaction.MessageComponentInteraction;
import org.javacord.api.interaction.callback.InteractionOriginalResponseUpdater;
import org.javacord.api.interaction.callback.InteractionResponseBuilder;
import org.javacord.api.interaction.callback.InteractionResponseUpdater;
import org.javacord.api.interaction.callback.InteractionResponseUpdateBuilder;
import org.javacord.api.interaction.callback.InteractionResponseType;
import org.javacord.api.interaction.internal.ButtonInteractionListenerDelegate;
import org.javacord.api.listener.message.MessageCreateListener;
import org.javacord.api.util.DiscordRegexPattern;
import org.javacord.api.util.cache.Cache;
import org.javacord.api.util.cache.MessageCache;
import org.javacord.core.entity.message.MessageAuthorImpl;
import org.javacord.core.entity.message.MessageDecorationImpl;
import org.javacord.core.entity.message.MessageFlagImpl;
import org.javacord.core.entity.message.MessageImpl;
import org.javacord.core.entity.message.embed.EmbedBuilderDelegateImpl;
import org.javacord.core.entity.message.embed.EmbedFieldImpl;
import org.javacord.core.entity.message.embed.EmbedFooterImpl;
import org.javacord.core.entity.message.embed.EmbedImageImpl;
import org.javacord.core.entity.message.embed.EmbedThumbnailImpl;
import org.javacord.core.entity.message.embed.EmbedVideoImpl;
import org.javacord.core.entity.message.embed.internal.EmbedBuilderDelegateImpl;
import org.javacord.core.entity.message.internal.MessageBuilderDelegateImpl;
import org.javacord.core.entity.permission.PermissionsImpl;
import org.javacord.core.entity.user.UserImpl;
import org.javacord.core.interaction.ButtonInteractionListenerDelegateImpl;
import org.javacord.core.interaction.MessageComponentInteractionImpl;
import org.javacord.core.interaction.callback.InteractionOriginalResponseUpdaterImpl;
import org.javacord.core.interaction.callback.InteractionResponseBuilderImpl;
import org.javacord.core.interaction.callback.InteractionResponseUpdateBuilderImpl;
import org.javacord.core.interaction.internal.ButtonInteractionListenerDelegateImpl;
import org.javacord.core.util.cache.CacheImpl;
import org.javacord.core.util.cache.MessageCacheImpl;
import org.javacord.rest.DiscordRestClient;
import org.javacord.rest.entity.WebhookMessage;
import org.javacord.rest.interaction.InteractionBase;
import org.javacord.rest.interaction.InteractionBaseImpl;
import org.javacord.rest.interaction.InteractionRequest;
import org.javacord.rest.interaction.InteractionRequestImpl;
import org.javacord.rest.interaction.InteractionResponse;
import org.javacord.rest.interaction.InteractionResponseImpl;
import org.javacord.rest.interaction.InteractionType;
import org.javacord.rest.interaction.callback.InteractionOriginalResponseUpdaterImpl;
import org.javacord.rest.interaction.callback.InteractionResponseBuilderImpl;
import org.javacord.rest.interaction.callback.InteractionResponseUpdateBuilderImpl;
import org.javacord.rest.interaction.internal.InteractionRequestImpl;
import org.javacord.rest.interaction.internal.InteractionResponseImpl;
import org.javacord.rest.util.AllowedMentionsImpl;
import org.javacord.rest.util.ColorImpl;
import org.javacord.rest.util.PermissionImpl;
import org.javacord.rest.util.PermissionSetImpl;
import org.javacord.rest.util.SnowflakeImpl;
import org.javacord.rest.util.UserDataImpl;
import org.javacord.rest.util.WebhookMessageBuilderImpl;

import java.awt.*;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyBot {

    public static void main(String[] args) {
        // 创建Discord4J客户端
        DiscordClient client = new DiscordClientBuilder('token').build();

        // 注册按钮点击事件监听器
        client.getEventDispatcher().on(ButtonInteractionEvent.class).subscribe(new MyButtonListener());

        // 启动客户端
        client.login().block();
    }

    public static class MyButtonListener implements ButtonInteractionListener {

        @Override
        public void onButtonInteraction(ButtonInteractionEvent event) {
            // 处理按钮点击事件
        }
    }
}

这是一个基本的消息内添加按钮的教程,如果您需要更高级的功能,请参考 Discord4J 的官方文档。

Discord4J 3.x 版本 Discord Bot 消息内添加按钮教程

原文地址: https://www.cveoy.top/t/topic/jqG1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录