Example #1
0
        static void Main(string[] args)
        {
            try
            {
                var clientId     = "PUT CLIENT ID FROM SLACK APPLICATION REGISTATION HERE";
                var clientSecret = "PUT CLIENT SECRET FROM SLACK APPLICATION REGISTATION HERE";
                var redirectUri  = "PUT REDIRECT FROM SLACK APPLICATION REGISTATION HERE";

                Console.WriteLine("------------------------------------------------------------------");
                Console.WriteLine("This app will open your web browser pointing at an authentication");
                Console.WriteLine("page. When you complete authentication, you'll be sent back to ");
                Console.WriteLine("whatever 'redirectUri' is above, plus some query-string values. ");
                Console.WriteLine("Paste the URI into the console window when prompted.");
                Console.WriteLine();
                Console.WriteLine("In a proper web application, the user experience will obviously");
                Console.WriteLine("be more sensible...");
                Console.WriteLine("------------------------------------------------------------------");

                // start...
                var state = Guid.NewGuid().ToString();
                var uri   = SlackClient.GetAuthorizeUri(clientId, SlackScope.Identify | SlackScope.Read | SlackScope.Post, redirectUri, state, "socialsaleslounge");
                Console.WriteLine("Directing to: " + uri);
                Process.Start(uri.ToString());

                // read the result -- in a web application you can pick this up directly, here we're fudging it...
                Console.WriteLine("Paste in the URL of the authentication result...");
                var asString = Console.ReadLine();
                var index    = asString.IndexOf('?');
                if (index != -1)
                {
                    asString = asString.Substring(index + 1);
                }

                // parse...
                var qs       = HttpUtility.ParseQueryString(asString);
                var code     = qs["code"];
                var newState = qs["state"];

                // validate the state. this isn't required, but it's makes sure the request and response line up...
                if (state != newState)
                {
                    throw new InvalidOperationException("State mismatch.");
                }

                // then get the token...
                Console.WriteLine("Requesting access token...");
                SlackClient.GetAccessToken((response) =>
                {
                    var accessToken = response.access_token;
                    Console.WriteLine("Got access token '{0}'...", accessToken);

                    // post...
                    var client = new SlackClient(accessToken);
                    client.PostMessage(null, "#registrations", "Test", "Jo the Robot");
                }, clientId, clientSecret, redirectUri, code);

                // finished...
                Console.WriteLine("Done.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            try
            {
                //ManualResetEventSlim clientReady = new ManualResetEventSlim(false);
                //SlackSocketClient client2 = new SlackSocketClient("xoxb-146443698115-MntL68DGkXMjU2hyuHEWJ70H");

                //client2.Connect((connected) => {
                //    // This is called once the client has emitted the RTM start command
                //    clientReady.Set();
                //    foreach (var a in connected.channels)
                //    {
                //        Console.WriteLine(a.id + " " + a.name);
                //    }
                //}, () => {
                //    var id = client2.Channels.Where(x => x.name == "general").First();
                //    // This is called once the RTM client has connected to the end point
                //    client2.SendMessage((m)=>
                //    {
                //        Console.WriteLine("sent message" + m.error);
                //    }, id.id, "This should work");
                //});
                //client2.OnMessageReceived += (message) =>
                //{
                //    Console.WriteLine(message);
                //    // Handle each message as you receive them
                //};
                //clientReady.Wait();

                var clientId     = "146556577221.145791896241";
                var clientSecret = "4a9c2119c6705ff83462cbc8fde45333";
                var redirectUri  = "http://www.thisisatest.com/somethinggood/";

                Console.WriteLine("------------------------------------------------------------------");
                Console.WriteLine("This app will open your web browser pointing at an authentication");
                Console.WriteLine("page. When you complete authentication, you'll be sent back to ");
                Console.WriteLine("whatever 'redirectUri' is above, plus some query-string values. ");
                Console.WriteLine("Paste the URI into the console window when prompted.");
                Console.WriteLine();
                Console.WriteLine("In a proper web application, the user experience will obviously");
                Console.WriteLine("be more sensible...");
                Console.WriteLine("------------------------------------------------------------------");

                // start...
                var state = Guid.NewGuid().ToString();
                var uri   = SlackClient.GetAuthorizeUri(clientId, SlackScope.Identify | SlackScope.Read | SlackScope.Post, redirectUri, state, "TestingSlack");
                Console.WriteLine("Directing to: " + uri);
                Process.Start(uri.ToString());

                // read the result -- in a web application you can pick this up directly, here we're fudging it...
                Console.WriteLine("Paste in the URL of the authentication result...");
                var asString = Console.ReadLine();
                var index    = asString.IndexOf('?');
                if (index != -1)
                {
                    asString = asString.Substring(index + 1);
                }

                // parse...
                var qs       = HttpUtility.ParseQueryString(asString);
                var code     = qs["code"];
                var newState = qs["state"];

                // validate the state. this isn't required, but it's makes sure the request and response line up...
                if (state != newState)
                {
                    throw new InvalidOperationException("State mismatch.");
                }

                // then get the token...
                Console.WriteLine("Requesting access token...");
                SlackClient.GetAccessToken((response) =>
                {
                    var accessToken = response.access_token;
                    Console.WriteLine("Got access token '{0}'...", accessToken);

                    // post...
                    //var client = new SlackClient(accessToken);
                    //client.PostMessage(null, "#general", "Test", "Jo the Robot");

                    // Try this other thing:
                }, clientId, clientSecret, redirectUri, code);

                // finished...
                Console.WriteLine("Done.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                Console.ReadLine();
            }
        }