1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем FAcky, 17 июн 2024.

  1. Автор темы
    FAcky

    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("Вы имеете три предупреждения. Администрация уведомлена и рассматривает ваше наказание.");
    }
    }
    }
    }

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

    Вложения:

  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    JDA необходимо зашейдить в джарник с релокацией пакетов, либо указать в libraries в plugins.yml, если версия 1.17+
     
  3. Автор темы
    FAcky

    FAcky Активный участник

    Баллы:
    61
    Имя в Minecraft:
    FAcky
    сделал второе и теперь уже новая ошибка :D
     

    Вложения:

  4. Автор темы
    FAcky

    FAcky Активный участник

    Баллы:
    61
    Имя в Minecraft:
    FAcky
    все прописал вроде правильно тут
     

    Вложения:

  5. koten0k

    koten0k Активный участник Пользователь

    Баллы:
    46
    Ошибка из-за того, что данные о артефакте некорректные
     
  6. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Убедись, чтобы в plugin.yml в libraries JDA был указан в верном формате (как указано в ошибке)
     

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