forked from Fascinated/Bat
use paste for messages longer than 512 and fix message sniping
This commit is contained in:
parent
1a69bce9dd
commit
4f975ab07a
39
src/main/java/cc/fascinated/bat/common/PasteUtils.java
Normal file
39
src/main/java/cc/fascinated/bat/common/PasteUtils.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package cc.fascinated.bat.common;
|
||||||
|
|
||||||
|
import cc.fascinated.bat.BatApplication;
|
||||||
|
import cc.fascinated.bat.model.token.paste.PasteUploadToken;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.http.HttpClient;
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Fascinated (fascinated7)
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
public class PasteUtils {
|
||||||
|
private static final String PASTE_URL = "https://paste.fascinated.cc/";
|
||||||
|
private static final String PASTE_UPLOAD_URL = PASTE_URL + "api/upload";
|
||||||
|
private static final HttpClient httpClient = HttpClient.newHttpClient();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uploads a paste to the paste server
|
||||||
|
*
|
||||||
|
* @param content the content of the paste
|
||||||
|
* @return the paste upload token
|
||||||
|
*/
|
||||||
|
@SneakyThrows
|
||||||
|
public static PasteUploadToken uploadPaste(String content) {
|
||||||
|
HttpResponse<String> response = httpClient.send(HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create(PASTE_UPLOAD_URL))
|
||||||
|
.POST(HttpRequest.BodyPublishers.ofString(content))
|
||||||
|
.build(), HttpResponse.BodyHandlers.ofString());
|
||||||
|
PasteUploadToken paste = BatApplication.GSON.fromJson(response.body(), PasteUploadToken.class);
|
||||||
|
paste.setUrl(PASTE_URL + paste.getKey());
|
||||||
|
log.info("Created paste with key \"{}\" ({})", paste.getKey(), paste.getUrl());
|
||||||
|
return paste;
|
||||||
|
}
|
||||||
|
}
|
@ -17,4 +17,21 @@ public class StringUtils {
|
|||||||
}
|
}
|
||||||
return stringBuilder.toString();
|
return stringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Escapes meta characters in a string
|
||||||
|
*
|
||||||
|
* @param inputString the input string
|
||||||
|
* @return the string with escaped meta characters
|
||||||
|
*/
|
||||||
|
public static String escapeMetaCharacters(String inputString){
|
||||||
|
final String[] metaCharacters = {"\\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"};
|
||||||
|
|
||||||
|
for (String metaCharacter : metaCharacters) {
|
||||||
|
if (inputString.contains(metaCharacter)) {
|
||||||
|
inputString = inputString.replace(metaCharacter, "\\" + metaCharacter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return inputString;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,8 @@ public class MessageSnipeFeature extends Feature implements EventListener {
|
|||||||
* @return the sniped messages for the given guild
|
* @return the sniped messages for the given guild
|
||||||
*/
|
*/
|
||||||
public static SnipedMessage getDeletedMessage(BatGuild guild, String channelId) {
|
public static SnipedMessage getDeletedMessage(BatGuild guild, String channelId) {
|
||||||
List<SnipedMessage> messages = snipedMessages.getOrDefault(guild, new ArrayList<>());
|
List<SnipedMessage> messages = snipedMessages.getOrDefault(guild, new ArrayList<>()).stream().filter(message -> message.getDeletedDate() != null)
|
||||||
messages.sort(Comparator.comparing(SnipedMessage::getDeletedDate));
|
.sorted(Comparator.comparing(SnipedMessage::getDeletedDate).reversed()).toList();
|
||||||
for (SnipedMessage message : messages) {
|
for (SnipedMessage message : messages) {
|
||||||
if (message.getDeletedDate() != null // Check if the message was deleted
|
if (message.getDeletedDate() != null // Check if the message was deleted
|
||||||
&& message.getMessage().getChannel().getId().equals(channelId)) {
|
&& message.getMessage().getChannel().getId().equals(channelId)) {
|
||||||
|
@ -3,6 +3,7 @@ package cc.fascinated.bat.features.messagesnipe.command;
|
|||||||
import cc.fascinated.bat.command.BatSubCommand;
|
import cc.fascinated.bat.command.BatSubCommand;
|
||||||
import cc.fascinated.bat.command.CommandInfo;
|
import cc.fascinated.bat.command.CommandInfo;
|
||||||
import cc.fascinated.bat.common.EmbedUtils;
|
import cc.fascinated.bat.common.EmbedUtils;
|
||||||
|
import cc.fascinated.bat.common.PasteUtils;
|
||||||
import cc.fascinated.bat.features.messagesnipe.MessageSnipeFeature;
|
import cc.fascinated.bat.features.messagesnipe.MessageSnipeFeature;
|
||||||
import cc.fascinated.bat.features.messagesnipe.SnipedMessage;
|
import cc.fascinated.bat.features.messagesnipe.SnipedMessage;
|
||||||
import cc.fascinated.bat.model.BatGuild;
|
import cc.fascinated.bat.model.BatGuild;
|
||||||
@ -31,20 +32,23 @@ public class DeletedSubCommand extends BatSubCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
User author = message.getMessage().getAuthor();
|
User author = message.getMessage().getAuthor();
|
||||||
|
String content = message.getMessage().getContentDisplay();
|
||||||
event.replyEmbeds(EmbedUtils.genericEmbed()
|
event.replyEmbeds(EmbedUtils.genericEmbed()
|
||||||
.setDescription("""
|
.setDescription("""
|
||||||
**Deleted Message Snipe**
|
**Deleted Message Snipe**
|
||||||
➜ Author: **%s** (%s)
|
➜ Author: **%s** (%s)
|
||||||
➜ Deleted: <t:%d:R>
|
➜ Deleted: <t:%d:R>
|
||||||
➜ Content:
|
➜ Content: %s
|
||||||
```
|
|
||||||
%s
|
|
||||||
```
|
|
||||||
""".formatted(
|
""".formatted(
|
||||||
author.getAsMention(),
|
author.getAsMention(),
|
||||||
author.getId(),
|
author.getId(),
|
||||||
message.getDeletedDate().getTime() / 1000,
|
message.getDeletedDate().getTime() / 1000,
|
||||||
message.getMessage().getContentRaw()
|
content.length() > 512 ? PasteUtils.uploadPaste(content).getUrl() :
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
%s
|
||||||
|
```
|
||||||
|
""".formatted(content)
|
||||||
)).build()).queue();
|
)).build()).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package cc.fascinated.bat.model.token.paste;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Fascinated (fascinated7)
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter @Setter
|
||||||
|
public class PasteUploadToken {
|
||||||
|
/**
|
||||||
|
* The key of the paste
|
||||||
|
*/
|
||||||
|
private final String key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The url of the paste
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user