Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Discord API, JDA.

FAcky

Активный участник
Баллы
61
Имя в Minecraft
FAcky
Помогите, пожалуйста, с данным кодов. ошибок в IDE нет, вроде как всё правильно написано, но выдает ошибки при попытке запуска сервера.
Вот код:

import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import org.bukkit.plugin.java.JavaPlugin;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import javax.security.auth.login.LoginException;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public final class Warnbotplugin extends JavaPlugin {

private File warningsFile;
private FileConfiguration warningsConfig;
private JDA jda;
private String notificationChannelId;

@Override
public void onEnable() {
warningsFile = new File(getDataFolder(), "warnings.yml");
if (!warningsFile.exists()) {
warningsFile.getParentFile().mkdirs();
saveResource("warnings.yml", false);
}
warningsConfig = YamlConfiguration.loadConfiguration(warningsFile);

saveDefaultConfig();
String discordToken = getConfig().getString("discord-token");
notificationChannelId = getConfig().getString("notification-channel-id");
jda = JDABuilder.createDefault(discordToken, GatewayIntent.GUILD_MESSAGES).build();
jda.addEventListener(new DiscordListener());

getCommand("warn").setExecutor(new WarnCommand());
getServer().getPluginManager().registerEvents(new PlayerListener(), this);
}

@Override
public void onDisable() {
if (jda != null) {
jda.shutdown();
}
}

public class DiscordListener extends ListenerAdapter {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
String message = event.getMessage().getContentRaw();
if (message.startsWith("/aq-id")) {
String[] args = message.split(" ");
if (args.length == 2) {
String playerName = args[1];
List<String> warnings = getWarnings(playerName);
MessageChannel channel = event.getChannel();
if (warnings.isEmpty()) {
channel.sendMessage("У игрока " + playerName + " нет предупреждений.").queue();
} else {
channel.sendMessage("Предупреждения для игрока " + playerName + ":\n" + String.join("\n", warnings)).queue();
}
}
}
}
}

public List<String> getWarnings(String playerName) {
return warningsConfig.getStringList(playerName);
}

public void addWarning(String playerName, String warning) {
List<String> warnings = getWarnings(playerName);
warnings.add(warning);
warningsConfig.set(playerName, warnings);
saveWarningsConfig();
if (warnings.size() >= 3) {
notifyDiscord(playerName, warning);
}
}

public void notifyDiscord(String playerName, String reason) {
MessageChannel channel = jda.getTextChannelById(notificationChannelId);
if (channel != null) {
channel.sendMessage("Игрок " + playerName + " получил третье предупреждение. Выберите наказание:\n" +
"- Мут\n" +
"- Бан\n" +
"Укажите срок и причину.").queue();
}
}

public void saveWarningsConfig() {
try {
warningsConfig.save(warningsFile);
} catch (IOException e) {
e.printStackTrace();
}
}

public class WarnCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length < 2) {
sender.sendMessage("Использование: /warn <игрок> <причина>");
return false;
}
String playerName = args[0];
String reason = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
addWarning(playerName, reason);
sender.sendMessage("Предупреждение выдано игроку " + playerName + " по причине: " + reason);
return true;
}
}

public class PlayerListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
List<String> warnings = getWarnings(player.getName());
if (warnings.size() >= 3) {
player.sendMessage("Вы имеете три предупреждения. Администрация уведомлена и рассматривает ваше наказание.");
}
}
}
}

ошибку приложил.
 

Вложения:

  • изображение_2024-06-17_204808091.png
    изображение_2024-06-17_204808091.png
    Размер файла
    119,1 КБ
    Просмотров
    8
JDA необходимо зашейдить в джарник с релокацией пакетов, либо указать в libraries в plugins.yml, если версия 1.17+
 

Вложения:

  • изображение_2024-06-17_220438397.png
    изображение_2024-06-17_220438397.png
    Размер файла
    82,6 КБ
    Просмотров
    7
Ошибка из-за того, что данные о артефакте некорректные
 

Поделиться этой страницей

Назад
Верх