47 lines
1.9 KiB
Java
47 lines
1.9 KiB
Java
package net.essentialsx.discord.util;
|
|
|
|
import com.earth2me.essentials.utils.FormatUtil;
|
|
import com.earth2me.essentials.utils.VersionUtil;
|
|
import net.ess3.provider.providers.BukkitSenderProvider;
|
|
import net.ess3.provider.providers.PaperCommandSender;
|
|
import net.essentialsx.discord.JDADiscordService;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.command.ConsoleCommandSender;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
|
public class DiscordCommandSender {
|
|
private final BukkitSenderProvider sender;
|
|
private BukkitTask task;
|
|
private String responseBuffer = "";
|
|
private long lastTime = System.currentTimeMillis();
|
|
|
|
public DiscordCommandSender(JDADiscordService jda, ConsoleCommandSender sender, CmdCallback callback) {
|
|
final BukkitSenderProvider.MessageHook hook = message -> {
|
|
responseBuffer = responseBuffer + (responseBuffer.isEmpty() ? "" : "\n") + MessageUtil.sanitizeDiscordMarkdown(FormatUtil.stripFormat(message));
|
|
lastTime = System.currentTimeMillis();
|
|
};
|
|
this.sender = (VersionUtil.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01)) ? new PaperCommandSender(sender, hook) : new BukkitSenderProvider(sender, hook);
|
|
|
|
task = Bukkit.getScheduler().runTaskTimerAsynchronously(jda.getPlugin(), () -> {
|
|
if (!responseBuffer.isEmpty() && System.currentTimeMillis() - lastTime >= 1000) {
|
|
callback.onMessage(responseBuffer);
|
|
responseBuffer = "";
|
|
lastTime = System.currentTimeMillis();
|
|
return;
|
|
}
|
|
|
|
if (System.currentTimeMillis() - lastTime >= 20000) {
|
|
task.cancel();
|
|
}
|
|
}, 0, 20);
|
|
}
|
|
|
|
public interface CmdCallback {
|
|
void onMessage(String message);
|
|
}
|
|
|
|
public BukkitSenderProvider getSender() {
|
|
return sender;
|
|
}
|
|
}
|