aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bot.ml1
-rw-r--r--bin/commands.ml17
2 files changed, 17 insertions, 1 deletions
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