Невозможно заменить все, используя getMember в члене гильдии - PullRequest
0 голосов
/ 14 июля 2020
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.hooks.ListenerAdapter;

import java.awt.*;
import java.util.Random;

public class GuildMemberJoinEvent extends ListenerAdapter {

    String[] messages = {
            "[member] joined. You must construct additional pylons.",
            "Never gonna give [member] up. Never let [member] down!",
            "Hey! Listen! [member] has joined!",
            "Ha! [member] has joined! You activated my trap card!",
            "We've been expecting you, [member].",
            "It's dangerous to go alone, take [member]!",
            "Swoooosh. [member] just landed.",
            "Brace yourselves. [member] just joined the server.",
            "A wild [member] appeared.",
            "Is it hot in here or is it just me? Oh [member] joined that explains it"
    };
    public void onGuildMemberJoin(GuildMemberJoinEvent event){
        Random rand = new Random();
        int number = rand.nextInt(messages.length);

        EmbedBuilder join = new EmbedBuilder();
        join.setColor(Color.red);
        join.setDescription(messages[number].replaceAll("[member]]", event.getMember().getAsMention()));

    }
}

По какой-то причине jda не позволяет мне использовать event.getMember () при использовании replaceAll в guildjoinevent, и я действительно не понимаю, почему это так.

1 Ответ

1 голос
/ 14 июля 2020

У вас две проблемы

  1. Опечатка.
  2. Аргумент 1 st для replaceAll интерпретируется как Регулярное выражение (regex) , а [ ] определяет класс символов (имеет особое значение в регулярном выражении).

Как решить?

  1. Исправьте опечатку: "[member]]""[member]"
  2. Если вы хотите использовать replaceAll, вам нужно escape [ ]"\\[member]"

В качестве альтернативы вы можете использовать метод replace, который не принимает регулярное выражение в качестве аргумента 1 st , но передается в строке как литерал (что означает как есть ). Однако вам все равно нужно исправить опечатку, как в messages[number].replace("[member]", ...).

Вероятно, проще всего взглянуть на это в упрощенном виде

static String[] messages = {
        "[member] joined. You must construct additional pylons.",
        "Never gonna give [member] up. Never let [member] down!",
        "Hey! Listen! [member] has joined!",
        "Ha! [member] has joined! You activated my trap card!",
        "We've been expecting you, [member].",
        "It's dangerous to go alone, take [member]!",
        "Swoooosh. [member] just landed.",
        "Brace yourselves. [member] just joined the server.",
        "A wild [member] appeared.",
        "Is it hot in here or is it just me? Oh [member] joined that explains it"
};

public static void main(String[] args) {
    Random rand = new Random();
    int number = rand.nextInt(messages.length);

    String member = "Stanley42";

    String original = messages[number].replaceAll("[member]]", member);
    String originalWithEscaping = messages[number].replaceAll("\\[member]]", member);
    String fixedOriginal = messages[number].replaceAll("\\[member]", member);

    String useReplace = messages[number].replace("[member]]", member);
    String fixedUseReplace = messages[number].replace("[member]", member);

    System.out.println(original);
    System.out.println(originalWithEscaping);
    System.out.println(fixedOriginal);
    System.out.println(useReplace);
    System.out.println(fixedUseReplace);
}

даст вам этот пример вывода

Never gonna give [membeStanley42 up. Never let [membeStanley42 down!
Never gonna give [member] up. Never let [member] down!
Never gonna give Stanley42 up. Never let Stanley42 down!
Never gonna give [member] up. Never let [member] down!
Never gonna give Stanley42 up. Never let Stanley42 down!
...