Beispiel #1
0
        /// <summary>
        /// An event handler which is fired when a role has been updated
        /// It manages the CommandList as appropriate if the name has been changed
        /// </summary>
        /// <param name="oldRole"></param>
        /// <param name="newRole"></param>
        /// <returns></returns>
        private void roleUpdated(SocketRole oldRole, SocketRole newRole)
        {
            // If the role updated was in the whitelist and the name was updated, update the commandlist
            if (WhitelistedRoles.Contains(oldRole.Id.ToString()) && oldRole.Name != newRole.Name)
            {
                string oldRoleName = GetRoleNameCommand(oldRole.Name);

                // Remove the old role from the list so we can check if there are other roles with the same name
                WhitelistedRoles.Remove(oldRole.Id.ToString());

                // If none exist with the same name, we can safely remove the command
                if (WhitelistedRoles.All((id) => GetRoleNameCommand(GetRoleByID(id)?.Name) != oldRoleName))
                {
                    server.Commandlist.Remove(oldRoleName);
                }

                // Readding the role because the ID didn't change, and it was just for the check above
                WhitelistedRoles.Add(oldRole.Id.ToString());

                // We might be trying to add the same command twice, because of roles that share the same first word
                // For example: Stable Dweller exists, now trying to add Stable Pony.
                if (!server.Commandlist.ContainsKey(GetRoleNameCommand(newRole.Name)))
                {
                    server.Commandlist.Add(GetRoleNameCommand(newRole.Name), new Command(server, GetRoleNameCommand(newRole.Name), ModifyRolesByCommandName, PrivilegeLevel.Everyone, new HelpMsgStrings("", "")));
                }

                Console.WriteLine("The role " + oldRole.Name + " has been updated to the role " + newRole);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Adds/removes whitelisted roles the users can't get via the !role command
        /// </summary>
        /// <param name="e"></param>
        /// <param name="roleName"></param>
        private void ModifyWhitelistedRole(ServerMessage e, string roleName)
        {
            if (!on)
            {
                return;
            }

            var specifiedRole = server.getServer().Roles.FirstOrDefault((r) => r.Name.ToLower() == roleName.ToLower());

            if (specifiedRole == null)
            {
                server.safeSendMessage(e.Channel, "The role " + roleName + " does not exist!");
            }
            // Add the role to the whitelist
            else if (!WhitelistedRoles.Contains(specifiedRole.Id.ToString()))
            {
                WhitelistedRoles.Add(specifiedRole.Id.ToString());

                // We might be trying to add the same command twice, because of roles that share the same first word
                // For example: Stable Dweller exists, now trying to add Stable Pony.
                if (!server.Commandlist.ContainsKey(GetRoleNameCommand(specifiedRole.Name)))
                {
                    server.Commandlist.Add(GetRoleNameCommand(specifiedRole.Name), new Command(server, GetRoleNameCommand(specifiedRole.Name), ModifyRolesByCommandName, PrivilegeLevel.Everyone, new HelpMsgStrings("", "")));
                }

                server.safeSendMessage(e.Channel, "The role " + specifiedRole.Name + " has been added to the list of whitelisted roles users could get via the !role command, or by writing !<role name>");
            }
            // Remove the role from the whitelist
            else
            {
                WhitelistedRoles.Remove(specifiedRole.Id.ToString());

                string realRoleName = GetRoleNameCommand(specifiedRole.Name);

                // If none exist with the same name, we can safely remove the command
                if (WhitelistedRoles.All((id) => GetRoleNameCommand(GetRoleByID(id)?.Name) != realRoleName))
                {
                    server.Commandlist.Remove(realRoleName);
                }

                server.safeSendMessage(e.Channel, "The role " + specifiedRole.Name + " has been removed from the list of whitelisted roles users could get via the !role command, or by writing !<role_name>");
            }
        }
Beispiel #3
0
        /// <summary>
        /// An event handler which is fired when a role has been deleted
        /// It manages the whitelist and commandlist as appropriate
        /// </summary>
        /// <param name="deletedRole"></param>
        /// <returns></returns>
        private void roleDeleted(SocketRole deletedRole)
        {
            // If the deleted role is from this server and is whitelisted, properly remove it from all lists
            if (WhitelistedRoles.Contains(deletedRole.Id.ToString()))
            {
                string deletedRoleName = GetRoleNameCommand(deletedRole.Name);

                // Remove the old role from the list so we can check if there are other roles with the same name
                //if it was never in, we can stop here
                if (!WhitelistedRoles.Remove(deletedRole.Id.ToString()))
                {
                    return;
                }

                // If none exist with the same name, we can safely remove the command
                if (WhitelistedRoles.All((id) => GetRoleNameCommand(GetRoleByID(id)?.Name) != deletedRoleName))
                {
                    server.Commandlist.Remove(deletedRoleName);
                }

                Console.WriteLine("The role " + deletedRole.Name + " was deleted, updated its whitelist/commandlist standings");
            }
        }