9
9
import net .dv8tion .jda .api .events .message .MessageReceivedEvent ;
10
10
import net .dv8tion .jda .api .interactions .components .buttons .Button ;
11
11
import org .jetbrains .annotations .NotNull ;
12
+ import org .slf4j .Logger ;
13
+ import org .slf4j .LoggerFactory ;
12
14
import org .togetherjava .tjbot .commands .MessageReceiverAdapter ;
13
15
import org .togetherjava .tjbot .config .Config ;
14
16
34
36
*/
35
37
public class FileSharingMessageListener extends MessageReceiverAdapter {
36
38
39
+ private static final Logger LOGGER = LoggerFactory .getLogger (FileSharingMessageListener .class );
37
40
private static final ObjectMapper JSON = new ObjectMapper ();
38
41
39
42
private static final String SHARE_API = "https://api.github.com/gists" ;
@@ -75,7 +78,13 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
75
78
.filter (this ::isAttachmentRelevant )
76
79
.toList ();
77
80
78
- CompletableFuture .runAsync (() -> processAttachments (event , attachments ));
81
+ CompletableFuture .runAsync (() -> {
82
+ try {
83
+ processAttachments (event , attachments );
84
+ } catch (Exception e ) {
85
+ LOGGER .error ("Unknown error while processing attachments" , e );
86
+ }
87
+ });
79
88
}
80
89
81
90
private boolean isAttachmentRelevant (@ NotNull Message .Attachment attachment ) {
@@ -90,21 +99,21 @@ private boolean isAttachmentRelevant(@NotNull Message.Attachment attachment) {
90
99
private void processAttachments (@ NotNull MessageReceivedEvent event ,
91
100
@ NotNull List <Message .Attachment > attachments ) {
92
101
93
- Map <String , GistFile > filesAsJson = new ConcurrentHashMap <>();
102
+ Map <String , GistFile > nameToFile = new ConcurrentHashMap <>();
94
103
95
104
List <CompletableFuture <Void >> tasks = new ArrayList <>();
96
105
for (Message .Attachment attachment : attachments ) {
97
106
CompletableFuture <Void > task = attachment .retrieveInputStream ()
98
107
.thenApply (this ::readAttachment )
99
108
.thenAccept (
100
- content -> filesAsJson .put (getNameOf (attachment ), new GistFile (content )));
109
+ content -> nameToFile .put (getNameOf (attachment ), new GistFile (content )));
101
110
102
111
tasks .add (task );
103
112
}
104
113
105
114
tasks .forEach (CompletableFuture ::join );
106
115
107
- GistFiles files = new GistFiles (filesAsJson );
116
+ GistFiles files = new GistFiles (nameToFile );
108
117
GistRequest request = new GistRequest (event .getAuthor ().getName (), false , files );
109
118
String url = uploadToGist (request );
110
119
sendResponse (event , url );
@@ -128,7 +137,13 @@ private void processAttachments(@NotNull MessageReceivedEvent event,
128
137
fileExtension = "xml" ;
129
138
}
130
139
131
- fileName = fileName .substring (0 , fileName .lastIndexOf ("." )) + "." + fileExtension ;
140
+ int extensionIndex = fileName .lastIndexOf ('.' );
141
+ if (extensionIndex != -1 ) {
142
+ fileName = fileName .substring (0 , extensionIndex );
143
+ }
144
+
145
+ fileName += "." + fileExtension ;
146
+
132
147
return fileName ;
133
148
}
134
149
0 commit comments