2828import org .jetbrains .annotations .NotNull ;
2929
3030import javax .annotation .Nullable ;
31- import java .net .URL ;
3231import java .util .ArrayList ;
3332import java .util .List ;
3433import java .util .function .BiConsumer ;
@@ -40,19 +39,28 @@ public static List<Message> parse(String message, BiConsumer<Integer, RuleData>
4039 try {
4140 final List <Message > messages = new ArrayList <>();
4241 final List <String > lines = List .of (message .split ("\n " ));
43- final var rulesIndex = lines .indexOf (lines .stream ().filter (it -> it .trim ().equals ("## Rules " )).findFirst ().orElse ("" ));
42+ final var rulesIndex = lines .indexOf (lines .stream ().filter (it -> it .trim ().equals ("<rules> " )).findFirst ().orElse ("" ));
4443 int rulesEnd = lines .size () - 1 ;
4544 for (int i = rulesIndex ; i < lines .size (); i ++) {
4645 if (lines .get (i ).trim ().equals ("<rulesEnd/>" )) {
4746 rulesEnd = i ;
4847 break ;
4948 }
5049 }
50+ final var embedsIndex = lines .indexOf (lines .stream ().filter (it -> it .trim ().equals ("<embeds>" )).findFirst ().orElse ("" ));
51+ int embedsEnd = lines .size () - 1 ;
52+ for (int i = embedsIndex ; i < lines .size (); i ++) {
53+ if (lines .get (i ).trim ().equals ("<embedsEnd/>" )) {
54+ embedsEnd = i ;
55+ break ;
56+ }
57+ }
58+ final var embeds = getEmbeds (IntStream .range (embedsIndex + 1 , embedsEnd ).mapToObj (lines ::get ).toList ());
5159 final var messagesUntilRules = IntStream .range (0 , rulesIndex ).mapToObj (lines ::get ).toList ();
5260 final var rules = collectRules (IntStream .range (rulesIndex + 1 , rulesEnd ).mapToObj (lines ::get ).toList ());
53- final var afterRules = IntStream .range (rulesEnd + 1 , lines . size () ).mapToObj (lines ::get ).toList ();
61+ final var afterRules = IntStream .range (rulesEnd + 1 , embedsIndex ).mapToObj (lines ::get ).toList ();
5462
55- messages .addAll (splitIntoMessages (messagesUntilRules ));
63+ messages .addAll (splitIntoMessages (messagesUntilRules , embeds ));
5664
5765 final List <MessageEmbed > currentEmbeds = new ArrayList <>();
5866 for (int i = 0 ; i < rules .size (); i ++) {
@@ -67,7 +75,7 @@ public static List<Message> parse(String message, BiConsumer<Integer, RuleData>
6775 }
6876 if (!currentEmbeds .isEmpty ()) messages .add (new MessageBuilder ().setEmbeds (currentEmbeds ).build ());
6977
70- messages .addAll (splitIntoMessages (afterRules ));
78+ messages .addAll (splitIntoMessages (afterRules , embeds ));
7179
7280 return messages ;
7381 } catch (Exception s ) {
@@ -76,7 +84,7 @@ public static List<Message> parse(String message, BiConsumer<Integer, RuleData>
7684 }
7785 }
7886
79- private static List <Message > splitIntoMessages (final List <String > lines ) {
87+ private static List <Message > splitIntoMessages (final List <String > lines , final List < MessageEmbed > embedRegistry ) {
8088 final List <Message > messages = new ArrayList <>();
8189 if (lines .isEmpty ()) return messages ;
8290 AccessibleBuilder current ;
@@ -85,8 +93,8 @@ private static List<Message> splitIntoMessages(final List<String> lines) {
8593 if (firstLine .startsWith ("img=https://" )) {
8694 messages .add (new AccessibleBuilder ().setContent (firstLine .substring ("img=" .length ())).build ());
8795 current = new AccessibleBuilder ();
88- } else if (firstLine .startsWith ("embed=https:// " )) {
89- current = new AccessibleBuilder ().addEmbed (EmbedParser . parse ( readText (firstLine .substring ("embed=" .length ()))). build ( ));
96+ } else if (firstLine .startsWith ("embed=" )) {
97+ current = new AccessibleBuilder ().addEmbed (embedRegistry . get ( Integer . parseInt (firstLine .substring ("embed=" .length ()))));
9098 } else {
9199 current = new AccessibleBuilder ().append (firstLine );
92100 }
@@ -98,12 +106,12 @@ private static List<Message> splitIntoMessages(final List<String> lines) {
98106 messages .add (new AccessibleBuilder ().setContent (it .substring ("img=" .length ())).build ());
99107 current = new AccessibleBuilder ();
100108 continue ;
101- } else if (it .startsWith ("embed=https:// " )) {
109+ } else if (it .startsWith ("embed=" )) {
102110 if (current .getEmbeds ().size () >= Message .MAX_EMBED_COUNT ) {
103111 messages .add (current .build ());
104112 current = new AccessibleBuilder ();
105113 }
106- current .addEmbed (EmbedParser . parse ( readText (it .substring ("embed=" .length ()))). build ( ));
114+ current .addEmbed (embedRegistry . get ( Integer . parseInt (it .substring ("embed=" .length ()))));
107115 continue ;
108116 }
109117
@@ -113,6 +121,12 @@ private static List<Message> splitIntoMessages(final List<String> lines) {
113121 current = new AccessibleBuilder ();
114122 }
115123
124+ if (it .trim ().startsWith ("-----" )) {
125+ messages .add (current .build ());
126+ current = new AccessibleBuilder ();
127+ continue ;
128+ }
129+
116130 if ((current + "\n " + it ).length () > Message .MAX_CONTENT_LENGTH ) {
117131 messages .add (current .build ());
118132 current = new AccessibleBuilder ();
@@ -126,12 +140,22 @@ private static List<Message> splitIntoMessages(final List<String> lines) {
126140 return messages ;
127141 }
128142
129- private static String readText (String url ) {
130- try (final var is = new URL (url ).openStream ()) {
131- return new String (is .readAllBytes ());
132- } catch (Exception ignored ) {
133- return "" ;
143+ private static List <MessageEmbed > getEmbeds (final List <String > lines ) {
144+ final List <MessageEmbed > embeds = new ArrayList <>();
145+ StringBuilder current = new StringBuilder ();
146+ for (final String line : lines ) {
147+ if (line .startsWith ("-----" )) {
148+ embeds .add (EmbedParser .parse (current .toString ()).build ());
149+ current = new StringBuilder ();
150+ continue ;
151+ }
152+ if (!current .isEmpty ())
153+ current .append ('\n' );
154+ if (!line .isBlank ())
155+ current .append (line );
134156 }
157+ if (!current .isEmpty ()) embeds .add (EmbedParser .parse (current .toString ()).build ());
158+ return embeds ;
135159 }
136160
137161 private static List <RuleData > collectRules (final List <String > lines ) {
0 commit comments