implement chat relay (Discord to minecraft)
aa
This commit is contained in:
parent
2f823a9916
commit
e697b1a0f5
5
pom.xml
5
pom.xml
@ -81,5 +81,10 @@
|
|||||||
<version>1.19.3-R0.1-SNAPSHOT</version>
|
<version>1.19.3-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.dv8tion</groupId>
|
||||||
|
<artifactId>JDA</artifactId>
|
||||||
|
<version>5.0.0-beta.11</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package testplugin.plugin.Commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import testplugin.plugin.Events.DiscordRelayChannelIdChangedEvent;
|
||||||
|
|
||||||
|
public class setDiscordRelayChannelIdCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (sender instanceof Player | sender instanceof Server && args.length == 1) {
|
||||||
|
String discordChannelId = args[0];
|
||||||
|
DiscordRelayChannelIdChangedEvent event = new DiscordRelayChannelIdChangedEvent(discordChannelId);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
sender.sendMessage("Set discord relay channel to " + discordChannelId);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package testplugin.plugin.Commands;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import testplugin.plugin.Events.DiscordTokenChangedEvent;
|
||||||
|
|
||||||
|
public class setDiscordTokenCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (sender instanceof Player | sender instanceof Server && args.length == 1) {
|
||||||
|
String discordToken = args[0];
|
||||||
|
DiscordTokenChangedEvent event = new DiscordTokenChangedEvent(discordToken);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
sender.sendMessage("Set discord bot token to " + discordToken);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -6,9 +6,7 @@ import org.bukkit.Server;
|
|||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
public class setWebhookCommand implements CommandExecutor {
|
public class setWebhookCommand implements CommandExecutor {
|
||||||
// This method is called, when somebody uses our command
|
// This method is called, when somebody uses our command
|
29
src/main/java/testplugin/plugin/DiscordMessageEvent.java
Normal file
29
src/main/java/testplugin/plugin/DiscordMessageEvent.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package testplugin.plugin;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.entities.*;
|
||||||
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class DiscordMessageEvent extends ListenerAdapter {
|
||||||
|
|
||||||
|
private Plugin plugin;
|
||||||
|
private Config config;
|
||||||
|
|
||||||
|
public DiscordMessageEvent(Plugin p,Config cfg) {
|
||||||
|
this.plugin = p;
|
||||||
|
this.config = cfg;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onMessageReceived(MessageReceivedEvent event) {
|
||||||
|
User author = event.getAuthor();
|
||||||
|
String message = event.getMessage().getContentStripped();
|
||||||
|
if (event.isFromGuild() && !author.isBot() && event.getGuildChannel().getId().equals(config.getValue("discordRelayChannel").toString())) {
|
||||||
|
plugin.getServer().broadcastMessage(ChatColor.DARK_BLUE + "[DISCORD] " + ChatColor.WHITE + author.getEffectiveName() + ": " + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package testplugin.plugin.Events;
|
||||||
|
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public final class DiscordRelayChannelIdChangedEvent extends Event {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public DiscordRelayChannelIdChangedEvent(String msg) {
|
||||||
|
message = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package testplugin.plugin.Events;
|
||||||
|
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public final class DiscordTokenChangedEvent extends Event {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public DiscordTokenChangedEvent(String msg) {
|
||||||
|
message = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
@ -99,4 +99,22 @@ public class Events implements Listener {
|
|||||||
config.setValue("webhookURL",this.webhookURL);
|
config.setValue("webhookURL",this.webhookURL);
|
||||||
this.plugin.saveConfig();
|
this.plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
|
public void onDiscordTokenChanged(DiscordTokenChangedEvent event) {
|
||||||
|
String discordToken = event.getMessage();
|
||||||
|
Config config = new Config(this.plugin);
|
||||||
|
logger.warning("discord token changed!");
|
||||||
|
config.setValue("discordBotToken",discordToken);
|
||||||
|
this.plugin.saveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
|
public void onDiscordRelayChannelIdChanged(DiscordRelayChannelIdChangedEvent event) {
|
||||||
|
String discordRelayChannelId = event.getMessage();
|
||||||
|
Config config = new Config(this.plugin);
|
||||||
|
logger.warning("discord relay channel id changed!");
|
||||||
|
config.setValue("discordRelayChannel",discordRelayChannelId);
|
||||||
|
this.plugin.saveConfig();
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,14 @@
|
|||||||
package testplugin.plugin;
|
package testplugin.plugin;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
|
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import testplugin.plugin.Commands.setDiscordRelayChannelIdCommand;
|
||||||
|
import testplugin.plugin.Commands.setDiscordTokenCommand;
|
||||||
|
import testplugin.plugin.Commands.setWebhookCommand;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -9,6 +16,9 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public final class WebhookEventLogger extends JavaPlugin {
|
public final class WebhookEventLogger extends JavaPlugin {
|
||||||
private String webhookURL;
|
private String webhookURL;
|
||||||
|
private String discordBotToken;
|
||||||
|
|
||||||
|
private JDA jda;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@ -19,9 +29,19 @@ public final class WebhookEventLogger extends JavaPlugin {
|
|||||||
|
|
||||||
this.webhookURL = config.getValue("webhookURL").toString();
|
this.webhookURL = config.getValue("webhookURL").toString();
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(new Events(getLogger(), this, webhookURL), this);
|
this.discordBotToken = config.getValue("discordBotToken").toString();
|
||||||
|
if (discordBotToken.equals("TOKEN")) {
|
||||||
|
getLogger().warning("Token not set, please set it using \"/discordtoken\" and \"/discordrelaychannelid\" ingame do set the necessary information");
|
||||||
|
} else {
|
||||||
|
getLogger().info("there is a token present");
|
||||||
|
this.jda = JDABuilder.createDefault(discordBotToken).enableIntents(GatewayIntent.GUILD_MESSAGES,GatewayIntent.MESSAGE_CONTENT).addEventListeners(new DiscordMessageEvent(this, config)).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
getServer().getPluginManager().registerEvents(new LoggedEvents(getLogger(), this, webhookURL), this);
|
||||||
|
|
||||||
Objects.requireNonNull(getCommand("webhook")).setExecutor(new setWebhookCommand());
|
Objects.requireNonNull(getCommand("webhook")).setExecutor(new setWebhookCommand());
|
||||||
|
Objects.requireNonNull(getCommand("discordtoken")).setExecutor(new setDiscordTokenCommand());
|
||||||
|
Objects.requireNonNull(getCommand("discordrelaychannelid")).setExecutor(new setDiscordRelayChannelIdCommand());
|
||||||
|
|
||||||
|
|
||||||
DiscordWebhook Webhook = new DiscordWebhook(webhookURL);
|
DiscordWebhook Webhook = new DiscordWebhook(webhookURL);
|
||||||
@ -45,6 +65,7 @@ public final class WebhookEventLogger extends JavaPlugin {
|
|||||||
.setTitle("Server stopped.")
|
.setTitle("Server stopped.")
|
||||||
.setColor(new Color(220, 75, 40))
|
.setColor(new Color(220, 75, 40))
|
||||||
);
|
);
|
||||||
|
jda.shutdownNow();
|
||||||
try {
|
try {
|
||||||
Webhook.execute();
|
Webhook.execute();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -14,9 +14,28 @@ commands:
|
|||||||
|
|
||||||
permission-message: You do not have permission to use this command.
|
permission-message: You do not have permission to use this command.
|
||||||
|
|
||||||
|
usage: /<command> [url]
|
||||||
|
discordtoken:
|
||||||
|
|
||||||
|
permission: webhook.can_set
|
||||||
|
|
||||||
|
description: Set the discord relay bot token used to relay discord messages
|
||||||
|
|
||||||
|
permission-message: You do not have permission to use this command.
|
||||||
|
|
||||||
|
usage: /<command> [url]
|
||||||
|
discordrelaychannelid:
|
||||||
|
|
||||||
|
permission: webhook.can_set
|
||||||
|
|
||||||
|
description: Set the discord relay bot channel id used to relay discord messages
|
||||||
|
|
||||||
|
permission-message: You do not have permission to use this command.
|
||||||
|
|
||||||
usage: /<command> [url]
|
usage: /<command> [url]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
webhook.can_set:
|
webhook.can_set:
|
||||||
description: Allows to set webhook url
|
description: Allows to set webhook/discord bot settings
|
||||||
default: op
|
default: op
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user