From 8b366156ddae1522796cb0ee25d13f99925be368 Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Tue, 8 Dec 2015 01:29:45 +0100 Subject: [PATCH] New administration functions, fixes, improvements. Added following commands: .rch channel_name (removes a channel) .rvch channel_name (removes a voice channel) .rr @User role_name (removes a role from a user) .sr @User role_name (adds a role to a user) Added more aliases to administration functions, improved some stuff. --- NadekoBot/Classes/Trivia.cs | 6 +- NadekoBot/Modules/Administration.cs | 128 +++++++++++++++++++++++++--- 2 files changed, 120 insertions(+), 14 deletions(-) diff --git a/NadekoBot/Classes/Trivia.cs b/NadekoBot/Classes/Trivia.cs index 7f27da92..5645fce8 100644 --- a/NadekoBot/Classes/Trivia.cs +++ b/NadekoBot/Classes/Trivia.cs @@ -43,7 +43,7 @@ namespace NadekoBot await client.SendMessage(e.Channel, "**Trivia game started!** It is bound to this channel. But only 1 game can run per server. \n First player to get to 10 points wins! You have 30 seconds per question.\nUse command [tq] if game was started by accident."); } else - await client.SendMessage(e.Channel, "Trivia game is already running on this server. The question is:\n**"+GetCurrentQuestion(e.Server.Id).Question+"**\n[tq quits trivia]\n[@NadekoBot clr clears my messages]"); // TODO type x to be reminded of the question + await client.SendMessage(e.Channel, "Trivia game is already running on this server. The question is:\n**"+GetCurrentQuestion(e.Server.Id).Question+"**\n[tq quits trivia]\n[@NadekoBot clr clears my messages]"); }; } @@ -57,7 +57,7 @@ namespace NadekoBot await client.SendMessage(e.Channel, lb); } else - await client.SendMessage(e.Channel, "Trivia game is not running on this server."); // TODO type x to be reminded of the question + await client.SendMessage(e.Channel, "Trivia game is not running on this server."); }; } @@ -71,7 +71,7 @@ namespace NadekoBot await client.SendMessage(e.Channel, lb); } else - await client.SendMessage(e.Channel, "Trivia game is not running on this server."); // TODO type x to be reminded of the question + await client.SendMessage(e.Channel, "Trivia game is not running on this server."); }; } diff --git a/NadekoBot/Modules/Administration.cs b/NadekoBot/Modules/Administration.cs index a7a9d89f..2bbae0d0 100644 --- a/NadekoBot/Modules/Administration.cs +++ b/NadekoBot/Modules/Administration.cs @@ -18,12 +18,81 @@ namespace NadekoBot.Modules commands.ForEach(cmd => cmd.Init(cgb)); - cgb.CreateCommand(".r").Alias(".role") + cgb.CreateCommand(".sr").Alias(".setrole") + .Description("Sets a role for a given user.\nUsage: .sr @User Guest") + .Parameter("user_name", Discord.Commands.ParameterType.Required) + .Parameter("role_name", Discord.Commands.ParameterType.Required) + .Do(async e => + { + if (!e.User.ServerPermissions.ManageRoles) return; + var usr = client.FindUsers(e.Server, e.GetArg("user_name")).FirstOrDefault(); + if (usr == null) { + await client.SendMessage(e.Channel, "You failed to supply a valid username"); + return; + } + + var role = client.FindRoles(e.Server, e.GetArg("role_name")).FirstOrDefault(); + if (role == null) { + await client.SendMessage(e.Channel, "You failed to supply a valid role"); + return; + } + + try + { + await client.EditUser(usr, null, null, new Discord.Role[] { role }, Discord.EditMode.Add); + await client.SendMessage(e.Channel, $"Successfully added role **{role.Name}** to user **{usr.Mention}**"); + } + catch (InvalidOperationException) { //fkin voltana and his shenanigans, fix role.Mention pl0x + } + catch (Exception ex) + { + await client.SendMessage(e.Channel, "Failed to add roles. Most likely reason: Insufficient permissions.\n"); + Console.WriteLine(ex.ToString()); + } + }); + + cgb.CreateCommand(".rr").Alias(".removerole") + .Description("Removes a role from a given user.\nUsage: .rr @User Admin") + .Parameter("user_name", Discord.Commands.ParameterType.Required) + .Parameter("role_name", Discord.Commands.ParameterType.Required) + .Do(async e => + { + if (!e.User.ServerPermissions.ManageRoles) return; + var usr = client.FindUsers(e.Server, e.GetArg("user_name")).FirstOrDefault(); + if (usr == null) + { + await client.SendMessage(e.Channel, "You failed to supply a valid username"); + return; + } + + var role = client.FindRoles(e.Server, e.GetArg("role_name")).FirstOrDefault(); + if (role == null) + { + await client.SendMessage(e.Channel, "You failed to supply a valid role"); + return; + } + + try + { + await client.EditUser(usr, null, null, new Discord.Role[]{ role }, Discord.EditMode.Remove); + await client.SendMessage(e.Channel, $"Successfully removed role **{role.Name}** from user **{usr.Mention}**"); + } + catch (InvalidOperationException) { + } + catch (Exception) + { + await client.SendMessage(e.Channel, "Failed to add roles. Most likely reason: Insufficient permissions."); + } + }); + + cgb.CreateCommand(".r").Alias(".role").Alias(".cr").Alias(".createrole") .Description("Creates a role with a given name, and color.\n*Both the user and the bot must have the sufficient permissions.*") .Parameter("role_name",Discord.Commands.ParameterType.Required) .Parameter("role_color",Discord.Commands.ParameterType.Optional) .Do(async e => { + if (!e.User.ServerPermissions.ManageRoles) return; + var color = Discord.Color.Blue; if (e.GetArg("role_color") != null) { @@ -34,18 +103,16 @@ namespace NadekoBot.Modules } catch (Exception ex) { - System.Console.WriteLine(ex.ToString()); + Console.WriteLine(ex.ToString()); await client.SendMessage(e.Channel, "Please supply a proper color.\n Example: DarkBlue, Orange, Teal"); return; } } try { - if (e.User.ServerPermissions.ManageRoles) - { var r = await client.CreateRole(e.Server, e.GetArg("role_name")); await client.EditRole(r, null,null, color); - } + await client.SendMessage(e.Channel, $"Successfully created role **{r.Mention}**."); } catch (Exception) { @@ -93,7 +160,26 @@ namespace NadekoBot.Modules } }); - cgb.CreateCommand(".vch") + cgb.CreateCommand(".rvch").Alias(".removevoicechannel") + .Description("Removes a voice channel with a given name.\n*Both the user and the bot must have the sufficient permissions.*") + .Parameter("channel_name", Discord.Commands.ParameterType.Required) + .Do(async e => + { + try + { + if (e.User.ServerPermissions.ManageChannels) + { + await client.DeleteChannel(client.FindChannels(e.Server,e.GetArg("channel_name"),Discord.ChannelType.Voice).FirstOrDefault()); + await client.SendMessage(e.Channel, $"Removed channel **{e.GetArg("channel_name")}**."); + } + } + catch (Exception) + { + await client.SendMessage(e.Channel, "No sufficient permissions."); + } + }); + + cgb.CreateCommand(".vch").Alias(".cvch").Alias(".createvoicechannel") .Description("Creates a new voice channel with a given name.\n*Both the user and the bot must have the sufficient permissions.*") .Parameter("channel_name", Discord.Commands.ParameterType.Required) .Do(async e => @@ -103,6 +189,7 @@ namespace NadekoBot.Modules if (e.User.ServerPermissions.ManageChannels) { await client.CreateChannel(e.Server, e.GetArg("channel_name"), Discord.ChannelType.Voice); + await client.SendMessage(e.Channel, $"Created voice channel **{e.GetArg("channel_name")}**."); } } catch (Exception) @@ -111,8 +198,26 @@ namespace NadekoBot.Modules } }); - cgb.CreateCommand(".ch") - .Alias(".tch") + cgb.CreateCommand(".rch").Alias(".rtch").Alias(".removetextchannel").Alias(".removechannel") + .Description("Removes a text channel with a given name.\n*Both the user and the bot must have the sufficient permissions.*") + .Parameter("channel_name", Discord.Commands.ParameterType.Required) + .Do(async e => + { + try + { + if (e.User.ServerPermissions.ManageChannels) + { + await client.DeleteChannel(client.FindChannels(e.Server, e.GetArg("channel_name"), Discord.ChannelType.Text).FirstOrDefault()); + await client.SendMessage(e.Channel, $"Removed text channel **{e.GetArg("channel_name")}**."); + } + } + catch (Exception) + { + await client.SendMessage(e.Channel, "No sufficient permissions."); + } + }); + + cgb.CreateCommand(".ch").Alias(".tch").Alias(".createchannel").Alias(".createtextchannel") .Description("Creates a new text channel with a given name.\n*Both the user and the bot must have the sufficient permissions.*") .Parameter("channel_name", Discord.Commands.ParameterType.Required) .Do(async e => @@ -122,6 +227,7 @@ namespace NadekoBot.Modules if (e.User.ServerPermissions.ManageChannels) { await client.CreateChannel(e.Server, e.GetArg("channel_name"), Discord.ChannelType.Text); + await client.SendMessage(e.Channel, $"Added text channel **{e.GetArg("channel_name")}**."); } } catch (Exception) { @@ -129,7 +235,7 @@ namespace NadekoBot.Modules } }); - cgb.CreateCommand(".uid") + cgb.CreateCommand(".uid").Alias(".userid") .Description("Shows user id") .Parameter("user",Discord.Commands.ParameterType.Required) .Do(async e => @@ -140,14 +246,14 @@ namespace NadekoBot.Modules await client.SendMessage(e.Channel, "You must mention a user."); }); - cgb.CreateCommand(".cid") + cgb.CreateCommand(".cid").Alias(".channelid") .Description("Shows current channel id") .Do(async e => { await client.SendMessage(e.Channel, "This channel's id is " + e.Channel.Id); }); - cgb.CreateCommand(".sid") + cgb.CreateCommand(".sid").Alias(".serverid") .Description("Shows current server id") .Do(async e => {