From 9c31ba2ed2d876c869ea26fbdeca6bbe7986fe4f Mon Sep 17 00:00:00 2001 From: Adelyn Breedlove Date: Wed, 20 Feb 2019 10:17:05 -0700 Subject: Add permission test command --- bin/bot.ml | 1 + bin/commands.ml | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/bin/bot.ml b/bin/bot.ml index aa46c60..f50c262 100644 --- a/bin/bot.ml +++ b/bin/bot.ml @@ -22,6 +22,7 @@ let check_command (message:Message.t) = | "!new" -> Commands.new_guild message rest | "!delall" -> Commands.delete_guilds message rest | "!roletest" -> Commands.role_test message rest + | "!perms" -> Commands.check_permissions message rest | _ -> () (* Fallback case, no matched command. *) (* Example logs setup *) diff --git a/bin/commands.ml b/bin/commands.ml index eadb430..3cfe210 100644 --- a/bin/commands.ml +++ b/bin/commands.ml @@ -176,4 +176,19 @@ let role_test (message:Message.t) args = | Member_not_found -> Message.reply message "Error: Member not found" | exn -> Message.reply message (Printf.sprintf "Error: %s" Error.(of_exn exn |> to_string_hum)) end >>> ignore - | None -> () \ No newline at end of file + | None -> () + +let check_permissions (message:Message.t) _args = + let cache = Mvar.peek_exn Cache.cache in + let permissions = match message.guild_id, message.member with + | Some g, Some m -> + begin match Cache.guild cache g with + | Some g -> + List.fold m.roles ~init:Permissions.empty ~f:(fun acc rid -> + let role = List.find_exn g.roles ~f:(fun r -> r.id = rid) in + Permissions.union acc role.permissions) + | None -> Permissions.empty + end + | _ -> Permissions.empty in + let permissions = Permissions.elements permissions |> List.sexp_of_t Permissions.sexp_of_elt |> Sexp.to_string_hum in + Message.reply message (Printf.sprintf "Permissions: %s" permissions) >>> ignore \ No newline at end of file -- cgit v1.2.3