Added location information to webhooks

+ Added `World` and `Location` fields
+ Player Alert URLs can have fields for locations
master
Joey Hines 2020-12-06 17:43:42 -06:00
parent 78791c6ee2
commit bc339caad6
No known key found for this signature in database
GPG Key ID: 80F567B5C968F91B
3 changed files with 84 additions and 47 deletions

View File

@ -1,13 +1,20 @@
package xyz.etztech.minealert;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import xyz.etztech.Javacord;
import xyz.etztech.Webhook;
import xyz.etztech.embed.Author;
import xyz.etztech.embed.Embed;
import xyz.etztech.embed.Field;
import xyz.etztech.minealert.commands.AlertMute;
import xyz.etztech.minealert.commands.MainCommand;
import xyz.etztech.minealert.listeners.GriefAlertListener;
import xyz.etztech.minealert.listeners.OreAlertListener;
import java.time.OffsetDateTime;
import java.util.logging.Logger;
public class MineAlert extends JavaPlugin {
@ -68,8 +75,76 @@ public class MineAlert extends JavaPlugin {
return def;
}
/**
* @param player Player to check
* @param muteType Type of alert to check fo
* @return True if the player ignores the alert, false otherwise
*/
static public Boolean hasIgnoreAlertPerm(Player player, MuteType muteType) {
return player.hasPermission("minealert.ignore") || player.hasPermission(muteType.getMetadataValue());
}
/**
* @param baseURL Template URL string
* @param player Player that generated the alert
* @param location Location of the alert
* @return Formatted alert URL
*/
static public String formatAlertURL(String baseURL, Player player, Location location) {
return baseURL.replaceAll("\\{username}", player.getName())
.replaceAll("\\{x}", String.valueOf(location.getBlockX()))
.replaceAll("\\{y}", String.valueOf(location.getBlockY()))
.replaceAll("\\{z}", String.valueOf(location.getBlockZ()))
.replaceAll("\\{world_name}", location.getWorld().getName());
}
/**
* @param location Location to format
* @return Location string
*/
static public String formattedLocation(Location location) {
return String.format("%d %d %d", location.getBlockX(), location.getBlockY(), location.getBlockZ());
}
/**
* @param color Color of the embed
* @param player Player the alert is for
* @param location Location of the alert
* @param message Alert message
* @param baseURL Template url
* @return Alert Embed
*/
static public Embed buildAlertEmbed(Color color, Player player, Location location, String message, String baseURL) {
String usernameURL = formatAlertURL(baseURL, player, location);
return new Embed()
.color(color.getInt())
.description(Javacord.escapeFormat(message))
.timestamp(OffsetDateTime.now())
.author(new Author(player.getName(),
!"".equals(usernameURL) ? usernameURL : "",
String.format("https://minotar.net/helm/%s/100.png", player.getName()),
""))
.addField(new Field("Location", String.format("`%s`", MineAlert.formattedLocation(location))))
.addField(new Field("World", String.format("`%s`", location.getWorld().getName())));
}
/**
* @param webhookURL URL to send the webhook to
* @param color Color of the embed
* @param player Player the alert is for
* @param location Location of the alert
* @param message Alert message
* @param baseURL Template url
*/
public void sendWebhook(String webhookURL, Color color, Player player, Location location, String message, String baseURL) {
this.getServer().getScheduler().runTaskAsynchronously(this, () -> {
Embed embed = buildAlertEmbed(color, player, location, message, baseURL);
try {
Javacord.sendWebhook(webhookURL, new Webhook("@here", embed));
} catch (Exception e) {
this.log(Lang.WEBHOOK_FAILED.getMessage());
}
});
}
}

View File

@ -1,6 +1,5 @@
package xyz.etztech.minealert.listeners;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
@ -13,16 +12,11 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import xyz.etztech.Javacord;
import xyz.etztech.Webhook;
import xyz.etztech.embed.Author;
import xyz.etztech.embed.Embed;
import xyz.etztech.minealert.Color;
import xyz.etztech.minealert.Lang;
import xyz.etztech.minealert.MineAlert;
import xyz.etztech.minealert.MuteType;
import java.time.OffsetDateTime;
import java.util.*;
public class GriefAlertListener implements Listener {
@ -85,7 +79,7 @@ public class GriefAlertListener implements Listener {
"",
"grief.url",
"url"
).replaceAll("\\{username}", playerName);
);
int threshold = this.plugin.getConfig().getInt("grief.threshold", 5);
if (dates.size() <= threshold) {
@ -99,21 +93,7 @@ public class GriefAlertListener implements Listener {
);
if (!"".equals(webhook)) {
extra.append(" and pinging Discord");
Embed embed = new Embed()
.color(color.getInt())
.description(Javacord.escapeFormat(alert))
.timestamp(OffsetDateTime.now())
.author(new Author(playerName,
!"".equals(usernameURL) ? usernameURL : "",
String.format("https://minotar.net/helm/%s/100.png", playerName),
""));
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
try {
Javacord.sendWebhook(webhook, new Webhook("@here", embed));
} catch (Exception e) {
this.plugin.log(Lang.WEBHOOK_FAILED.getMessage());
}
});
this.plugin.sendWebhook(webhook, color, player, eventLocation, alert, usernameURL);
}
extra.append("...");
}

View File

@ -1,6 +1,5 @@
package xyz.etztech.minealert.listeners;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
@ -14,16 +13,11 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import xyz.etztech.Javacord;
import xyz.etztech.Webhook;
import xyz.etztech.embed.Author;
import xyz.etztech.embed.Embed;
import xyz.etztech.minealert.Color;
import xyz.etztech.minealert.Lang;
import xyz.etztech.minealert.MineAlert;
import xyz.etztech.minealert.MuteType;
import java.time.OffsetDateTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
@ -198,20 +192,22 @@ public class OreAlertListener implements Listener {
private void sendAlert(BlockEvent event, int strikes, boolean ping) {
String message = Lang.ORE_ALERT.getMessage(event.getPlayer().getName(), strikes, Lang.getMaterialName(event.getMaterial()));
String hexColor = this.plugin.getConfigStringFallback(
Color color = new Color(plugin.getConfigStringFallback(
"#AAAAAA",
String.format("ore.blocks.%s.color", Lang.getMaterialKey(event.getMaterial())),
"ore.color"
);
));
String usernameURL = this.plugin.getConfigStringFallback(
"",
String.format("ore.blocks.%s.url", Lang.getMaterialKey(event.getMaterial())),
"ore.url",
"url"
).replaceAll("\\{username}", event.getPlayer().getName());
);
usernameURL = MineAlert.formatAlertURL(usernameURL, event.getPlayer(), event.getLocation());
ComponentBuilder builder = new ComponentBuilder()
.append(message).color(ChatColor.of(hexColor));
.append(message).color(color.getChatColor());
if (!"".equals(usernameURL)) {
builder.event(new ClickEvent(ClickEvent.Action.OPEN_URL, usernameURL));
}
@ -230,21 +226,7 @@ public class OreAlertListener implements Listener {
"webhook"
);
if (!"".equals(webhook)) {
Embed embed = new Embed()
.color(Color.hexToInt(hexColor))
.description(Javacord.escapeFormat(message))
.timestamp(OffsetDateTime.now())
.author(new Author(event.getPlayer().getName(),
!"".equals(usernameURL) ? usernameURL : "",
String.format("https://minotar.net/helm/%s/100.png", event.getPlayer().getName()),
""));
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
try {
Javacord.sendWebhook(webhook, new Webhook(ping ? "@here" : "", embed));
} catch (Exception e) {
this.plugin.log(Lang.WEBHOOK_FAILED.getMessage());
}
});
this.plugin.sendWebhook(webhook, color, event.getPlayer(), event.getLocation(), message, usernameURL);
}
}