開始之前先補充一下,如何讓使用者將機器人加入伺服器時先自我介紹。
當你的 Discord Bot 被加入伺服器時,你可以利用 onGuildJoin 事件來讓機器人在預設的文字頻道中發送一條歡迎訊息,這樣用戶可以快速了解機器人的功能。
@Override
public void onGuildJoin(GuildJoinEvent event) {
TextChannel defaultChannel = event.getGuild().getDefaultChannel().asTextChannel();
if (defaultChannel != null) {
String welcomeMessage = "大家好!我是小草租屋推播機器人,請使用 `!help` 查看我能幫助你做些什麼!";
defaultChannel.sendMessage(welcomeMessage).queue();
}
}
當機器人加入伺服器時,它會自動在伺服器的預設頻道發送一條歡迎訊息。
下圖是我將機器人加入一個新的伺服器的結果:
將 Discord Bot 轉換為 Spring Bean 可以讓我們更方便地管理機器人的生命周期和依賴注入。首先,我們創建一個新的介面 DiscordBotService,其中定義了傳送訊息的方法。
public interface DiscordBotService {
String sendMessage(String channelId, String message);
String tagUserAndSendMessage(String channelId, String userId, String message);
}
這個介面簡單定義了兩個方法,一個用於發送普通訊息,另一個用於標記用戶並發送訊息。
接著,我們實作這個介面,並將機器人的初始化放在 Spring 的 @PostConstruct 方法中,確保機器人在 Spring 啟動時就已經被建立好。
@Service
public class DiscordBotServiceImpl implements DiscordBotService {
@Value("${discord.token}")
private String discordToken;
Logger log = LoggerFactory.getLogger(DiscordBotServiceImpl.class);
JDA jda;
@PostConstruct
public void init() {
JDABuilder builder = JDABuilder.createDefault(discordToken);
builder.enableIntents(GatewayIntent.MESSAGE_CONTENT);
builder.addEventListeners(new DiscordBotListener());
jda = builder.build();
log.info("Discord bot creation completed.");
}
@Override
public String sendMessage(String channelId, String message) {
TextChannel channel = jda.getTextChannelById(channelId);
if (channel != null) {
channel.sendMessage(message).queue();
}
return "success";
}
@Override
public String tagUserAndSendMessage(String channelId, String userId, String message) {
TextChannel channel = jda.getTextChannelById(channelId);
if (channel != null) {
String taggedMessage = "<@" + userId + "> " + message;
channel.sendMessage(taggedMessage).queue();
}
return "success";
}
}
在之前的實作中,我們將所有的 Discord Bot 邏輯放在 DiscordBotRunner 中,而現在,我們可以將這部分邏輯移動到 Spring Bean 中,並通過注入 DiscordBotService 來實現訊息傳送。
為了方便測試,使用本來的DiscordBotRunner進行訊息發送測試。
@Component
public class DiscordBotRunner implements ApplicationRunner {
@Autowired
DiscordBotService discordBotService;
@Override
public void run(ApplicationArguments args) throws Exception {
discordBotService.sendMessage("你的Channel Id", "使用Service服務發送訊息。");
}
}
可以看到程式有順利運行
今天我們成功地將 Discord Bot 轉換為 Spring Bean,並且添加了當機器人加入伺服器時的自我介紹功能。這樣一來,我們的 Discord Bot 不僅更易於管理,還能更好地與 Spring 框架整合。
明天預計設計Discord Bot的指令!