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 {
|
class Ticket {
|
||||||
Bot *bot;
|
Bot *bot;
|
||||||
|
|
||||||
|
@ -163,6 +170,7 @@ public:
|
||||||
" logs_channel TEXT,"
|
" logs_channel TEXT,"
|
||||||
" channel_name TEXT,"
|
" channel_name TEXT,"
|
||||||
" any_close INTEGER,"
|
" any_close INTEGER,"
|
||||||
|
" ping INTEGER,"
|
||||||
" UNIQUE(id)"
|
" UNIQUE(id)"
|
||||||
");";
|
");";
|
||||||
bot->db << "CREATE TABLE IF NOT EXISTS tickets ("
|
bot->db << "CREATE TABLE IF NOT EXISTS tickets ("
|
||||||
|
@ -175,7 +183,7 @@ public:
|
||||||
" UNIQUE(guild_id, channel_id, author_id)"
|
" 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
|
// 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)) {
|
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));
|
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"),
|
role_opt = event.get_parameter("role"),
|
||||||
logs_channel_opt = event.get_parameter("logs_channel"),
|
logs_channel_opt = event.get_parameter("logs_channel"),
|
||||||
channel_name_opt = event.get_parameter("channel_name_prefix"),
|
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
|
// Update database
|
||||||
db_add_guild(event.command.guild_id);
|
db_add_guild(event.command.guild_id);
|
||||||
if (category_opt.index() != 0) {
|
if (category_opt.index() != 0) {
|
||||||
|
@ -248,6 +257,13 @@ public:
|
||||||
<< unsigned(std::get<bool>(any_close_opt))
|
<< unsigned(std::get<bool>(any_close_opt))
|
||||||
<< std::to_string(event.command.guild_id);
|
<< 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
|
// Send reply
|
||||||
event.reply(dpp::message("Okay.").set_flags(dpp::message_flags::m_ephemeral));
|
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_style(dpp::component_style::cos_primary)
|
||||||
.set_id("ticket_create")));
|
.set_id("ticket_create")));
|
||||||
bot->cluster.message_create(msg);
|
bot->cluster.message_create(msg);
|
||||||
// Get ticket management role
|
// Get ticket management role to potentially warn about
|
||||||
std::string management_role_id;
|
std::string management_role_id;
|
||||||
db_add_guild(event.command.guild_id);
|
db_add_guild(event.command.guild_id);
|
||||||
bot->db << "SELECT management_role FROM ticket_guild_settings "
|
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);
|
description = std::get<std::string>(event.components.at(1).components.at(0).value);
|
||||||
// Get server settings
|
// Get server settings
|
||||||
std::string category_id, channel_name, management_role;
|
std::string category_id, channel_name, management_role;
|
||||||
|
unsigned ping;
|
||||||
db_add_guild(event.command.guild_id);
|
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 = ?;"
|
"WHERE id = ?;"
|
||||||
<< std::to_string(event.command.guild_id)
|
<< std::to_string(event.command.guild_id)
|
||||||
>> std::tie(category_id, channel_name, management_role);
|
>> 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
|
// Create channel
|
||||||
dpp::channel new_channel;
|
dpp::channel new_channel;
|
||||||
new_channel.set_guild_id(event.command.guild_id)
|
new_channel.set_guild_id(event.command.guild_id)
|
||||||
|
@ -391,7 +412,7 @@ public:
|
||||||
if (!category_id.empty()) {
|
if (!category_id.empty()) {
|
||||||
new_channel.set_parent_id(category_id);
|
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
|
// Check for error
|
||||||
if (ccb.is_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+"```");
|
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
|
// Create top-most message
|
||||||
dpp::message msg;
|
dpp::message msg;
|
||||||
msg.set_channel_id(channel.id)
|
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()
|
.add_embed(dpp::embed()
|
||||||
.set_title(title)
|
.set_title(title)
|
||||||
.set_description(description)
|
.set_description(description)
|
||||||
|
|
Loading…
Add table
Reference in a new issue