1
0
Fork 0
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:
niansa 2022-11-01 15:49:09 +01:00
parent f43bfe8e7c
commit 135fdbe21e

View file

@ -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)