main
zoli 7 months ago
parent abd9f39f44
commit 1d8cf6c2d4
  1. 22
      src/main/java/zoltan/vari/spotify_mixer_discord_bot/config/DiscordBotConfig.java
  2. 9
      src/main/java/zoltan/vari/spotify_mixer_discord_bot/config/DiscordBotConstants.java
  3. 24
      src/main/java/zoltan/vari/spotify_mixer_discord_bot/eventListener/DiscordCommandService.java
  4. 43
      src/main/java/zoltan/vari/spotify_mixer_discord_bot/eventListener/DiscordEventListener.java

@ -2,9 +2,12 @@ package zoltan.vari.spotify_mixer_discord_bot.config;
import discord4j.core.DiscordClient;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.interaction.ApplicationCommandInteractionEvent;
import discord4j.discordjson.json.ApplicationCommandRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import zoltan.vari.spotify_mixer_discord_bot.eventListener.DiscordCommandService;
@Configuration
public class DiscordBotConfig {
@ -12,15 +15,28 @@ public class DiscordBotConfig {
@Value( "${discord.bot.token}" )
private String token;
@Bean
public DiscordClient discordClient(){
return DiscordClient.create(token);
}
@Bean
public GatewayDiscordClient gatewayDiscordClient(DiscordClient discordClient){
return discordClient.login().block();
public GatewayDiscordClient gatewayDiscordClient(DiscordClient client, DiscordCommandService discordCommandService){
GatewayDiscordClient gw = client.login().block();
ApplicationCommandRequest greetCmdRequest = ApplicationCommandRequest.builder()
.name(DiscordBotConstants.CREATE_SESSION_COMMAND)
.description(DiscordBotConstants.CREATE_SESSION_DESCRIPTION)
.build();
client.getApplicationService()
.createGlobalApplicationCommand(client.getApplicationId().block(), greetCmdRequest)
.subscribe();
gw.on(ApplicationCommandInteractionEvent.class, event -> {
return discordCommandService.processCommand(gw,client,event);
}).subscribe();
return gw;
}
}

@ -0,0 +1,9 @@
package zoltan.vari.spotify_mixer_discord_bot.config;
public class DiscordBotConstants {
public static final String CREATE_SESSION_COMMAND = "createSession";
public static final String CREATE_SESSION_DESCRIPTION = "Creates a spotify mixer session, sends you a link to join the session. It will ask you to first authorize the app to use your spotify data.";
}

@ -0,0 +1,24 @@
package zoltan.vari.spotify_mixer_discord_bot.eventListener;
import discord4j.common.util.Snowflake;
import discord4j.core.DiscordClient;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.interaction.ApplicationCommandInteractionEvent;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.channel.PrivateChannel;
import discord4j.core.spec.InteractionApplicationCommandCallbackReplyMono;
import org.springframework.stereotype.Service;
@Service
public class DiscordCommandService {
public InteractionApplicationCommandCallbackReplyMono processCommand(GatewayDiscordClient gw, DiscordClient client, ApplicationCommandInteractionEvent event){
PrivateChannel userChannel = event.getInteraction().getUser().getPrivateChannel().block();
client.getChannelById(userChannel.getId()).createMessage("test").block();
return event.reply(event.toString());
}
}

@ -1,43 +0,0 @@
package zoltan.vari.spotify_mixer_discord_bot.eventListener;
import discord4j.core.DiscordClient;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.interaction.ApplicationCommandInteractionEvent;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.command.ApplicationCommandOption;
import discord4j.core.object.entity.Message;
import discord4j.discordjson.json.ApplicationCommandOptionData;
import discord4j.discordjson.json.ApplicationCommandRequest;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DiscordEventListener {
@Autowired
private GatewayDiscordClient gw;
@Autowired
private DiscordClient client;
@PostConstruct
public void init(){
ApplicationCommandRequest greetCmdRequest = ApplicationCommandRequest.builder()
.name("create")
.description("creates a new spotify mixer room")
.build();
client.getApplicationService()
.createGlobalApplicationCommand(client.getApplicationId().block(), greetCmdRequest)
.subscribe();
gw.on(ApplicationCommandInteractionEvent.class, event -> {
if (event.getCommandName().equals("greet")) {
return event.reply("Pong!");
}
return event.reply("default");
}).subscribe();
}
}
Loading…
Cancel
Save