bool HasPermission(string UserId, string Key, PermissionType Type = PermissionType.Menu) { log.Info("ProtalHasPermission", UserId, Key, Type); if (UserId.IsEmpty()) { return(false); } if (Key.IsEmpty()) { return(true); } if (UserId.ToInt() < 0) { return(true); } switch (Type) { case PermissionType.Menu: { ICache wc = new WebCache(); return(wc.Simple($"Permission_{Type.ToString()}_{UserId}", () => _db.ExecuteTable($@"SELECT A.MENUID FROM USERMODULE A,MENU B where A.MENUID = B.ID and exists(select 1 from USER_ROLE A1, ROLE_MENU B1,USERMODULE C1 where A1.USERID= '{UserId}' and A1.ROLEID = B1.ROLEID and B1.MENUID=C1.MENUID and C1.MENUID = A.MENUID )") .ToList <string>().ToArray()) .Contains(Type.ToString() + Key)); } default: { throw new Exception("未知的权限类型"); } } }
/// <summary> /// Determines whether the current permission /// is a subset of the specified permission. /// </summary> /// <param name="permission">The permission.</param> /// <returns>True if the current permission is a subset of the specified permission; otherwise, false.</returns> public virtual bool IsSubsetOf(PermissionType permission) { int found = 0; // Get the permission lists. string[] permPass = permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); string[] permCurrent = _permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); int totalCount = permPass.Length; // For each permission. foreach (string item in permPass) { // Find the permission. IEnumerable <string> results = permCurrent.Where(u => u.Trim().Equals(item.Trim())); if (results != null && results.Count() > 0) { found++; } } // If all have been found in permission. if (found == totalCount) { return(true); } else { return(false); } }
bool HasPermission(string UserId, string Key, PermissionType Type = PermissionType.Menu) { log.Info("ERPHasPermission", UserId, Key, Type); if (UserId.IsEmpty()) { return(false); } if (Key.IsEmpty()) { return(true); } if (UserId.ToInt() < 0) { return(true); } switch (Type) { case PermissionType.Menu: { ICache wc = new WebCache(); return(wc.Simple($"Permission_{Type.ToString()}_{UserId}", () => service.GetPermissionByUserId(UserId)) .Contains(Key)); } default: { throw new Exception("未知的权限类型"); } } }
private Permission GetPermission(string apiKey, PermissionType permType, out User user, out ApiKey key) { if (String.IsNullOrEmpty(apiKey)) { throw new ArgumentNullException(nameof(apiKey)); } key = GetApiKey(apiKey, out user); if (key == null || user == null) { return(null); } DbExpression e = new DbExpression( _ORM.GetColumnName <Permission>(nameof(Permission.Id)), DbOperators.GreaterThan, 0); switch (permType) { case PermissionType.Search: e.PrependAnd(new DbExpression(_ORM.GetColumnName <Permission>(nameof(Permission.AllowSearch)), DbOperators.Equals, 1)); break; case PermissionType.CreateDocument: e.PrependAnd(new DbExpression(_ORM.GetColumnName <Permission>(nameof(Permission.AllowCreateDocument)), DbOperators.Equals, 1)); break; case PermissionType.DeleteDocument: e.PrependAnd(new DbExpression(_ORM.GetColumnName <Permission>(nameof(Permission.AllowDeleteDocument)), DbOperators.Equals, 1)); break; case PermissionType.CreateIndex: e.PrependAnd(new DbExpression(_ORM.GetColumnName <Permission>(nameof(Permission.AllowCreateIndex)), DbOperators.Equals, 1)); break; case PermissionType.DeleteIndex: e.PrependAnd(new DbExpression(_ORM.GetColumnName <Permission>(nameof(Permission.AllowDeleteIndex)), DbOperators.Equals, 1)); break; default: throw new ArgumentException("Unknown permission type: " + permType.ToString()); } Permission p = _ORM.SelectFirst <Permission>(e); if (p != null && p != default(Permission)) { return(p); } return(null); }
/// <summary> /// Creates and returns a permission that is the intersection /// of the current permission and the specified permission. /// </summary> /// <param name="permission">The permission.</param> /// <returns>The resulting permission.</returns> public virtual PermissionType Intersect(PermissionType permission) { PermissionType perm; List <string> permList = new List <string>(); // Get the permission lists. string[] permPass = permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); string[] permCurrent = _permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // For each permission. foreach (string item in permCurrent) { // Find the permission. IEnumerable <string> results = permPass.Where(u => u.Trim().Equals(item.Trim())); if (results != null && results.Count() > 0) { // Add to the collection. permList.Add(item.Trim()); } } // If permission exists. if (permList.Count > 0) { // Get the intersect. string permInterset = string.Join(",", permList.ToArray()); perm = (PermissionType)Enum.Parse(typeof(PermissionType), permInterset); } else { perm = PermissionType.None; } // Return the permission. return(perm); }
public static (string Subject, string MessageBody) GetUpdatePermissionMessage(PermissionType type, CheckPermissionResultDto.RecipientDto recipient, FileStorageDto.StorageDto storage, UserDto sender) { var parentStorageId = storage.Client == null && storage.Owner != null ? AppSettings.SharedWithMeUrlPart : storage.ParentStorageId.ToString(); var link = String.Join("/", AppSettings.FrontEndUrl, AppSettings.FileManagerUrlPart, parentStorageId); var fileStorageType = storage.IsDirectory ? Constants.NotificationMessages.Folder : Constants.NotificationMessages.File; var fileStorageName = String.Join("", storage.Name, storage.File?.Extension); var subject = Constants.NotificationMessages.NotificationSubject; var message = String.Format(Constants.NotificationMessages.UpdatePermissionNotificationMessage, recipient.UserName, sender.UserName, fileStorageType, fileStorageName, type.ToString(), link); return(subject, message); }
public static Permission GetPermission(PermissionType rightType, string id, int amId) { Permission permission = new Permission(); PermissionCache permissionCache = (PermissionCache) new PermissionCache().GetData(); int index = permissionCache.dvPermissionBy_Type_Id_MdId.Find(new object[] { rightType.ToString(), id, amId }); bool flag = index >= 0; if (flag) { Permission permission2 = new Permission(); permission = PermissionUtils.GetObject(permissionCache.dvPermissionBy_Type_Id_MdId[index].Row); } return(permission); }
public override Task <PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) { // whitelist if (context.User.Id == 396163884005851137) { return(Task.FromResult(PreconditionResult.FromSuccess())); } if (Permission != PermissionType.BotAdmin) { if ((context as SocketCommandContext).IsPrivate) { return(Task.FromResult(PreconditionResult.FromSuccess())); } OliveGuild.GuildSetting setting = OliveGuild.Get(context.Guild.Id).Setting; SocketGuildUser user = context.User as SocketGuildUser; if (context.Guild.OwnerId == user.Id) { return(Task.FromResult(PreconditionResult.FromSuccess())); } string perm = Permission.ToString(); if (setting.PermissionRoles.ContainsKey(perm) && context.Guild.Roles.Any(r => r.Id == setting.PermissionRoles[perm])) { if (user.Roles.Any(r => r.Position >= context.Guild.GetRole(setting.PermissionRoles[perm]).Position)) { return(Task.FromResult(PreconditionResult.FromSuccess())); } } else { if (Permission is PermissionType.UseBot or PermissionType.SpeakByBot or PermissionType.ManageCommand or PermissionType.CreateVote) { return(Task.FromResult(PreconditionResult.FromSuccess())); } } } return(Task.FromResult(PreconditionResult.FromError($"이 커맨드를 실행하려면 {PermissionToString(Permission)} 권한이 필요해요"))); }
/// <summary> /// Creates a permission that is the union of the current permission and the specified permission. /// </summary> /// <param name="permission">A permission to combine with the current permission. It must be of the same /// type as the current permission.</param> /// <returns>A new permission that represents the union of the current permission and /// the specified permission.</returns> public virtual PermissionType Union(PermissionType permission) { PermissionType perm; List <string> permList = new List <string>(); // Get the permission lists. string[] permPass = permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); string[] permCurrent = _permission.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // For each permission. foreach (string item in permCurrent) { // Add to the collection. permList.Add(item.Trim()); } // For each permission. foreach (string item in permPass) { if (!permList.Contains(item.Trim())) { // Add to the collection. permList.Add(item.Trim()); } } // If permission exists. if (permList.Count > 0) { // Get the intersect. string permInterset = string.Join(",", permList.ToArray()); perm = (PermissionType)Enum.Parse(typeof(PermissionType), permInterset); } else { perm = PermissionType.None; } // Return the permission. return(perm); }
public void OnAuthorization(AuthorizationContext filterContext) { // var sessioninfo = new SessionManager(); if (!string.IsNullOrEmpty(OptionalParameter) && !string.IsNullOrEmpty(filterContext.HttpContext.Request.Params[OptionalParameter])) { if (filterContext.HttpContext.Request.Params[OptionalParameter] != "0") { PermissionType = OptionalPermissionType; } } var permissionInfo = PermissionHelper.GetRoleObjectPermission(SessionHelper.Role, Convert.ToInt32(ObjectId)); var authorized = Convert.ToBoolean(permissionInfo.GetType() .GetProperty(PermissionType.ToString()) .GetValue(permissionInfo, null)); if (!authorized && OptionalPermissionTypeConsult > 0) { authorized = Convert.ToBoolean(permissionInfo.GetType() .GetProperty(OptionalPermissionTypeConsult.ToString()) .GetValue(permissionInfo, null)); } if (authorized) { return; } var controller = filterContext.RouteData.Values["controller"] ?? "InValid"; var action = filterContext.RouteData.Values["action"] ?? "InValid"; filterContext.Result = new HttpUnauthorizedResult(); HttpContext.Current.Response.Redirect("~/Frontal/Accounts/UnAuthorized?controllerName=" + controller.ToString() + "&actionName=" + action.ToString()); }
private void SetupCommands() { #region Owner only CommandsManager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { Exit(); })); CommandsManager.AddCommand(new CommandStub("joinvoice", "Joins a specified voice channel", "Arg is case insensitive voice channel name to join.", PermissionType.Owner, 1, cmdArgs => { DiscordChannel channelToJoin = cmdArgs.Channel.parent.channels.Find(x => x.Name.ToLower() == cmdArgs.Args[0].ToLower() && x.Type == ChannelType.Voice); if (channelToJoin != null) { DiscordVoiceConfig config = new DiscordVoiceConfig { FrameLengthMs = 20, Channels = 1, OpusMode = Discord.Audio.Opus.OpusApplication.LowLatency, SendOnly = true }; waveFormat = new WaveFormat(48000, 16, config.Channels); if (!config.SendOnly) { waveCallbackInfo = WaveCallbackInfo.FunctionCallback(); outputDevice = new WaveOut(); } client.ConnectToVoiceChannel(channelToJoin, config); } else { cmdArgs.Channel.SendMessage("Couldn't find the specified channel as a voice channel!"); } })); CommandsManager.AddCommand(new CommandStub("disconnect", "Disconnects from voice", "", PermissionType.Owner, 1, cmdArgs => { client.DisconnectFromVoice(); })); CommandsManager.AddCommand(new CommandStub("testvoice", "Broadcasts specified file over voice.", "", PermissionType.Owner, 1, cmdArgs => { if (File.Exists(cmdArgs.Args[0])) { if (client.ConnectedToVoice()) { SendVoice(cmdArgs.Args[0]); } else { cmdArgs.Channel.SendMessage("Not connected to voice!"); } } else { cmdArgs.Channel.SendMessage("Couldn't broadcast specified file! It doesn't exist!"); } })); CommandsManager.AddCommand(new CommandStub("statusof", "`Status` test", "", PermissionType.Owner, 1, cmdArgs => { string id = cmdArgs.Args[0].Trim(new char[] { '<', '@', '>' }); if (!string.IsNullOrEmpty(id)) { DiscordMember member = cmdArgs.Channel.parent.members.Find(x => x.ID == id); if (member != null) { string msg = $"Status of `{member.Username}`\n{member.Status}"; if (!string.IsNullOrEmpty(member.CurrentGame)) { msg += $"\nPlaying: *{member.CurrentGame}*"; } cmdArgs.Channel.SendMessage(msg); } } })); CommandsManager.AddCommand(new CommandStub("changepic", "Changes the bot's guild pic test.", "Test", PermissionType.Owner, 1, cmdArgs => { Regex linkParser = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); string rawString = $"{cmdArgs.Args[0]}"; if (linkParser.Matches(rawString).Count > 0) { string url = linkParser.Matches(rawString)[0].ToString(); using (WebClient wc = new WebClient()) { byte[] data = wc.DownloadData(url); using (MemoryStream mem = new MemoryStream(data)) { using (var image = System.Drawing.Image.FromStream(mem)) { client.ChangeClientAvatar(new Bitmap(image)); } } } } })); CommandsManager.AddCommand(new CommandStub("sendchanneltest", "`Client.SendMessageToChannel` Test", "", PermissionType.Owner, cmdArgs => { client.SendMessageToChannel("Works!", cmdArgs.Channel); })); CommandsManager.AddCommand(new CommandStub("setplaying", "Sets the current game the bot is playing.", "", PermissionType.Owner, 1, cmdArgs => { client.UpdateCurrentGame(cmdArgs.Args[0]); })); CommandsManager.AddCommand(new CommandStub("join", "Joins a specified server", "", PermissionType.Owner, 1, cmdArgs => { string substring = cmdArgs.Args[0].Substring(cmdArgs.Args[0].LastIndexOf('/') + 1); client.AcceptInvite(substring); })); CommandsManager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { char newPrefix = cmdArgs.Args[0][0]; config.CommandPrefix = newPrefix; cmdArgs.Channel.SendMessage($"Command prefix changed to **{config.CommandPrefix}** successfully!"); } else { cmdArgs.Channel.SendMessage("What prefix?"); } })); CommandsManager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); CommandsManager.AddPermission(id, type); e.Channel.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!"); } })); CommandsManager.AddCommand(new CommandStub("prune", "Prune test", "", PermissionType.Owner, 1, cmdArgs => { int messageCount = 0; if (int.TryParse(cmdArgs.Args[0], out messageCount)) { var messagesToPrune = client.GetMessageHistory(cmdArgs.Channel, messageCount); foreach (var msg in messagesToPrune) { client.DeleteMessage(msg); Thread.Sleep(100); } cmdArgs.Channel.SendMessage($"Attempted pruning of {messageCount} messages."); } })); #endregion #region Admin CommandsManager.AddCommand(new CommandStub("eval", "Evaluates real-time C# code. Be careful with this", "Evaluates C# code that is dynamically compiled.\n\nThe following namespaces are available for use:\n * DiscordSharp\n * System.Threading\n * DiscordSharp.Objects\n\n\nMake sure your function returns a string value.\nYou can reference the DiscordSharp client by using `discordClient`.", PermissionType.Admin, 1, e => { string whatToEval = e.Args[0]; if (whatToEval.StartsWith("`") && whatToEval.EndsWith("`")) { whatToEval = whatToEval.Trim('`'); } try { var eval = EvalProvider.CreateEvalMethod <DiscordClient, string>(whatToEval, new string[] { "DiscordSharp", "System.Threading", "DiscordSharp.Objects" }, new string[] { "DiscordSharp.dll" }); string res = ""; Thread.Sleep(1000); Thread executionThread = null; Task evalTask = new Task(() => { executionThread = Thread.CurrentThread; if (eval != null) { res = eval(client); } else { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } e.Channel.SendMessage($"```\n{errors}\n```"); } else { e.Channel.SendMessage("Errors!"); } } }); evalTask.Start(); evalTask.Wait(10 * 1000); if (executionThread != null) { executionThread.Abort(); } if (res == null || res == "") { e.Channel.SendMessage("Terminated after 10 second timeout."); } else { e.Channel.SendMessage($"**Result**\n```\n{res}\n```"); } } catch (Exception ex) { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } else { errors += ex.Message; } e.Channel.SendMessage($"```\n{errors}\n```"); } else { e.Channel.SendMessage("Errors!"); } } })); #endregion #region Anyone, but limited to server mods CommandsManager.AddCommand(new CommandStub("gtfo", "Makes the bot leave the server", "", PermissionType.User, cmdArgs => { bool canExecute = false; foreach (var roll in cmdArgs.Author.Roles) { if (roll.permissions.HasPermission(DiscordSpecialPermissions.ManageServer)) { canExecute = true; } } if (canExecute) { client.LeaveServer(cmdArgs.Channel.parent); } else { cmdArgs.Channel.SendMessage("You don't have the proper permissions to do this! You need the ManagerServer permission."); } })); #endregion #region Literally anyone CommandsManager.AddCommand(new CommandStub("cmdinfo", "Displays help for a command.", "Help", PermissionType.User, 2, e => { if (!String.IsNullOrEmpty(e.Args[0])) { ICommand stub = CommandsManager.Commands.Find(x => x.CommandName == e.Args[0]); if (stub != null) { string msg = "**Help for " + stub.CommandName + "**"; msg += $"\n{stub.Description}"; if (!String.IsNullOrEmpty(stub.HelpTag)) { msg += $"\n\n{stub.HelpTag}"; } e.Channel.SendMessage(msg); } else { e.Channel.SendMessage("What command?"); } } else { e.Channel.SendMessage("What command?"); } })); CommandsManager.AddCommand(new CommandStub("about", "Shows bot information", "", cmdArgs => { string message = "**About Luigibot**\n"; message += "Owner: " + owner.Username + "\n"; message += $"Library: DiscordSharp {typeof(DiscordClient).Assembly.GetName().Version.ToString()}\n"; var uptime = (DateTime.Now - loginDate); message += $"Uptime: {uptime.Days} days, {uptime.Hours} hours, {uptime.Minutes} minutes.\n"; message += "Runtime: "; if (runningOnMono) { message += "Mono\n"; } else { message += ".Net\n"; } message += $"OS: {osString}\n"; long memUsage = GetMemoryUsage(); if (memUsage > 0) { message += "Memory Usage: " + (memUsage / 1024) / 2 + "mb\n"; } message += "Commands: " + CommandsManager.Commands.Count + "\n"; message += "Command Prefix: " + config.CommandPrefix + "\n"; message += "Total Servers: " + client.GetServersList().Count + "\n"; cmdArgs.Channel.SendMessage(message); })); CommandsManager.AddCommand(new CommandStub("ygo", "Retrieves information for a Yu-Gi-Oh card from the YugiohPrices database.", "Card names are (unfortunately) case sensitive.\n\n**Valid:** Dark Magician\n**Invalid: **dark magician", PermissionType.User, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { YugiohPricesSearcher searcher = new YugiohPricesSearcher(); try { var card = searcher.GetCardByName(cmdArgs.Args[0]).Result; if (card.Name != "<NULL CARD>") { card.CardImage.Save("ygotemp.png"); string message = $"**{card.Name}**"; if (card.Type == CardType.Monster) { message += $" Level: {card.Level} Attribute: {card.Attribute}\n"; } else { message += "\n"; } message += $"**Description:** {card.Description}"; if (card.Type == CardType.Monster) { message += $"\n**Type:** {card.MonsterType}\n**ATK/DEF:** {card.Attack}/{card.Defense}"; } client.AttachFile(cmdArgs.Channel, message, "ygotemp.png"); } else { cmdArgs.Channel.SendMessage("Couldn't find that specified card!"); } } catch (HttpRequestException ex) { cmdArgs.Channel.SendMessage("Couldn't find that specified card! (" + ex.Message + ")"); } } })); CommandsManager.AddCommand(new CommandStub("khaled", "Anotha one.", "", cmdArgs => { if (rng == null) { Console.WriteLine("RNG null?!"); rng = new Random((int)DateTime.Now.Ticks); } cmdArgs.Channel.SendMessage($"***{KhaledQuotes[rng.Next(0, KhaledQuotes.Length - 1)]}***"); })); #endregion }
public PermissionViewModel(PermissionType permissionType) { Name = permissionType.ToString(); Desciption = permissionType.ToDescription(); }
private void SetupCommands() { #region Owner only CommandsManager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { Exit(); })); CommandsManager.AddCommand(new CommandStub("setplaying", "Sets the current game the bot is playing.", "", PermissionType.Owner, 1, cmdArgs => { client.UpdateCurrentGame(cmdArgs.Args[0]); })); CommandsManager.AddCommand(new CommandStub("join", "Joins a specified server", "", PermissionType.Owner, 1, cmdArgs => { string substring = cmdArgs.Args[0].Substring(cmdArgs.Args[0].LastIndexOf('/') + 1); client.AcceptInvite(substring); })); CommandsManager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { char newPrefix = cmdArgs.Args[0][0]; config.CommandPrefix = newPrefix; cmdArgs.Channel.SendMessage($"Command prefix changed to **{config.CommandPrefix}** successfully!"); } else { cmdArgs.Channel.SendMessage("What prefix?"); } })); CommandsManager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); CommandsManager.AddPermission(id, type); e.Channel.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!"); } })); #endregion #region Admin CommandsManager.AddCommand(new CommandStub("eval", "Evaluates real-time C# code. Be careful with this", "Evaluates C# code that is dynamically compiled.\n\nThe following namespaces are available for use:\n * DiscordSharp\n * System.Threading\n * DiscordSharp.Objects\n\n\nMake sure your function returns a string value.\nYou can reference the DiscordSharp client by using `discordClient`.", PermissionType.Admin, 1, e => { string whatToEval = e.Args[0]; if (whatToEval.StartsWith("`") && whatToEval.EndsWith("`")) { whatToEval = whatToEval.Trim('`'); } try { var eval = EvalProvider.CreateEvalMethod <DiscordClient, string>(whatToEval, new string[] { "DiscordSharp", "System.Threading", "DiscordSharp.Objects" }, new string[] { "DiscordSharp.dll" }); string res = ""; Thread.Sleep(1000); Thread executionThread = null; Task evalTask = new Task(() => { executionThread = Thread.CurrentThread; if (eval != null) { res = eval(client); } else { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } e.Channel.SendMessage($"```\n{errors}\n```"); } else { e.Channel.SendMessage("Errors!"); } } }); evalTask.Start(); evalTask.Wait(10 * 1000); if (executionThread != null) { executionThread.Abort(); } if (res == null || res == "") { e.Channel.SendMessage("Terminated after 10 second timeout."); } else { e.Channel.SendMessage($"**Result**\n```\n{res}\n```"); } } catch (Exception ex) { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } else { errors += ex.Message; } e.Channel.SendMessage($"```\n{errors}\n```"); } else { e.Channel.SendMessage("Errors!"); } } })); #endregion #region Anyone, but limited to server mods CommandsManager.AddCommand(new CommandStub("gtfo", "Makes the bot leave the server", "", PermissionType.User, cmdArgs => { bool canExecute = false; foreach (var roll in cmdArgs.Author.Roles) { if (roll.permissions.HasPermission(DiscordSpecialPermissions.ManageServer)) { canExecute = true; } } if (canExecute) { client.LeaveServer(cmdArgs.Channel.parent); } else { cmdArgs.Channel.SendMessage("You don't have the proper permissions to do this! You need the ManagerServer permission."); } })); #endregion #region Literally anyone CommandsManager.AddCommand(new CommandStub("cmdinfo", "Displays help for a command.", "Help", PermissionType.User, 2, e => { if (!String.IsNullOrEmpty(e.Args[0])) { ICommand stub = CommandsManager.Commands.Find(x => x.CommandName == e.Args[0]); if (stub != null) { string msg = "**Help for " + stub.CommandName + "**"; msg += $"\n{stub.Description}"; if (!String.IsNullOrEmpty(stub.HelpTag)) { msg += $"\n\n{stub.HelpTag}"; } e.Channel.SendMessage(msg); } else { e.Channel.SendMessage("What command?"); } } else { e.Channel.SendMessage("What command?"); } })); CommandsManager.AddCommand(new CommandStub("about", "Shows bot information", "", cmdArgs => { string message = "**About Luigibot**\n"; message += "Owner: " + owner.Username + "\n"; message += "Library: DiscordSharp\n"; message += "Uptime: " + (DateTime.Now - loginDate).ToString() + "\n"; message += "Compiled Under: "; if (Mono()) { message += "Mono\n"; } else { message += ".Net\n"; } long memUsage = GetMemoryUsage(); if (memUsage > 0) { message += "Memory Usage: " + (memUsage / 1024) / 2 + "mb\n"; } message += "Commands: " + CommandsManager.Commands.Count + "\n"; message += "Command Prefix: " + config.CommandPrefix + "\n"; message += "Total Servers: " + client.GetServersList().Count + "\n"; cmdArgs.Channel.SendMessage(message); })); #endregion }
public virtual bool HasPermission(PermissionType permission, Guid? scope) { if (this.IsAdmin) { return true; } if (this.IsUser) { if (myAuthzs.Any(f => f.Permission == permission && (scope == null || f.Scope == scope))) { return true; } using (var ctx = storeFactory.Create(this.UserLogin)) { //// Authorization can be assigned directly to the user. //if (ctx.Authorization.Any(f => f.Permission == permission && f.Scope == scope && f.UserName == this.UserLogin)) //{ // return true; //} FieldInfo fi = permission.GetType().GetField(permission.ToString()); PermissionScopeAttribute[] attributes = (PermissionScopeAttribute[])fi.GetCustomAttributes(typeof(PermissionScopeAttribute), false); foreach (var attrib in attributes) { if (attrib.ScopeType == PermissionScopeType.Organization) { var authzdRoles = ctx.Authorization.IncludePaths("Role").Where(f => f.Permission == permission && f.Scope == scope && f.Role != null).ToList(); var me = ctx.Users.IncludePaths("Roles.Role").Single(f => f.Username == this.UserLogin); var myDirectRoles = me.Roles.Select(f => f.Role).ToList(); // If my direct membership in a role means that I end up being in a role that's got the authorization, then I get the authorization. if (authzdRoles.Any(f => { RoleKey key = new RoleKey { Name = f.Role.Name, OrgId = f.Scope }; return flattenedRoles.ContainsKey(key) && (from have in myDirectRoles join need in flattenedRoles[key] on have.Id equals need.Id select have).Any(); })) { return true; } } else if (attrib.ScopeType == PermissionScopeType.MemberOfOrganization) { // Figure out if the user has permissions on a member due to being able to manage an organization to which the user belongs // Get the member's current org id's IEnumerable<Guid> orgIds = ctx.Members.Where(f => f.Id == scope.Value).SelectMany( f => f.Memberships.Select(g => g.OrganizationId)).AsEnumerable(); // If any of the users authorizations are of the given permission on a scope of one of the user's orgs, // then grant the operation. if (myAuthzs.Any(f => f.Permission == permission && orgIds.Any(g => g == f.Scope))) { return true; } } else if (attrib.ScopeType == PermissionScopeType.Member) { if (myAuthzs.Any(f => f.Permission == permission && f.Scope == scope)) { return true; } } else { throw new NotImplementedException("Don't know PermissionScope " + attrib.ScopeType.ToString()); } } //Type t = PermissionScopeTypeAttribute.GetScopeType(permission); //if (t == typeof(Organization)) //{ // var me = ctx.Users.IncludePaths("Roles.Role").Single(f => f.Username == this.UserLogin); // var myDirectRoles = me.Roles.Select(f => f.Role).ToList(); // // If my direct membership in a role means that I end up being in a role that's got the authorization, then I get the authorization. // if (authzdRoles.Any(f => // { // RoleKey key = new RoleKey { Name = f.Role.Name, OrgId = f.Scope }; // return flattenedRoles.ContainsKey(key) && (from have in myDirectRoles join need in flattenedRoles[key] on have.Id equals need.Id select have).Any(); // })) // { // return true; // } //} } } return false; }
public RequirePermissionAttribute(PermissionType permissionType) : base(typeof(RequireClaimFilter)) { Arguments = new object[] { new Claim("permission", permissionType.ToString()), }; }
public string toJson() { return("{\"ObjectID\":" + (!ObjectID.HasValue ? "null" : "\"" + ObjectID.Value.ToString() + "\"") + ",\"RoleID\":" + (!RoleID.HasValue ? "null" : "\"" + RoleID.Value.ToString() + "\"") + ",\"RoleName\":\"" + Base64.encode(RoleName) + "\"" + ",\"RoleType\":\"" + Base64.encode(RoleType) + "\"" + ",\"NodeType\":\"" + Base64.encode(NodeType) + "\"" + ",\"AdditionalID\":\"" + Base64.encode(AdditionalID) + "\"" + ",\"Allow\":" + (!Allow.HasValue ? "null" : Allow.Value.ToString().ToLower()) + ",\"ExpirationDate\":" + (!ExpirationDate.HasValue ? "null" : "\"" + ExpirationDate.Value.ToString("yyyy-MM-dd") + "\"") + ",\"ExpirationDate_Locale\":" + (!ExpirationDate.HasValue ? "null" : "\"" + PublicMethods.get_local_date(ExpirationDate.Value) + "\"") + ",\"PermissionType\":" + (PermissionType == PermissionType.None ? "null" : "\"" + PermissionType.ToString() + "\"") + "}"); }
public async Task <bool> IsAllowedAsync(PermissionType permissionType, SocketUser user) { if (await IsBotAdminAsync(user)) { return(true); } else { using (var dbContext = new BotDbContext(_config)) { var perms = await GetAllPermissionsToAUserAsync(user.Id.ToString(), dbContext); var result = perms.Select(p => p.Id).Contains((long)permissionType); if (!result) { var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.PermissionDenied); _logger.LogInformation(id, LogMessageBuilder.Build(id, $"Permission: '{permissionType.ToString()}' denied for user with id '{user.Id}'")); } return(result); } } }
public bool HasPermission(PermissionType permissionType) { return IsAdm || PermissionStrings.Contains(permissionType.ToString()); }
public bool HasPermission(Controller controller, PermissionType permission) { string value = GetClaimValue(controller, permission.ToString()); return(!value.Equals("")); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { mainEntry.Exit(); }), this); manager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); manager.AddPermission(id, type); e.Channel.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!"); } }), this); manager.AddCommand(new CommandStub("disablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (!manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessage("Module already disabled!"); return; } try { manager.DisableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessage($"Disabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessage($"Couldn't disable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessage("What module?"); } }), this); manager.AddCommand(new CommandStub("enablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessage("Module already enabled!"); return; } try { manager.EnableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessage($"Enabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessage($"Couldn't enable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessage("What module?"); } }), this); manager.AddCommand(new CommandStub("modules", "Lists all the modules and whether or not they're enabled.", "", PermissionType.Owner, cmdArgs => { string msg = $"**Modules**"; foreach (var kvp in manager.Modules) { msg += $"\n`{kvp.Key.Name}` - {kvp.Value.ToString()}"; } cmdArgs.Channel.SendMessage(msg); })); manager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { char oldPrefix = mainEntry.config.CommandPrefix; try { char newPrefix = cmdArgs.Args[0][0]; mainEntry.config.CommandPrefix = newPrefix; cmdArgs.Channel.SendMessage($"Command prefix changed to **{mainEntry.config.CommandPrefix}** successfully!"); } catch (Exception) { cmdArgs.Channel.SendMessage($"Unable to change prefix to `{cmdArgs.Args[0][0]}`. Falling back to `{oldPrefix}`."); mainEntry.config.CommandPrefix = oldPrefix; } } else { cmdArgs.Channel.SendMessage("What prefix?"); } })); manager.AddCommand(new CommandStub("prune", "Prunes the specified amount of messages.", "If the bot has the role `ManagerMessages`, he will prune other messages in chat.", PermissionType.Owner, 1, cmdArgs => { int messageCount = 0; if (int.TryParse(cmdArgs.Args[0], out messageCount)) { var messagesToPrune = manager.Client.GetMessageHistory(cmdArgs.Channel, messageCount); DiscordMember selfInServer = cmdArgs.Channel.Parent.GetMemberByKey(manager.Client.Me.ID); bool pruneAll = false; if (selfInServer != null) { foreach (var roll in selfInServer.Roles) { if (roll.Permissions.HasPermission(DiscordSpecialPermissions.ManageMessages)) { pruneAll = true; break; } } foreach (var roll in cmdArgs.Channel.PermissionOverrides) { if (roll.id == manager.Client.Me.ID) { if (roll.AllowedPermission(DiscordSpecialPermissions.ManageMessages)) { pruneAll = true; break; } } } } foreach (var msg in messagesToPrune) { if (!pruneAll) { if (msg.Author.ID == manager.Client.Me.ID) { manager.Client.DeleteMessage(msg); Thread.Sleep(100); } } else { manager.Client.DeleteMessage(msg); Thread.Sleep(100); } } cmdArgs.Channel.SendMessage($"Attempted pruning of {messageCount} messages."); } })); manager.AddCommand(new CommandStub("flush", "Flushes various internal DiscordSharp caches.", "Flushes either `offline` or `messages`. \n `offline` as parameter will flush offline users from the current server.\n `messages` will flush the internal message log.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { if (cmdArgs.Args[0].ToLower().Trim() == "offline") { int flushedCount = manager.Client.ClearOfflineUsersFromServer(cmdArgs.Channel.Parent); cmdArgs.Channel.SendMessage($"Flushed {flushedCount} offliners from {cmdArgs.Channel.Parent.Name}."); } else if (cmdArgs.Args[0].ToLower().Trim() == "messages") { int flushedCount = manager.Client.ClearInternalMessageLog(); cmdArgs.Channel.SendMessage($"Flushed {flushedCount} messages from the internal message log."); } } else { cmdArgs.Channel.SendMessage("Flush what? The toilet?"); } }), this); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("uptime", "Check how long the bots been running for.", "No arguments", cmdArgs => { TimeSpan uptime = DateTime.Now - mainEntry.ReadyTime; cmdArgs.Channel.SendMessageAsync($"I've been running for `{uptime.Days} days, {uptime.Hours} hrs, and {uptime.Minutes} mins`~"); }, trigger: CommandTrigger.BotMentioned | CommandTrigger.MessageCreate), this); manager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", cmdArgs => { mainEntry.Dispose(); }, minPerm: PermissionType.Owner), this); manager.AddCommand(new CommandStub("reloadmodules", "Reloads the bot's modules", "No Arguments", cmdArgs => { cmdArgs.Channel.SendMessageAsync($"Okay {cmdArgs.Author.Mention}~. Just give me one second!"); cmdArgs.Channel.TriggerTypingAsync(); int modulesLoaded = mainEntry.ReloadModules(true); Thread.Sleep(2000); cmdArgs.Channel.SendMessageAsync($"I'm back! I reloaded {modulesLoaded} module(s) for you!"); }, PermissionType.Admin, trigger: CommandTrigger.BotMentioned | CommandTrigger.MessageCreate), this); manager.AddCommand(new CommandStub("removemodules", "Forces all modules out of memory (hopefully).", "No arguments", cmdArgs => { cmdArgs.Channel.SendMessageAsync("Working on it...."); cmdArgs.Channel.TriggerTypingAsync(); int modulesLoaded = mainEntry.ReloadModules(false); cmdArgs.Channel.SendMessageAsync("Done~"); }, PermissionType.Owner)); manager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); manager.AddPermission(id, type); e.Channel.SendMessageAsync($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!"); } File.WriteAllText("permissions.json", JsonConvert.SerializeObject(CommandsManager.UserRoles)); }, PermissionType.Owner, 2), this); manager.AddCommand(new CommandStub("disablemodule", "Disables a module by name", "The module name is case insensitive.", cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (!manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessageAsync("Module already disabled!"); return; } try { manager.DisableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessageAsync($"Disabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessageAsync($"Couldn't disable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessageAsync("What module?"); } }, PermissionType.Owner, 1), this); manager.AddCommand(new CommandStub("enablemodule", "Disables a module by name", "The module name is case insensitive.", cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessageAsync("Module already enabled!"); return; } try { manager.EnableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessageAsync($"Enabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessageAsync($"Couldn't enable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessageAsync("What module?"); } }, PermissionType.Owner, 1), this); manager.AddCommand(new CommandStub("modules", "Lists all the modules and whether or not they're enabled.", "", cmdArgs => { string msg = $"**Modules**"; foreach (var kvp in manager.Modules) { msg += $"\n`{kvp.Key.Name}` - {(kvp.Value ? "Enabled" : "Disabled")}"; if (kvp.Key.ModuleKind == ModuleType.External) { msg += " - From DLL"; } } cmdArgs.Channel.SendMessageAsync(msg); }, PermissionType.Owner), this); manager.AddCommand(new CommandStub("commands", "Lists all of the available commands", "", cmdArgs => { string msg = "**Commands**\n```"; foreach (var command in manager.Commands) { msg += command.Value.CommandName + ", "; } msg += "\n```"; cmdArgs.Channel.SendMessageAsync(msg); }), this); manager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", cmdArgs => { if (cmdArgs.Args.Count > 0) { string oldPrefix = mainEntry.config.Prefix; try { string newPrefix = cmdArgs.Args[0]; mainEntry.config.Prefix = newPrefix; mainEntry.config.WriteConfig(); cmdArgs.Channel.SendMessageAsync($"Command prefix changed to **{mainEntry.config.Prefix}** successfully!"); } catch (Exception) { cmdArgs.Channel.SendMessageAsync($"Unable to change prefix to `{cmdArgs.Args[0]}`. Falling back to `{oldPrefix}`."); mainEntry.config.Prefix = oldPrefix; } } else { cmdArgs.Channel.SendMessageAsync("What prefix?"); } }, PermissionType.Owner, 1), this); manager.AddCommand(new CommandStub("cmdinfo", "Displays help for a command.", "Help", e => { if (!String.IsNullOrEmpty(e.Args[0])) { ICommand stub = manager.Commands.FirstOrDefault(x => x.Key == e.Args[0]).Value; if (stub != null) { string msg = "**Help for " + stub.CommandName + "**"; msg += $"\n{stub.Description}"; if (!String.IsNullOrEmpty(stub.HelpTag)) { msg += $"\n\n{stub.HelpTag}"; } if (stub.Parent != null) { msg += $"\nFrom module `{stub.Parent.Name}`"; } if (stub.ID != null) { msg += $"\n`{stub.ID}`"; } e.Channel.SendMessageAsync(msg); } else { e.Channel.SendMessageAsync("What command?"); } } else { e.Channel.SendMessageAsync("What command?"); } }, argCount: 1), this); manager.AddCommand(new CommandStub("os", "Displays OS info for the bot.", "OS information", e => { e.Channel.SendMessageAsync($"I'm currently being hosted on a system running `{OperatingSystemDetermination.GetUnixName()}`~!"); if (OperatingSystemDetermination.IsOnMac()) { Thread.Sleep(1500); e.Channel.SendMessageAsync("My favourite!"); } }), this); manager.AddCommand(new CommandStub("moduleinfo", "Shows information about a specific module.", "", cmdArgs => { if (cmdArgs.Args.Count > 0 && cmdArgs.Args[0].Length > 0) { foreach (var module in manager.Modules.ToList()) { if (module.Key.Name.ToLower().Trim() == cmdArgs.Args[0].ToLower().Trim()) { string msg = $"**About Module {module.Key.Name}**"; msg += $"\n{module.Key.Description}\nEnabled: {module.Value}"; msg += $"\nCommands ({module.Key.Commands.Count} Total): "; foreach (var command in module.Key.Commands) { msg += $"{command.CommandName}, "; } cmdArgs.Channel.SendMessageAsync(msg); break; } } } }, argCount: 1), this); manager.AddCommand(new CommandStub("changepic", "Changes the bot's guild pic test.", "Test", async cmdArgs => { if (cmdArgs.Client == null) { await cmdArgs.Channel.SendMessageAsync("Uh oh, the client argument was null?!?! :("); } Regex linkParser = new Regex(@"\b(?:https?://|www\.)\S+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase); if (cmdArgs.Message.Attachments != null && cmdArgs.Message.Attachments.Count > 0) { foreach (var emb in cmdArgs.Message.Attachments) { if (emb != null) { using (HttpClient htc = new HttpClient()) { Stream imageStream = htc.GetStreamAsync(emb.Url).Result; if (imageStream != null) { try { MemoryStream memStream = new MemoryStream(); imageStream.CopyTo(memStream); await cmdArgs.Client.EditCurrentUserAsync(avatar: memStream); await cmdArgs.Channel.SendMessageAsync("Done!"); } catch (Exception ex) { await cmdArgs.Channel.SendMessageAsync("Nope.\n" + ex.Message); } } } break; } } } else if (cmdArgs.Args.Count > 0) { string rawString = $"{cmdArgs.Args[0]}"; if (linkParser.Matches(rawString).Count > 0) { string url = linkParser.Matches(rawString)[0].ToString(); using (HttpClient htc = new HttpClient()) { Stream imageStream = htc.GetStreamAsync(url).Result; if (imageStream != null) { try { MemoryStream memStream = new MemoryStream(); imageStream.CopyTo(memStream); await cmdArgs.Client.EditCurrentUserAsync(avatar: memStream); await cmdArgs.Channel.SendMessageAsync("Done!"); } catch (Exception ex) { await cmdArgs.Channel.SendMessageAsync("Nope.\n" + ex.Message); } } } } } else { await cmdArgs.Channel.SendMessageAsync("Change to what?"); } }, PermissionType.Owner, 1), this); /* TODO * manager.AddCommand(new CommandStub("prune", * "Prunes the specified amount of messages.", * "If the bot has the role `ManagerMessages`, he will prune other messages in chat.", * PermissionType.Owner, 1, * cmdArgs => * { * int messageCount = 0; * if (int.TryParse(cmdArgs.Args[0], out messageCount)) * { * var messagesToPrune = manager.Client.GetMessageHistory(cmdArgs.Channel, messageCount); * DiscordMember selfInServer = cmdArgs.Channel.Parent.GetMemberByKey(manager.Client.Me.ID); * bool pruneAll = false; * if (selfInServer != null) * { * foreach (var roll in selfInServer.Roles) * { * if (roll.Permissions.HasPermission(DiscordSpecialPermissions.ManageMessages)) * { * pruneAll = true; * break; * } * } * foreach (var roll in cmdArgs.Channel.PermissionOverrides) * { * if (roll.id == manager.Client.Me.ID) * { * if (roll.AllowedPermission(DiscordSpecialPermissions.ManageMessages)) * { * pruneAll = true; * break; * } * } * } * } * foreach (var msg in messagesToPrune) * { * if (!pruneAll) * { * if (msg.Author.ID == manager.Client.Me.ID) * { * manager.Client.DeleteMessage(msg); * Thread.Sleep(100); * } * } * else * { * manager.Client.DeleteMessage(msg); * Thread.Sleep(100); * } * } * cmdArgs.Channel.SendMessage($"Attempted pruning of {messageCount} messages."); * } * })); */ }
public override string ToString() { return(string.IsNullOrWhiteSpace(description) ? PatternToParamString(invocationPattern) : string.Format(@"{0} : {1}{2}", PatternToParamString(invocationPattern), (minimumPermissionLevel != PermissionType.Player) ? $"({ minimumPermissionLevel.ToString() }) " : string.Empty, description)); }
public static string GetName(this PermissionType type) { return(type.ToString()); }
/// <summary> /// Setting up some commands /// </summary> private void SetUpCommands() { CommandsManager.AddCommand(new CommandStub("about", "Tells about bot.", "", PermissionType.User, 1, cmdArgs => { this._client.SendMessageToChannel("Currently being in development this bot will assists moderators and administrators in managing server and channels.\nAuthor: Reverendo\nCourtesy: Big thanks to Luigifan", cmdArgs.Channel); })); CommandsManager.AddCommand(new CommandStub("help", "Provide discriptions to all avaliable commands", "", PermissionType.User, cmdArgs => { string help = String.Format("inComplete set of commands:\n"); foreach (var command in CommandsManager.Commands) { help += String.Format("{0,-15} {1,-100}\n", this._config.CommandPrefix + command.CommandName, "-" + command.Description + " Level: " + command.MinimumPermission); } cmdArgs.Channel.SendMessage(help); })); CommandsManager.AddCommand(new CommandStub("join", "Join a specified server. Ownder only.", "", PermissionType.Owner, 1, cmdArgs => { string substring = cmdArgs.Args[0].Substring(cmdArgs.Args[0].LastIndexOf('/') + 1); this._client.AcceptInvite(substring); Console.WriteLine($"Joined new server."); cmdArgs.Author.SlideIntoDMs("Joined server you requested!"); })); CommandsManager.AddCommand(new CommandStub("wakeup", $"Mentions user multiple times. Example: {this._config.CommandPrefix}wakeup Username n-times", "specify victim", PermissionType.User, 2, cmdArgs => { string substring = cmdArgs.Args[0].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]; var victim = this._client.GetMemberFromChannel(cmdArgs.Channel, cmdArgs.Args[0], false); int times = 0; if (!int.TryParse(cmdArgs.Args[1], out times)) { cmdArgs.Channel.SendMessage("Numbers, not random letters, dummy!"); } for (int i = 0; i < times; i++) { cmdArgs.Channel.SendMessage($"@{victim.Username}, wake up!"); } })); CommandsManager.AddCommand(new CommandStub("deletemsg", $"Delete last n messages. Example: {this._config.CommandPrefix}deletemsg n", "specify amount of messages", PermissionType.Mod, 1, cmdArgs => { int amount = 0; int.TryParse(cmdArgs.Args[0], out amount); this._client.DeleteMultipleMessagesInChannel(cmdArgs.Channel, amount + 1); })); CommandsManager.AddCommand(new CommandStub("ban", $"Bans user for specified amount of days. Example: {this._config.CommandPrefix}ban user days", "", PermissionType.Mod, 2, cmdArgs => { int days = 1; int.TryParse(cmdArgs.Args[1], out days); _client.BanMember(_client.GetMemberFromChannel(cmdArgs.Channel, cmdArgs.Args[0])); })); CommandsManager.AddCommand(new CommandStub("kick", $"Kicks user. Example: {this._config.CommandPrefix}kick user", "", PermissionType.Mod, 1, cmdArgs => { this._client.KickMember(this._client.GetMemberFromChannel(cmdArgs.Channel, cmdArgs.Args[0])); })); CommandsManager.AddCommand(new CommandStub("permission", $"Grants user specified permission: Admin, Mod or User. Example: {this._config.CommandPrefix}permission user level", "", PermissionType.Owner, 2, cmdArgs => { var member = this._client.GetMemberFromChannel(cmdArgs.Channel, cmdArgs.Args[0], false); PermissionType type = PermissionType.User; switch (cmdArgs.Args[1].ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "user": type = PermissionType.User; break; case "none": type = PermissionType.None; break; default: break; } cmdArgs.Channel.SendMessage($"User {member.Username} become {type.ToString()}"); Console.WriteLine($"New {type.ToString()} - {member.Username}({member.ID})"); CommandsManager.AddPermission(member, type); })); CommandsManager.AddCommand(new CommandStub("q", $"Posts random quote. Example: {this._config.CommandPrefix}q", "", PermissionType.None, 1, cmdArgs => { cmdArgs.Channel.SendMessage("\"" + ConfuQuote[CommandsManager.rng.Next(0, ConfuQuote.Length)] + "\"" + " - Конфуций"); })); CommandsManager.AddCommand(new CommandStub("ball", $"If you seek for advice, just ask. Example: {this._config.CommandPrefix}ball", "", PermissionType.None, cmdArgs => { cmdArgs.Channel.SendMessage(Ball8[CommandsManager.rng.Next(0, Ball8.Length)]); })); CommandsManager.AddCommand(new CommandStub("joinvoice", "Join voice channel", "", PermissionType.Owner, 1, cmdArgs => { DiscordChannel channelToJoin = cmdArgs.Channel.Parent.Channels.Find(x => x.Name.ToLower() == cmdArgs.Args[0].ToLower() && x.Type == ChannelType.Voice); if (channelToJoin != null) { DiscordVoiceConfig config = new DiscordVoiceConfig { FrameLengthMs = 60, Channels = 1, OpusMode = DiscordSharp.Voice.OpusApplication.MusicOrMixed, SendOnly = true }; this.CommandsManager.Client.ConnectToVoiceChannel(channelToJoin, config); this.ap = new AudioPlayer(this.CommandsManager.Client, config, channelToJoin); } })); CommandsManager.AddCommand(new CommandStub("disconnect", "Disconnects from voice channel.", "", PermissionType.Owner, 0, cmdArgs => { this._client.DisconnectFromVoice(); })); CommandsManager.AddCommand(new CommandStub("player", "Granting access to audio player. Currently avaliable commands: play", "", PermissionType.User, 1, cmdArgs => { switch (cmdArgs.Args[0]) { case "play": this.ap.Play(); break; case "stop": if (this._client.GetVoiceClient() != null) { this._client.GetVoiceClient().ClearVoiceQueue(); } break; default: break; } })); CommandsManager.AddCommand(new CommandStub("roles", "Shows permission levels for users.", "", PermissionType.Owner, 0, cmdArgs => { string msg = $"Roles for \"{cmdArgs.Channel.Parent.Name}\"\n"; foreach (var role in cmdArgs.Channel.Parent.Roles) { msg += $"{role.Position} - {role.ID} - {role.Permissions.GetRawPermissions()}\n"; } owner.SlideIntoDMs(msg); })); CommandsManager.AddCommand(new CommandStub("shutdown", "Shutdown bot. Owner only.", "", PermissionType.Owner, 0, cmdArgs => { Exit(); })); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { //mainEntry.Exit(); }), this); manager.AddCommand(new CommandStub("stopintegration", "Stops an integrations.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { if (cmdArgs.FromIntegration.ToLower().Trim() == cmdArgs.Args[0].ToLower().Trim()) { manager.Integration.SendMessage("You can't stop the integration you're running me from, silly!", cmdArgs.Channel); return; } mainEntry.StopIntegration(cmdArgs.Args[0]); } else { manager.Integration.SendMessage("Stop what?", cmdArgs.Channel); } })); manager.AddCommand(new CommandStub("startintegration", "Starts an integrations.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { if (cmdArgs.FromIntegration.ToLower().Trim() == cmdArgs.Args[0].ToLower().Trim()) { manager.Integration.SendMessage("what kind of paradox are you trying to create", cmdArgs.Channel); return; } mainEntry.StartIntegration(cmdArgs.Args[0]); } else { manager.Integration.SendMessage("Start what?", cmdArgs.Channel); } })); manager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); manager.AddPermission(id, type); manager.Integration.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!", e.Channel); } }), this); manager.AddCommand(new CommandStub("disablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (!manager.ModuleEnabled(cmdArgs.Args[0])) { manager.Integration.SendMessage("Module already disabled!", cmdArgs.Channel); return; } try { manager.DisableModule(cmdArgs.Args[0]); manager.Integration.SendMessage($"Disabled {cmdArgs.Args[0]}.", cmdArgs.Channel); } catch (Exception ex) { manager.Integration.SendMessage($"Couldn't disable module! {ex.Message}", cmdArgs.Channel); } } else { manager.Integration.SendMessage("What module?", cmdArgs.Channel); } }), this); manager.AddCommand(new CommandStub("enablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (manager.ModuleEnabled(cmdArgs.Args[0])) { manager.Integration.SendMessage("Module already enabled!", cmdArgs.Channel); return; } try { manager.EnableModule(cmdArgs.Args[0]); manager.Integration.SendMessage($"Enabled {cmdArgs.Args[0]}.", cmdArgs.Channel); } catch (Exception ex) { manager.Integration.SendMessage($"Couldn't enable module! {ex.Message}", cmdArgs.Channel); } } else { manager.Integration.SendMessage("What module?", cmdArgs.Channel); } }), this); manager.AddCommand(new CommandStub("modules", "Lists all the modules and whether or not they're enabled.", "", PermissionType.Owner, cmdArgs => { string msg = $"**Modules**"; foreach (var kvp in manager.Modules) { msg += $"\n`{kvp.Key.Name}` - {kvp.Value.ToString()}"; } manager.Integration.SendMessage(msg, cmdArgs.Channel); })); manager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { //if (cmdArgs.Args.Count > 0) //{ // char oldPrefix = mainEntry.config.CommandPrefix; // try // { // char newPrefix = cmdArgs.Args[0][0]; // mainEntry.config.CommandPrefix = newPrefix; // manager.Client.SendMessage($"Command prefix changed to **{mainEntry.config.CommandPrefix}** successfully!"); // } // catch (Exception) // { // manager.Client.SendMessage($"Unable to change prefix to `{cmdArgs.Args[0][0]}`. Falling back to `{oldPrefix}`."); // mainEntry.config.CommandPrefix = oldPrefix; // } //} //else // manager.Client.SendMessage("What prefix?"); })); manager.AddCommand(new CommandStub("flush", "Flushes various internal DiscordSharp caches.", "Flushes either `offline` or `messages`. \n `offline` as parameter will flush offline users from the current server.\n `messages` will flush the internal message log.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.FromIntegration.ToLower().Trim() == "discord") { manager.Integration.SendMessage($"Coming soon!", cmdArgs.Channel); //if (cmdArgs.Args.Count > 0) //{ // if (cmdArgs.Args[0].ToLower().Trim() == "offline") // { // int flushedCount = manager.Client.ClearOfflineUsersFromServer(cmdArgs.Channel.Parent); // cmdArgs.Channel.SendMessage($"Flushed {flushedCount} offliners from {cmdArgs.Channel.Parent.Name}."); // } // else if (cmdArgs.Args[0].ToLower().Trim() == "messages") // { // int flushedCount = manager.Client.ClearInternalMessageLog(); // cmdArgs.Channel.SendMessage($"Flushed {flushedCount} messages from the internal message log."); // } //} //else //{ // cmdArgs.Channel.SendMessage("Flush what? The toilet?"); //} } }), this); manager.AddCommand(new CommandStub("about", "Shows bot information", "", cmdArgs => { string message = manager.Integration.BoldText("About Luigibot"); message += $"\nOwner: Mike Santiago\n"; message += $"Libraries: DiscordSharp {typeof(DiscordSharp.DiscordClient).Assembly.GetName().Version.ToString()}\n"; message += $" SlackAPI w/ WebSocketSharp {typeof(SlackAPI.SlackClient).Assembly.GetName().Version.ToString()}\n"; var uptime = (DateTime.Now - InitializeTime); message += $"Uptime: {uptime.Days} days, {uptime.Hours} hours, {uptime.Minutes} minutes\n"; message += $"Runtime: "; if (Type.GetType("Mono.Runtime") != null) { message += "Mono\n"; } else { message += ".Net\n"; } message += $"OS: {OperatingSystemDetermination.GetUnixName()}\n"; message += $"Current Integration: {manager.Integration.IntegrationName} ({manager.Integration.IntegrationDescription})\n"; message += "Commands: " + manager.Commands.Count + "\n"; manager.Integration.SendMessage(message, cmdArgs.Channel); })); }