diff --git a/src/main.rs b/src/main.rs
index 0a90746026e248f88bcac489b2b0b7e8d04629e6..41679d2274692b6c4abb9ef7a55079b2a81a1978 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,7 @@
 #[macro_use]
 extern crate lazy_static;
+#[macro_use]
+extern crate hex_literal;
 
 #[macro_use]
 extern crate log;
@@ -15,14 +17,15 @@ use serenity::{
 };
 
 mod config;
+mod reaction_roles;
+mod token_management;
 mod user_management;
-mod voting;
 mod util;
-mod reaction_roles;
+mod voting;
 
 use config::CONFIG;
-use util::get_string_from_react;
 use reaction_roles::{add_role_by_reaction, remove_role_by_reaction};
+use util::get_string_from_react;
 
 macro_rules! e {
     ($error: literal, $x:expr) => {
@@ -129,8 +132,7 @@ impl EventHandler for Handler {
                         }
                         info!(
                             "The react {} just added is {:?}",
-                            react_user.name,
-                            react_as_string
+                            react_user.name, react_as_string
                         );
                         let mut msg = MessageBuilder::new();
                         msg.push_italic(react_user.name);
@@ -234,11 +236,15 @@ enum MessageType {
     RoleReactMessage,
     LogReact,
     Poll,
-    Misc
+    Misc,
 }
 
 fn get_message_type(message: &Message) -> MessageType {
-    if CONFIG.react_role_messages.iter().any(|rrm| rrm.message == message.id) {
+    if CONFIG
+        .react_role_messages
+        .iter()
+        .any(|rrm| rrm.message == message.id)
+    {
         return MessageType::RoleReactMessage;
     }
     if message.embeds.len() <= 0 {
diff --git a/src/reaction_roles.rs b/src/reaction_roles.rs
index 232387258cd23b4291c25bcf05d54cdc3359aa03..3517c84ff892a26921ca7cfb17b172b8f1408d2e 100644
--- a/src/reaction_roles.rs
+++ b/src/reaction_roles.rs
@@ -1,28 +1,44 @@
-use std::collections::{HashMap, HashSet};
-use std::iter::FromIterator;
+use crate::config::CONFIG;
+use crate::util::{get_react_from_string, get_string_from_react};
 use serenity::{
+    client::Context,
     model::{channel::Message, channel::Reaction, id::UserId},
-    client::Context
 };
-use crate::util::{get_string_from_react, get_react_from_string};
-use crate::config::CONFIG;
+use std::collections::{HashMap, HashSet};
+use std::iter::FromIterator;
 
 pub fn add_role_by_reaction(ctx: Context, msg: Message, added_reaction: Reaction) {
-    CONFIG.react_role_messages.iter().find(|rrm| rrm.message == msg.id).and_then(|reaction_mapping| {
-        let react_as_string = get_string_from_react(added_reaction.emoji);
-        return reaction_mapping.mapping.get(&react_as_string);
-    }).and_then(|role_id|{
-        return ctx.http.add_member_role(CONFIG.server_id, *msg.author.id.as_u64(), *role_id.as_u64()).ok();
-    });
+    CONFIG
+        .react_role_messages
+        .iter()
+        .find(|rrm| rrm.message == msg.id)
+        .and_then(|reaction_mapping| {
+            let react_as_string = get_string_from_react(added_reaction.emoji);
+            return reaction_mapping.mapping.get(&react_as_string);
+        })
+        .and_then(|role_id| {
+            return ctx
+                .http
+                .add_member_role(CONFIG.server_id, *msg.author.id.as_u64(), *role_id.as_u64())
+                .ok();
+        });
 }
 
 pub fn remove_role_by_reaction(ctx: Context, msg: Message, removed_reaction: Reaction) {
-    CONFIG.react_role_messages.iter().find(|rrm| rrm.message == msg.id).and_then(|reaction_mapping| {
-        let react_as_string = get_string_from_react(removed_reaction.emoji);
-        return reaction_mapping.mapping.get(&react_as_string);
-    }).and_then(|role_id|{
-        return ctx.http.remove_member_role(CONFIG.server_id, *msg.author.id.as_u64(), *role_id.as_u64()).ok();
-    });
+    CONFIG
+        .react_role_messages
+        .iter()
+        .find(|rrm| rrm.message == msg.id)
+        .and_then(|reaction_mapping| {
+            let react_as_string = get_string_from_react(removed_reaction.emoji);
+            return reaction_mapping.mapping.get(&react_as_string);
+        })
+        .and_then(|role_id| {
+            return ctx
+                .http
+                .remove_member_role(CONFIG.server_id, *msg.author.id.as_u64(), *role_id.as_u64())
+                .ok();
+        });
 }
 
 pub fn add_all_role_reactions(ctx: Context) {
@@ -31,7 +47,10 @@ pub fn add_all_role_reactions(ctx: Context) {
     // this method supports paging, but we probably don't need it since the server only has a couple of
     // hundred members. the Reaction.users() method can apparently only retrieve 100 users at once, but
     // this one seems to work fine when set to 1000 (I tried 10,000 but the api returned a 400)
-    let all_members = ctx.http.get_guild_members(CONFIG.server_id, Some(1000), None).unwrap();
+    let all_members = ctx
+        .http
+        .get_guild_members(CONFIG.server_id, Some(1000), None)
+        .unwrap();
 
     for (message, mapping) in messages_with_role_mappings {
         for (react, role) in mapping {
@@ -39,7 +58,9 @@ pub fn add_all_role_reactions(ctx: Context) {
             // to work fine when set to 255...
             // TODO: proper pagination for the unlikely scenario that there are more than 100 (255?) reactions?
             let reaction_type = get_react_from_string(react.clone(), guild.clone());
-            let reactors = message.reaction_users(ctx.http.clone(), reaction_type, Some(255), None).unwrap();
+            let reactors = message
+                .reaction_users(ctx.http.clone(), reaction_type, Some(255), None)
+                .unwrap();
             let reactor_ids: HashSet<UserId> = HashSet::from_iter(reactors.iter().map(|r| r.id));
 
             // this looks O(n!), but n will probably never be more than three digits, so maybe it's okay?
@@ -56,14 +77,26 @@ pub fn add_all_role_reactions(ctx: Context) {
     }
 }
 
-fn get_all_role_reaction_message(ctx: &Context) -> Vec<(Message, &'static HashMap<String, serenity::model::id::RoleId>)> {
+fn get_all_role_reaction_message(
+    ctx: &Context,
+) -> Vec<(
+    Message,
+    &'static HashMap<String, serenity::model::id::RoleId>,
+)> {
     let guild = ctx.http.get_guild(CONFIG.server_id).unwrap();
     let channels = ctx.http.get_channels(*guild.id.as_u64()).unwrap();
-    return channels.iter().flat_map(|channel| {
-        let ctxx = ctx.clone();
-        // since we don't know which channels the messages are in, we check every combination of message and
-        // channel and ignore the bad matches using .ok() and .filter_map()
-        CONFIG.react_role_messages.iter().filter_map(move |rrm|
-            ctxx.http.get_message(*channel.id.as_u64(), *rrm.message.as_u64()).ok().map(|m| (m, &rrm.mapping)))
-    }).collect();
+    return channels
+        .iter()
+        .flat_map(|channel| {
+            let ctxx = ctx.clone();
+            // since we don't know which channels the messages are in, we check every combination of message and
+            // channel and ignore the bad matches using .ok() and .filter_map()
+            CONFIG.react_role_messages.iter().filter_map(move |rrm| {
+                ctxx.http
+                    .get_message(*channel.id.as_u64(), *rrm.message.as_u64())
+                    .ok()
+                    .map(|m| (m, &rrm.mapping))
+            })
+        })
+        .collect();
 }