|
2 | 2 | #include <thread>
|
3 | 3 | #include <vector>
|
4 | 4 |
|
5 |
| -#include "ApplicationCommand.h" |
6 |
| - |
7 | 5 | #ifndef _WIN32
|
8 | 6 | #include <cstdlib>
|
9 | 7 | #endif
|
@@ -107,13 +105,13 @@ class Client : public Discord {
|
107 | 105 | react.set_type(ApplicationCommand::Type::MESSAGE);
|
108 | 106 | create_application_command(react);
|
109 | 107 |
|
110 |
| - ApplicationCommand admin = ApplicationCommand(); |
111 |
| - admin.set_name("admin"); |
112 |
| - admin.set_description("check if you are an admin"); |
113 |
| - admin.set_type(DiscordCPP::ApplicationCommand::CHAT_INPUT); |
114 |
| - admin.add_contexts(DiscordCPP::ApplicationCommand::GUILD); |
115 |
| - admin.add_integration_types(DiscordCPP::ApplicationCommand::GUILD_INSTALL); |
116 |
| - create_application_command(admin); |
| 108 | + ApplicationCommand permissions = ApplicationCommand(); |
| 109 | + permissions.set_name("permissions"); |
| 110 | + permissions.set_description("check some permissions"); |
| 111 | + permissions.set_type(DiscordCPP::ApplicationCommand::CHAT_INPUT); |
| 112 | + permissions.add_contexts(DiscordCPP::ApplicationCommand::GUILD); |
| 113 | + permissions.add_integration_types(DiscordCPP::ApplicationCommand::GUILD_INSTALL); |
| 114 | + create_application_command(permissions); |
117 | 115 |
|
118 | 116 | update_presence(DiscordStatus::Online, Activity("test", Activity::Type::Game));
|
119 | 117 | }
|
@@ -467,11 +465,25 @@ class Client : public Discord {
|
467 | 465 | this_thread::sleep_for(chrono::seconds(1));
|
468 | 466 | message.remove_all_reactions();
|
469 | 467 | }
|
470 |
| - } else if (name == "admin") { |
471 |
| - if (interaction.get_member().has_value() && interaction.get_guild().has_value()) { |
472 |
| - Permissions permissions = interaction.get_guild().value().get_member_permissions(interaction.get_member().value()); |
| 468 | + } else if (name == "permissions") { |
| 469 | + if (interaction.get_member().has_value() && interaction.get_guild().has_value() && interaction.get_channel().has_value()) { |
| 470 | + Member member = interaction.get_member().value(); |
| 471 | + Channel channel = interaction.get_channel().value(); |
| 472 | + Guild guild = interaction.get_guild().value(); |
| 473 | + |
| 474 | + Permissions permissions = guild.get_member_permissions(member); |
| 475 | + permissions = channel.merge_permission_overwrites(permissions, member.get_id()); |
| 476 | + for (auto role : member.get_roles()) { |
| 477 | + permissions = channel.merge_permission_overwrites(permissions, role); |
| 478 | + } |
| 479 | + |
473 | 480 | bool is_admin = permissions.has_permission(DiscordCPP::Permissions::ADMINISTRATOR);
|
474 |
| - interaction.reply("You are " + std::string(is_admin ? "an" : "no") + " admin"); |
| 481 | + bool can_delete_messages = permissions.has_permission(DiscordCPP::Permissions::MANAGE_MESSAGES); |
| 482 | + bool can_kick_members = permissions.has_permission(DiscordCPP::Permissions::KICK_MEMBERS); |
| 483 | + |
| 484 | + interaction.reply("You are " + std::string(is_admin ? "an" : "no") + " admin" // |
| 485 | + + "\nYou are " + std::string(can_delete_messages ? "" : "not ") + "allowed to delete messages" // |
| 486 | + + "\nYou can " + std::string(can_kick_members ? "" : "not ") + "kick members"); |
475 | 487 | }
|
476 | 488 | }
|
477 | 489 | }
|
|
0 commit comments