Fix client ID race condition, attempt to fix URL escaping
This commit is contained in:
parent
0e4a9ff7e0
commit
02f60c2162
3 changed files with 23 additions and 7 deletions
|
@ -15,11 +15,19 @@ import lombok.val;
|
|||
import reactor.core.publisher.Mono;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.TreeSet;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.MatchResult;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public final class DPUtils {
|
||||
|
||||
public static final Pattern URL_PATTERN = Pattern.compile("https?://\\S*");
|
||||
public static final Pattern FORMAT_PATTERN = Pattern.compile("[*_~]");
|
||||
|
||||
public static EmbedCreateSpec embedWithHead(EmbedCreateSpec ecs, String displayname, String playername, String profileUrl) {
|
||||
return ecs.setAuthor(displayname, profileUrl, "https://minotar.net/avatar/" + playername + "/32.png");
|
||||
}
|
||||
|
@ -51,8 +59,17 @@ public final class DPUtils {
|
|||
}
|
||||
|
||||
private static String escape(String message) {
|
||||
return message.replaceAll("([*_~])", Matcher.quoteReplacement("\\") + "$1");
|
||||
}
|
||||
//var ts = new TreeSet<>();
|
||||
var ts = new TreeSet<int[]>(Comparator.comparingInt(a -> a[0])); //Compare the start, then check the end
|
||||
var matcher = URL_PATTERN.matcher(message);
|
||||
while (matcher.find())
|
||||
ts.add(new int[]{matcher.start(), matcher.end()});
|
||||
matcher = FORMAT_PATTERN.matcher(message);
|
||||
Function<MatchResult, String> aFunctionalInterface = result ->
|
||||
Optional.ofNullable(ts.floor(new int[]{result.start(), 0})).map(a -> a[1]).orElse(0) < result.start()
|
||||
? "\\\\" + result.group() : result.group();
|
||||
return matcher.replaceAll(aFunctionalInterface); //Find nearest URL match and if it's not reaching to the char then escape
|
||||
} //TODO: Java 11 method overload, not present in Java 8
|
||||
|
||||
public static Logger getLogger() {
|
||||
if (DiscordPlugin.plugin == null || DiscordPlugin.plugin.getLogger() == null)
|
||||
|
|
|
@ -155,7 +155,7 @@ public class ChannelconCommand extends ICommand2DC {
|
|||
"Use the ID (command) of the channel, for example `g` for the global chat.", //
|
||||
"To remove a connection use @ChromaBot channelcon remove in the channel.", //
|
||||
"Mentioning the bot is needed in this case because the " + DiscordPlugin.getPrefix() + " prefix only works in " + DPUtils.botmention() + ".", //
|
||||
"Invite link: <https://discordapp.com/oauth2/authorize?client_id=" + module.clientID + "&scope=bot&permissions=268509264>"
|
||||
"Invite link: <https://discordapp.com/oauth2/authorize?client_id=" + DiscordPlugin.dc.getApplicationInfo().map(info -> info.getId().asString()).blockOptional().orElse("Unknown") + "&scope=bot&permissions=268509264>"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,13 +104,12 @@ public class MinecraftChatModule extends Component<DiscordPlugin> {
|
|||
return getConfig().getData("allowPrivateChat", true);
|
||||
}
|
||||
|
||||
String clientID;
|
||||
|
||||
@Override
|
||||
protected void enable() {
|
||||
if (DPUtils.disableIfConfigErrorRes(this, chatChannel(), chatChannelMono()))
|
||||
return;
|
||||
DiscordPlugin.dc.getApplicationInfo().subscribe(info -> clientID = info.getId().asString());
|
||||
/*clientID = DiscordPlugin.dc.getApplicationInfo().blockOptional().map(info->info.getId().asString())
|
||||
.orElse("Unknown"); //Need to block because otherwise it may not be set in time*/
|
||||
listener = new MCChatListener(this);
|
||||
TBMCCoreAPI.RegisterEventsForExceptions(listener, getPlugin());
|
||||
TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(this), getPlugin());//These get undone if restarting/resetting - it will ignore events if disabled
|
||||
|
|
Loading…
Reference in a new issue