2828
2929public class DynamicVoiceListener extends VoiceReceiverAdapter {
3030
31- private final Map <String , Predicate <String >> patterns = new HashMap <>();
31+ private final Map <String , Predicate <String >> channelPredicates = new HashMap <>();
3232 private static final Pattern channelTopicPattern = Pattern .compile ("(\\ s+\\ d+)$" );
3333 private static final Map <String , Queue <GuildVoiceUpdateEvent >> eventQueues = new HashMap <>();
34- private static final Map <String , AtomicBoolean > isEventProcessing = new HashMap <>();
34+ private static final Map <String , AtomicBoolean > activeQueuesMap = new HashMap <>();
3535
3636 public DynamicVoiceListener (Config config ) {
3737 config .getDynamicVoiceChannelPatterns ().forEach (pattern -> {
38- patterns .put (pattern , Pattern .compile (pattern ).asMatchPredicate ());
39- isEventProcessing .put (pattern , new AtomicBoolean (false ));
38+ channelPredicates .put (pattern , Pattern .compile (pattern ).asMatchPredicate ());
39+ activeQueuesMap .put (pattern , new AtomicBoolean (false ));
4040 eventQueues .put (pattern , new LinkedList <>());
4141 });
4242 }
@@ -64,34 +64,34 @@ private void insertEventToQueue(GuildVoiceUpdateEvent event, String channelTopic
6464
6565 eventQueue .add (event );
6666
67- if (isEventProcessing .get (channelTopic ).get ()) {
67+ if (activeQueuesMap .get (channelTopic ).get ()) {
6868 return ;
6969 }
7070
7171 processEventFromQueue (channelTopic );
7272 }
7373
7474 private void processEventFromQueue (String channelTopic ) {
75- AtomicBoolean processing = isEventProcessing .get (channelTopic );
75+ AtomicBoolean activeQueueFlag = activeQueuesMap .get (channelTopic );
7676 GuildVoiceUpdateEvent event = eventQueues .get (channelTopic ).poll ();
7777
7878 if (event == null ) {
79- processing .set (false );
79+ activeQueueFlag .set (false );
8080 return ;
8181 }
8282
83- processing .set (true );
83+ activeQueueFlag .set (true );
8484
8585 handleTopicUpdate (event , channelTopic );
8686 }
8787
8888 private void handleTopicUpdate (GuildVoiceUpdateEvent event , String channelTopic ) {
89- AtomicBoolean processing = isEventProcessing .get (channelTopic );
89+ AtomicBoolean activeQueueFlag = activeQueuesMap .get (channelTopic );
9090 Guild guild = event .getGuild ();
91- List <CompletableFuture <?>> tasks = new ArrayList <>();
91+ List <CompletableFuture <?>> restActionTasks = new ArrayList <>();
9292
93- if (patterns .get (channelTopic ) == null ) {
94- processing .set (false );
93+ if (channelPredicates .get (channelTopic ) == null ) {
94+ activeQueueFlag .set (false );
9595 return ;
9696 }
9797
@@ -100,38 +100,43 @@ private void handleTopicUpdate(GuildVoiceUpdateEvent event, String channelTopic)
100100 if (emptyChannelsCount == 0 ) {
101101 long channelCount = getChannelCountFromTopic (guild , channelTopic );
102102
103- tasks .add (createVoiceChannelFromTopic (guild , channelTopic , channelCount ));
103+ restActionTasks
104+ .add (makeCreateVoiceChannelFromTopicFuture (guild , channelTopic , channelCount ));
104105 } else if (emptyChannelsCount != 1 ) {
105- tasks .addAll (removeDuplicateEmptyChannels (guild , channelTopic ));
106- tasks .addAll (renameTopicChannels (guild , channelTopic ));
106+ restActionTasks .addAll (makeRemoveDuplicateEmptyChannelsFutures (guild , channelTopic ));
107+ restActionTasks .addAll (makeRenameTopicChannelsFutures (guild , channelTopic ));
107108 }
108109
109- if (!tasks .isEmpty ()) {
110- CompletableFuture .allOf (tasks .toArray (CompletableFuture []::new )).thenCompose (v -> {
111- List <CompletableFuture <?>> renameTasks = renameTopicChannels (guild , channelTopic );
112- return CompletableFuture .allOf (renameTasks .toArray (CompletableFuture []::new ));
113- }).handle ((result , exception ) -> {
114- processEventFromQueue (channelTopic );
115- processing .set (false );
116- return null ;
117- });
110+ if (!restActionTasks .isEmpty ()) {
111+ CompletableFuture .allOf (restActionTasks .toArray (CompletableFuture []::new ))
112+ .thenCompose (v -> {
113+ List <CompletableFuture <?>> renameTasks =
114+ makeRenameTopicChannelsFutures (guild , channelTopic );
115+ return CompletableFuture .allOf (renameTasks .toArray (CompletableFuture []::new ));
116+ })
117+ .handle ((result , exception ) -> {
118+ processEventFromQueue (channelTopic );
119+ activeQueueFlag .set (false );
120+ return null ;
121+ });
118122 return ;
119123 }
120124
121125 processEventFromQueue (channelTopic );
122- processing .set (false );
126+ activeQueueFlag .set (false );
123127 }
124128
125- private static CompletableFuture <? extends StandardGuildChannel > createVoiceChannelFromTopic (
129+ private static CompletableFuture <? extends StandardGuildChannel > makeCreateVoiceChannelFromTopicFuture (
126130 Guild guild , String channelTopic , long topicChannelsCount ) {
127- Optional <VoiceChannel > voiceChannelOptional = getOriginalTopicChannel (guild , channelTopic );
131+ Optional <VoiceChannel > originalTopicChannelOptional =
132+ getOriginalTopicChannel (guild , channelTopic );
128133
129- if (voiceChannelOptional .isPresent ()) {
130- VoiceChannel originalChannel = voiceChannelOptional .orElseThrow ();
134+ if (originalTopicChannelOptional .isPresent ()) {
135+ VoiceChannel originalTopicChannel = originalTopicChannelOptional .orElseThrow ();
131136
132- return originalChannel .createCopy ()
137+ return originalTopicChannel .createCopy ()
133138 .setName (getNumberedChannelTopic (channelTopic , topicChannelsCount + 1 ))
134- .setPosition (originalChannel .getPositionRaw ())
139+ .setPosition (originalTopicChannel .getPositionRaw ())
135140 .submit ();
136141 }
137142
@@ -146,38 +151,39 @@ private static Optional<VoiceChannel> getOriginalTopicChannel(Guild guild,
146151 .findFirst ();
147152 }
148153
149- private List <CompletableFuture <Void >> removeDuplicateEmptyChannels (Guild guild ,
154+ private List <CompletableFuture <Void >> makeRemoveDuplicateEmptyChannelsFutures (Guild guild ,
150155 String channelTopic ) {
151156 List <VoiceChannel > channelsToRemove = getVoiceChannelsFromTopic (guild , channelTopic )
152157 .filter (channel -> channel .getMembers ().isEmpty ())
153158 .toList ();
154- final List <CompletableFuture <Void >> tasks = new ArrayList <>();
159+ final List <CompletableFuture <Void >> restActionTasks = new ArrayList <>();
155160
156161 channelsToRemove .subList (1 , channelsToRemove .size ())
157- .forEach (channel -> tasks .add (channel .delete ().submit ()));
162+ .forEach (channel -> restActionTasks .add (channel .delete ().submit ()));
158163
159- return tasks ;
164+ return restActionTasks ;
160165 }
161166
162- private List <CompletableFuture <?>> renameTopicChannels (Guild guild , String channelTopic ) {
163- List <VoiceChannel > channels = getVoiceChannelsFromTopic (guild , channelTopic ).toList ();
164- List <CompletableFuture <?>> tasks = new ArrayList <>();
167+ private List <CompletableFuture <?>> makeRenameTopicChannelsFutures (Guild guild ,
168+ String channelTopic ) {
169+ List <VoiceChannel > topicChannels = getVoiceChannelsFromTopic (guild , channelTopic ).toList ();
170+ List <CompletableFuture <?>> restActionTasks = new ArrayList <>();
165171
166- IntStream .range (0 , channels .size ())
172+ IntStream .range (0 , topicChannels .size ())
167173 .asLongStream ()
168- .mapToObj (number -> Pair .of (number + 1 , channels .get ((int ) number )))
174+ .mapToObj (channelId -> Pair .of (channelId + 1 , topicChannels .get ((int ) channelId )))
169175 .filter (pair -> pair .getLeft () != 1 )
170176 .forEach (pair -> {
171- long number = pair .getLeft ();
177+ long channelId = pair .getLeft ();
172178 VoiceChannel voiceChannel = pair .getRight ();
173179 String voiceChannelNameTopic = getChannelTopic (voiceChannel .getName ());
174180
175- tasks .add (voiceChannel .getManager ()
176- .setName (getNumberedChannelTopic (voiceChannelNameTopic , number ))
181+ restActionTasks .add (voiceChannel .getManager ()
182+ .setName (getNumberedChannelTopic (voiceChannelNameTopic , channelId ))
177183 .submit ());
178184 });
179185
180- return tasks ;
186+ return restActionTasks ;
181187 }
182188
183189 private long getChannelCountFromTopic (Guild guild , String channelTopic ) {
@@ -187,7 +193,8 @@ private long getChannelCountFromTopic(Guild guild, String channelTopic) {
187193 private Stream <VoiceChannel > getVoiceChannelsFromTopic (Guild guild , String channelTopic ) {
188194 return guild .getVoiceChannels ()
189195 .stream ()
190- .filter (channel -> patterns .get (channelTopic ).test (getChannelTopic (channel .getName ())));
196+ .filter (channel -> channelPredicates .get (channelTopic )
197+ .test (getChannelTopic (channel .getName ())));
191198 }
192199
193200 private long getEmptyChannelsCountFromTopic (Guild guild , String channelTopic ) {
@@ -198,16 +205,16 @@ private long getEmptyChannelsCountFromTopic(Guild guild, String channelTopic) {
198205 }
199206
200207 private static String getChannelTopic (String channelName ) {
201- Matcher matcher = channelTopicPattern .matcher (channelName );
208+ Matcher channelTopicPatternMatcher = channelTopicPattern .matcher (channelName );
202209
203- if (matcher .find ()) {
204- return matcher .replaceAll ("" );
210+ if (channelTopicPatternMatcher .find ()) {
211+ return channelTopicPatternMatcher .replaceAll ("" );
205212 }
206213
207214 return channelName ;
208215 }
209216
210- private static String getNumberedChannelTopic (String channelTopic , long id ) {
211- return String .format ("%s %d" , channelTopic , id );
217+ private static String getNumberedChannelTopic (String channelTopic , long channelId ) {
218+ return String .format ("%s %d" , channelTopic , channelId );
212219 }
213220}
0 commit comments