From a5290b9caea77dae89e5eec83a023f2d2828adbd Mon Sep 17 00:00:00 2001 From: Adelyn Breedlove Date: Sun, 17 Feb 2019 21:02:56 -0700 Subject: Add role test command --- bin/bot.ml | 1 + bin/commands.ml | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/bin/bot.ml b/bin/bot.ml index 64d9ead..aa46c60 100644 --- a/bin/bot.ml +++ b/bin/bot.ml @@ -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 -- cgit v1.2.3