diff options
| author | Adelyn Breedlove <[email protected]> | 2019-02-17 21:02:56 -0700 |
|---|---|---|
| committer | Adelyn Breedlove <[email protected]> | 2019-02-17 21:02:56 -0700 |
| commit | a5290b9caea77dae89e5eec83a023f2d2828adbd (patch) | |
| tree | cc347c14e1b61e8159b16a9de9cb2fb2c32ac391 | |
| parent | Add rate limit log at debug level (diff) | |
| download | disml-a5290b9caea77dae89e5eec83a023f2d2828adbd.tar.xz disml-a5290b9caea77dae89e5eec83a023f2d2828adbd.zip | |
Add role test command
| -rw-r--r-- | bin/bot.ml | 1 | ||||
| -rw-r--r-- | bin/commands.ml | 47 |
2 files changed, 47 insertions, 1 deletions
@@ -21,6 +21,7 @@ let check_command (message:Message.t) = | "!rgm" -> Commands.request_members message rest
| "!new" -> Commands.new_guild message rest
| "!delall" -> Commands.delete_guilds message rest
+ | "!roletest" -> Commands.role_test message rest
| _ -> () (* Fallback case, no matched command. *)
(* Example logs setup *)
diff --git a/bin/commands.ml b/bin/commands.ml index d488b64..a6f74ac 100644 --- a/bin/commands.ml +++ b/bin/commands.ml @@ -130,4 +130,49 @@ let delete_guilds message _args = | Ok () -> res := Printf.sprintf "%s\nDeleted %s" !res g.name | Error _ -> ()) |> to_alist) |> List.map ~f:(snd) in Deferred.all all >>= (fun _ -> - Message.reply message !res) >>> ignore
\ No newline at end of file + Message.reply message !res) >>> ignore + +let role_test (message:Message.t) args = + let exception Member_not_found in + let cache = Mvar.peek_exn Cache.cache in + let name = List.fold ~init:"" ~f:(fun a v -> a ^ " " ^ v) args in + let create_role name guild_id = + Guild_id.create_role ~name guild_id >>| function + | Ok role -> role + | Error e -> Error.raise e + in + let delete_role role = + Role.delete role >>| function + | Ok () -> () + | Error e -> Error.raise e + in + let add_role member role = + Member.add_role ~role member >>| function + | Ok () -> () + | Error e -> Error.raise e + in + let remove_role member role = + Member.remove_role ~role member >>| function + | Ok () -> () + | Error e -> Error.raise e + in + let get_member id = match Cache.GuildMap.find cache.guilds id with + | Some guild -> + begin match List.find guild.members ~f:(fun m -> m.user.id = message.author.id) with + | Some member -> member + | None -> raise Member_not_found + end + | None -> raise Member_not_found + in + match message.guild_id with + | Some id -> begin try + let member = get_member id in + create_role name id >>= (fun role -> + add_role member role >>= (fun () -> remove_role member role) + >>= (fun () -> delete_role role)) >>= (fun () -> + Message.reply message "Role test finished") >>> ignore + with + | Member_not_found -> Message.reply message "Error: Member not found" >>> ignore + | exn -> Message.reply message (Printf.sprintf "Error: %s" Error.(of_exn exn |> to_string_hum)) >>> ignore + end + | None -> ()
\ No newline at end of file |