mirror of
https://gitlab.com/niansa/SomeBot.git
synced 2025-03-06 20:48:26 +01:00
Allow auto-pinging on ticket creation
This commit is contained in:
parent
f43bfe8e7c
commit
135fdbe21e
1 changed files with 27 additions and 5 deletions
|
@ -8,6 +8,13 @@
|
|||
|
||||
|
||||
|
||||
namespace PingMode {
|
||||
constexpr uint8_t all = 0b11,
|
||||
creator = 0b10,
|
||||
managers = 0b01,
|
||||
none = 0b00;
|
||||
}
|
||||
|
||||
class Ticket {
|
||||
Bot *bot;
|
||||
|
||||
|
@ -163,6 +170,7 @@ public:
|
|||
" logs_channel TEXT,"
|
||||
" channel_name TEXT,"
|
||||
" any_close INTEGER,"
|
||||
" ping INTEGER,"
|
||||
" UNIQUE(id)"
|
||||
");";
|
||||
bot->db << "CREATE TABLE IF NOT EXISTS tickets ("
|
||||
|
@ -175,7 +183,7 @@ public:
|
|||
" UNIQUE(guild_id, channel_id, author_id)"
|
||||
");";
|
||||
|
||||
bot->add_chatcommand(Bot::ChatCommand({"ticket_settings", "ticket_einstellungen"}, "Lege die Ticket-Einstellungen fest", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_channel, "category", "Kategorie in der Tickets erstellt werden", false)).add_option(dpp::command_option(dpp::command_option_type::co_role, "role", "Rolle, die Tickets verwalten kann", false)).add_option(dpp::command_option(dpp::command_option_type::co_channel, "logs_channel", "Kanal in dem Ticket-Logs gespeichert werden", false)).add_option(dpp::command_option(dpp::command_option_type::co_string, "channel_name_prefix", "Text, mit dem der Ticketkanalname anfangen soll", false)).add_option(dpp::command_option(dpp::command_option_type::co_boolean, "any_close", "Ob jeder Tickets schließen darf", false))), [&](const dpp::slashcommand_t& event) {
|
||||
bot->add_chatcommand(Bot::ChatCommand({"ticket_settings", "ticket_einstellungen"}, "Lege die Ticket-Einstellungen fest", dpp::slashcommand().add_option(dpp::command_option(dpp::command_option_type::co_channel, "category", "Kategorie in der Tickets erstellt werden", false)).add_option(dpp::command_option(dpp::command_option_type::co_role, "role", "Rolle, die Tickets verwalten kann", false)).add_option(dpp::command_option(dpp::command_option_type::co_channel, "logs_channel", "Kanal in dem Ticket-Logs gespeichert werden", false)).add_option(dpp::command_option(dpp::command_option_type::co_string, "channel_name_prefix", "Text, mit dem der Ticketkanalname anfangen soll", false)).add_option(dpp::command_option(dpp::command_option_type::co_boolean, "any_close", "Ob jeder Tickets schließen darf", false)).add_option(dpp::command_option(dpp::command_option_type::co_boolean, "ping", "Ob Rolle über neue Tickets benachrichtigt werden", false))), [&](const dpp::slashcommand_t& event) {
|
||||
// Check that user has the correct permissions
|
||||
if (!event.command.get_guild().base_permissions(event.command.member).has(dpp::permissions::p_manage_channels | dpp::permissions::p_manage_roles)) {
|
||||
event.reply(dpp::message("Du braucht die Kanal- und Rollenverwaltungsberechtigung, um dieses Kommando zu verwenden.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
|
@ -186,7 +194,8 @@ public:
|
|||
role_opt = event.get_parameter("role"),
|
||||
logs_channel_opt = event.get_parameter("logs_channel"),
|
||||
channel_name_opt = event.get_parameter("channel_name_prefix"),
|
||||
any_close_opt = event.get_parameter("any_close");
|
||||
any_close_opt = event.get_parameter("any_close"),
|
||||
pinge_opt = event.get_parameter("ping");
|
||||
// Update database
|
||||
db_add_guild(event.command.guild_id);
|
||||
if (category_opt.index() != 0) {
|
||||
|
@ -248,6 +257,13 @@ public:
|
|||
<< unsigned(std::get<bool>(any_close_opt))
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
if (any_close_opt.index() != 0) {
|
||||
bot->db << "UPDATE ticket_guild_settings "
|
||||
"SET ping = ? "
|
||||
"WHERE id = ?;"
|
||||
<< unsigned(std::get<bool>(any_close_opt)?PingMode::all:PingMode::none)
|
||||
<< std::to_string(event.command.guild_id);
|
||||
}
|
||||
// Send reply
|
||||
event.reply(dpp::message("Okay.").set_flags(dpp::message_flags::m_ephemeral));
|
||||
});
|
||||
|
@ -283,7 +299,7 @@ public:
|
|||
.set_style(dpp::component_style::cos_primary)
|
||||
.set_id("ticket_create")));
|
||||
bot->cluster.message_create(msg);
|
||||
// Get ticket management role
|
||||
// Get ticket management role to potentially warn about
|
||||
std::string management_role_id;
|
||||
db_add_guild(event.command.guild_id);
|
||||
bot->db << "SELECT management_role FROM ticket_guild_settings "
|
||||
|
@ -372,11 +388,16 @@ public:
|
|||
description = std::get<std::string>(event.components.at(1).components.at(0).value);
|
||||
// Get server settings
|
||||
std::string category_id, channel_name, management_role;
|
||||
unsigned ping;
|
||||
db_add_guild(event.command.guild_id);
|
||||
bot->db << "SELECT category, channel_name, management_role FROM ticket_guild_settings "
|
||||
bot->db << "SELECT category, channel_name, management_role, ping FROM ticket_guild_settings "
|
||||
"WHERE id = ?;"
|
||||
<< std::to_string(event.command.guild_id)
|
||||
>> std::tie(category_id, channel_name, management_role);
|
||||
// Remove management ping if management role is unknown
|
||||
if (management_role.empty()) {
|
||||
ping &= ~PingMode::managers;
|
||||
}
|
||||
// Create channel
|
||||
dpp::channel new_channel;
|
||||
new_channel.set_guild_id(event.command.guild_id)
|
||||
|
@ -391,7 +412,7 @@ public:
|
|||
if (!category_id.empty()) {
|
||||
new_channel.set_parent_id(category_id);
|
||||
}
|
||||
bot->cluster.channel_create(new_channel, [this, event, title, description](const dpp::confirmation_callback_t& ccb) {
|
||||
bot->cluster.channel_create(new_channel, [this, event, title, description, management_role, ping](const dpp::confirmation_callback_t& ccb) {
|
||||
// Check for error
|
||||
if (ccb.is_error()) {
|
||||
event.reply("**FEHLER:** Ticket-Einstellungen sind ungültig.\n**An Server-Administration:** Bitte prüfe ob die Ziel-Kategorie noch existiert und setzte gegebenenfalls eine neue!```json"+ccb.get_error().message+"```");
|
||||
|
@ -410,6 +431,7 @@ public:
|
|||
// Create top-most message
|
||||
dpp::message msg;
|
||||
msg.set_channel_id(channel.id)
|
||||
.set_content((ping&PingMode::creator?event.command.usr.get_mention():"")+(ping&PingMode::managers?("<@&"+management_role+'>'):""))
|
||||
.add_embed(dpp::embed()
|
||||
.set_title(title)
|
||||
.set_description(description)
|
||||
|
|
Loading…
Add table
Reference in a new issue