Unverified Commit 9cd8e23a authored by tec's avatar tec
Browse files

Refactor get_all_role_reaction_message (quicker)

parent 962b963a
use crate::config::{CONFIG, ReactRoleMap}; use crate::config::{ReactRoleMap, CONFIG};
use crate::util::{get_react_from_string, get_string_from_react}; use crate::util::{get_react_from_string, get_string_from_react};
use serenity::{ use serenity::{
client::Context, client::Context,
...@@ -174,28 +174,28 @@ pub fn sync_all_role_reactions(ctx: Context) { ...@@ -174,28 +174,28 @@ pub fn sync_all_role_reactions(ctx: Context) {
info!("Role reaction sync complete"); info!("Role reaction sync complete");
} }
fn get_all_role_reaction_message( fn get_all_role_reaction_message(ctx: &Context) -> Vec<(Message, &'static ReactRoleMap)> {
ctx: &Context,
) -> Vec<(
Message,
&'static ReactRoleMap,
)> {
let guild = ctx.http.get_guild(CONFIG.server_id).unwrap(); let guild = ctx.http.get_guild(CONFIG.server_id).unwrap();
info!(" Find role-react message: guild determined"); info!(" Find role-react message: guild determined");
let channels = ctx.http.get_channels(*guild.id.as_u64()).unwrap(); let channels = ctx.http.get_channels(*guild.id.as_u64()).unwrap();
info!(" Find role-react message: channels determined"); info!(" Find role-react message: channels determined");
channels
.iter() let mut channel_search_indices: Vec<_> = (0..channels.len()).collect();
.flat_map(|channel| { let mut results: Vec<(Message, &'static ReactRoleMap)> = Vec::new();
let ctxx = ctx.clone(); for react_role in CONFIG.react_role_messages.iter() {
// since we don't know which channels the messages are in, we check every combination of message and for channel_index in &channel_search_indices {
// channel and ignore the bad matches using .ok() and .filter_map() if let Ok(msg) = ctx.http.get_message(
CONFIG.react_role_messages.iter().filter_map(move |rrm| { *channels[*channel_index].id.as_u64(),
ctxx.http *react_role.message.as_u64(),
.get_message(*channel.id.as_u64(), *rrm.message.as_u64()) ) {
.ok() results.push((msg, &react_role.mapping));
.map(|m| (m, &rrm.mapping)) // move channel with message to front of index vector
}) let channel_index_clone = channel_index.to_owned();
}) channel_search_indices.retain(|&i| i != channel_index_clone);
.collect() channel_search_indices.insert(0, channel_index_clone);
break;
}
}
}
results
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment