aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2019-02-17 21:02:56 -0700
committerAdelyn Breedlove <[email protected]>2019-02-17 21:02:56 -0700
commita5290b9caea77dae89e5eec83a023f2d2828adbd (patch)
treecc347c14e1b61e8159b16a9de9cb2fb2c32ac391
parentAdd rate limit log at debug level (diff)
downloaddisml-a5290b9caea77dae89e5eec83a023f2d2828adbd.tar.xz
disml-a5290b9caea77dae89e5eec83a023f2d2828adbd.zip
Add role test command
-rw-r--r--bin/bot.ml1
-rw-r--r--bin/commands.ml47
2 files changed, 47 insertions, 1 deletions
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