public void Notify(BuildState buildState) { try { using (var client = new HttpClient()) { client.BaseAddress = new Uri(_configuration.SlackWebHookUrl); var message = new SlackMessage { text = buildState.ToString(), channel = GetChannel(buildState.Status), icon_emoji = GetIconEmoji(buildState.Status), username = _configuration.SlackUserName }; HttpContent content = new StringContent(JsonConvert.SerializeObject(message), Encoding.UTF8, "application/json"); var result = client.PostAsync("", content).Result; string resultContent = result.Content.ReadAsStringAsync().Result; Console.WriteLine(resultContent); } } catch (Exception e) { Log.Error("Failed to notify slack", e); } }
public void SlackClient_returns_false_if_post_fails() { //arrange const string webserviceurl = "https://hooks.slack.com/invalid"; var client = new SlackClient(webserviceurl); //act var slackMessage = new SlackMessage { Text = "Test Message", Channel = "#test", Username = "******", IconEmoji = Emoji.Ghost }; var result = client.Post(slackMessage); //assert Assert.False(result); }
public static async void ExecuteScript(string ScriptName, SlackMessage message, LogonEventMessage channelState, WebSocket ws) { // The program will hard crash if the script fails to compile string script; // good way to restrict namespaces would be to include them at the top then include the content after // just gotta work out a way to figure out if a method is using a fully qualified name ScriptOptions options = ScriptOptions.Default.WithReferences(new System.Reflection.Assembly[] { typeof(SlackMessage).Assembly }); if(ScriptExistsForClass(ScriptName)) { // load script from file and execute script = System.IO.File.ReadAllText(_scriptFiles.First(x => x.Name == ScriptName).Source); try { Logging.Log("[SCRIPT] Executing " + ScriptName); //Console.WriteLine("[SCRIPT] Executing "+ScriptName); var s = CSharpScript.Create(code: script, options: options, globalsType: typeof(Host)); ScriptRunner<object> runner = s.CreateDelegate(); Host h = new Host { Message = message, Channel = channelState, ws = ws }; await runner(h); } catch(Exception ex) { // TODO: Make a helper function to do this probably Console.ForegroundColor = ConsoleColor.Red; //Console.WriteLine("Script failed to compile:"); //Console.WriteLine(ex.GetBaseException().Message); Logging.Log("Script failed to compile:"); Logging.Log(ex.GetBaseException().Message); Console.ForegroundColor = ConsoleColor.White; } } else { Console.WriteLine("No script exists for: " + ScriptName); } // syntax tree explorer for usings, won't pick up methods directly accessed via fully qualified names though // so do that first before trying again //var a = CSharpSyntaxTree.ParseText(script); //var r = (CompilationUnitSyntax)a.GetRoot(); //var u = r.DescendantNodes().Where(x => x.GetType().Equals(typeof(UsingDirectiveSyntax))).Select(x => x.GetText()); }
public async Task PostMessageAsync(SlackMessage message, string url = "") { await _client.PostJsonAsync(url, message, new PostSettings { IgnoreNullProperties = true }).ConfigureAwait(false); }
private Task SlackConnectorOnMessageReceived(SlackMessage message) { return(new Task(() => { })); }
public SlackMessage GetSample2() { var slackMessage = new SlackMessage(); slackMessage.Text = "The assistant to the Regional Manager Dwight has an announcement!"; var sectionBlock1 = new SlackSectionBlock(); sectionBlock1.Text = new SlackMarkdownText { Text = "Take a look at this image." }; sectionBlock1.Accessory = new SlackImageBlockElement { Url = new Uri("https://api.slack.com/img/blocks/bkb_template_images/palmtree.png"), AlternateText = "palm tree" }; var sectionBlock2 = new SlackSectionBlock(); sectionBlock2.Text = new SlackMarkdownText { Text = "You can add a button alongside text in your message." }; sectionBlock2.Accessory = new SlackButtonBlockElement() { Text = new SlackPlainText { Emoji = false, Text = "Button" }, Value = "click_me_123" }; var sectionBlock3 = new SlackSectionBlock(); sectionBlock3.Text = new SlackMarkdownText { Text = "Pick one or more items from the list" }; sectionBlock3.Accessory = new SlackMultiSelectMenuStaticBlockElement { Placeholder = "Select items", Options = { new SlackOption { Text = new SlackPlainText{ Text = "Choice 1" }, Value = "value-0" }, new SlackOption { Text = new SlackPlainText{ Text = "Choice 2" }, Value = "value-1" }, new SlackOption { Text = new SlackPlainText{ Text = "Choice 3" }, Value = "value-2" } } }; var sectionBlock4 = new SlackSectionBlock(); sectionBlock4.Text = new SlackMarkdownText { Text = "This block has an overflow menu." }; sectionBlock4.Accessory = new SlackOverflowMenuBlockElement { Options = { new SlackOption { Text = new SlackPlainText{ Text = "Choice 1" }, Value = "value-0" }, new SlackOption { Text = new SlackPlainText{ Text = "Choice 2" }, Value = "value-1" }, new SlackOption { Text = new SlackPlainText{ Text = "Choice 3" }, Value = "value-2" }, new SlackOption { Text = new SlackPlainText{ Text = "Choice 4" }, Value = "value-3" } } }; var sectionBlock5 = new SlackSectionBlock(); sectionBlock5.Text = new SlackMarkdownText { Text = "Pick a date for the deadline." }; sectionBlock5.Accessory = new SlackDatePickerBlockElement { InitialDate = new DateTime(1990, 04, 28), Placeholder = new SlackPlainText { Text = "Select a date" } }; var sectionBlock6 = new SlackSectionBlock(); sectionBlock6.Fields.Add(new SlackPlainText { Text = "*this is plain_text text*" }); sectionBlock6.Fields.Add(new SlackPlainText { Text = "*this is plain_text text*" }); sectionBlock6.Fields.Add(new SlackPlainText { Text = "*this is plain_text text*" }); sectionBlock6.Fields.Add(new SlackPlainText { Text = "*this is plain_text text*" }); slackMessage.Blocks.AddRange(new[] { sectionBlock1, sectionBlock2, sectionBlock3, sectionBlock4, sectionBlock5, sectionBlock6 }); return(slackMessage); }
public void PostMessageToSlack(SlackMessage message) { SlackClient.PostMessage(message); ConnectionManager.GetHubContext <SlackHub>().Clients.All.addMessage(message.UserName, message.Text); SlackMessageStore.SaveMessage(message); }
private async Task <string> GetUserChannel(SlackMessage message) { return((await GetUserChatHub(message.User.Id, joinChannel: false) ?? new SlackChatHub()).Id); }
public static RootObject GetFullMessage(this SlackMessage rawData) { return(JsonConvert.DeserializeObject <RootObject>(rawData.RawData)); }
public static string ToJson(this SlackMessage self) => JsonConvert.SerializeObject(self, SlackMessageConverter.Settings);
public Task SendMessageAsync(string organizationId, string projectId, string url, SlackMessage message) { if (String.IsNullOrEmpty(organizationId)) { throw new ArgumentNullException(nameof(organizationId)); } if (String.IsNullOrEmpty(projectId)) { throw new ArgumentNullException(nameof(projectId)); } if (String.IsNullOrEmpty(url)) { throw new ArgumentNullException(nameof(url)); } if (message == null) { throw new ArgumentNullException(nameof(message)); } var notification = new WebHookNotification { OrganizationId = organizationId, ProjectId = projectId, Url = url, Type = WebHookType.Slack, Data = message }; return(_webHookNotificationQueue.EnqueueAsync(notification)); }
public BotMessage GetResponse(SlackMessage context) { string term = WebUtility.UrlEncode(Regex.Match(context.Message.Text, DEFINE_REGEX).Groups["term"].Value); NoobWebClient client = new NoobWebClient(); string definitionData = client.GetResponse( string.Format( "http://www.dictionaryapi.com/api/v1/references/collegiate/xml/{0}?key={1}", term, ApiKey ), RequestMethod.Get ).GetAwaiter().GetResult(); XElement root = XElement.Parse(definitionData); if (root.Descendants("suggestion").FirstOrDefault() != null) { return(new BotMessage() { Text = "You know what? I don't even know what that is, and neither does my buddy WebsterBot. And he's super smart, y'all. He wanted to know if maybe you meant *" + root.Descendants("suggestion").First().Value + "*?" }); } else if (root.Descendants("ew").FirstOrDefault() == null) { return(new BotMessage() { Text = "Are y'all funnin' with me again? That can't be a real thing, can it?" }); } else { string word = root.Descendants("ew").First().Value; string partOfSpeech = root.Descendants("fl").First().Value; string definition = root.Descendants("dt").First().Value; string etymology = null; string audioFile = null; if (root.Descendants("et").FirstOrDefault() != null) { etymology = root.Descendants("et").First().Value; etymology = Regex.Replace(etymology, "</?it>", "_"); } // compute the sound url thing if (root.Descendants("sound") != null) { audioFile = root.Descendants("wav").First().Value; // do a bunch of dumb stuff to find the audio file URL because this API is wacky // http://www.dictionaryapi.com/info/faq-audio-image.htm#collegiate if (audioFile.StartsWith("bix")) { audioFile = "bix/" + audioFile; } else if (audioFile.StartsWith("gg")) { audioFile = "gg/" + audioFile; } else if (audioFile.StartsWith("number")) { audioFile = "number/" + audioFile; } else { audioFile = audioFile.Substring(0, 1) + "/" + audioFile; } audioFile = "http://media.merriam-webster.com/soundc11/" + audioFile; } string[] defSplits = definition.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); if (defSplits.Length > 1) { StringBuilder defBuilder = new StringBuilder(); foreach (string def in defSplits) { defBuilder.Append("• " + def + "\n"); } definition = defBuilder.ToString(); } else { definition = definition.Replace(":", string.Empty); } return(new BotMessage() { Attachments = new List <SlackAttachment>() { new SlackAttachment() { ColorHex = "#AD91C2", Fallback = "Define " + term, Fields = new List <SlackAttachmentField>() { new SlackAttachmentField() { IsShort = true, Title = "Definition", Value = definition }, new SlackAttachmentField() { IsShort = true, Title = "Part of Speech", Value = partOfSpeech }, new SlackAttachmentField() { IsShort = true, Title = "Etymology", Value = (!string.IsNullOrEmpty(etymology) ? etymology : "It's a made up word. They all are.") }, new SlackAttachmentField() { IsShort = true, Title = "How to Say It", Value = audioFile }, }, Title = "Define: " + term, TitleLink = "http://dictionary.reference.com/browse/" + WebUtility.UrlEncode(term), } }, Text = "Well, I have literally _no_ idea what that means, so I called my friend WebsterBot." }); } }
public static async Task Run( [EventHubTrigger("monitoring", Connection = "EventHubConnectionAppSetting")] EventData[] events, [Slack(Username = "******")] IAsyncCollector <SlackMessage> slackMessages, ILogger log ) { var tenantName = "equisoft"; var exceptions = new List <Exception>(); var eventRecords = new List <KeyvaultEvent>(); var auditRecords = new List <KeyvaultAuditEvent>(); foreach (EventData eventData in events) { try { string messageBody = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count); log.LogInformation($"C# Event Hub trigger function processed a message: {messageBody}"); var obj = JToken.Parse(messageBody); if (obj.Type == JTokenType.Object) { if (((JObject)obj).TryGetValue("records", StringComparison.OrdinalIgnoreCase, out var auditEventRecords)) { log.LogInformation("Found {EventCount} AuditEvent(s)", auditEventRecords.Children().Count()); foreach (var auditEventRecord in auditEventRecords) { var keyvaultAuditEvent = auditEventRecord.ToObject <KeyvaultAuditEvent>(); auditRecords.Add(keyvaultAuditEvent); } } } else if (obj.Type == JTokenType.Array) { log.LogInformation("Found {EventCount} Event(s)", obj.Children().Count()); foreach (var eventRecord in obj) { var keyvaultEvent = eventRecord.ToObject <KeyvaultEvent>(); eventRecords.Add(keyvaultEvent); } } else { log.LogWarning("C# Event Hub trigger function processed a message: {Message} but the type {MessageType} is not handled", messageBody, obj.Type); // Todo add some more logic here } await Task.Yield(); } catch (Exception e) { // We need to keep processing the rest of the batch - capture this exception and continue. // Also, consider capturing details of the message that failed processing so it can be processed again later. exceptions.Add(e); } } // Once processing of the batch is complete, if any messages in the batch failed processing throw an exception so that there is a record of the failure. if (exceptions.Count > 1) { throw new AggregateException(exceptions); } if (exceptions.Count == 1) { throw exceptions.Single(); } if (auditRecords.Count > 0) { foreach (var auditRecord in auditRecords) { if (auditRecord.OperationName == "SecretGet" && auditRecord.ResultType == "Success") { var vaultName = auditRecord.Properties.Id.Host.Replace(".vault.azure.net", string.Empty); var slackMessage = new SlackMessage(); slackMessage.Text = "A new keyvault audit event occured"; var sectionBlockHeader = new SlackSectionBlock(); sectionBlockHeader.Text = new SlackMarkdownText($"You have a new keyvault audit event activity:\n*<https://portal.azure.com/#@{tenantName}.onmicrosoft.com/resource{auditRecord.ResourceId}|{vaultName}>*"); var sectionBlockBody = new SlackSectionBlock(); // you should be careful if the identity is a Service Principal. Using a user as demonstration var upnClaim = auditRecord.Identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"); var objectId = auditRecord.Identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier"); sectionBlockBody.Fields.AddRange(new[]
public bool CanRespond(SlackMessage context) { return((context.Message.MentionsBot || context.Message.ChatHub.Type == SlackChatHubType.DM) && Regex.IsMatch(context.Message.Text, DEFINE_REGEX)); }
public bool CanRespond(SlackMessage context) { return((context.Message.MentionsBot || context.Message.ChatHub.Type == SlackChatHubType.DM) && Regex.IsMatch(context.Message.Text, @"\bweather\b")); }
// Private Methods private static void TestMethod([Slack] SlackMessage message) { // no op }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, TraceWriter log) { log.Info("BitBucket-OnStaleBranchCheck fired."); var daysAfterWhichToConsiderStale = int.Parse(Environment.GetEnvironmentVariable("BitBucket-DaysAfterWhichToConsiderStale", EnvironmentVariableTarget.Process)); var staleDateTimeCutoff = DateTime.Now.AddDays(-1 * daysAfterWhichToConsiderStale); var numberOfBranchesToSuggest = int.Parse(Environment.GetEnvironmentVariable("BitBucket-NumberOfBranchesToSuggest", EnvironmentVariableTarget.Process)); var username = Environment.GetEnvironmentVariable("BitBucket-Username", EnvironmentVariableTarget.Process); var repoSlug = Environment.GetEnvironmentVariable("BitBucket-RepoSlug", EnvironmentVariableTarget.Process); var auth = Environment.GetEnvironmentVariable("BitBucket-Auth", EnvironmentVariableTarget.Process); var authByteArray = Encoding.ASCII.GetBytes(auth); var authBase64String = Convert.ToBase64String(authByteArray); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authBase64String); var repoReport = new RepoReport(repoSlug); var apiUrl = $"https://api.bitbucket.org/2.0/repositories/{username}/{repoSlug}/refs/branches"; do { var response = await httpClient.GetStringAsync(apiUrl); var paginatedBranches = JsonConvert.DeserializeObject <PaginatedBranches>(response); repoReport.TotalBranchesCount = paginatedBranches.Size; repoReport.StaleBranches.AddRange(paginatedBranches.Values.Where(b => b.Target.Date < staleDateTimeCutoff)); apiUrl = paginatedBranches.Next; }while (!string.IsNullOrWhiteSpace(apiUrl)); if (!repoReport.StaleBranches.Any()) { return(new OkObjectResult("Success, no stale branches is any repos checked to report.")); } repoReport.StaleBranches.Sort((a, b) => a.Target.Date.CompareTo(b.Target.Date)); var oldestStaleBranchesMsg = repoReport.StaleBranches .Take(numberOfBranchesToSuggest) .Select(b => $" * <{b.Links.Html.Href}|{b.Name}>, last commit was on {b.Target.Date.ToShortDateString()} by {b.Target.Author.User.Display_Name}"); var slackClient = SlackClientFactory.Create(); var slackMessage = new SlackMessage() { Text = $"I've done some digging, and it looks like there's some cleaning to do...\n" + $"The repo '{repoReport.RepoSlug}' has {repoReport.TotalBranchesCount} branches :dizzy_face:, " + $"{repoReport.StaleBranches.Count} of which haven't seen a commit in the last {daysAfterWhichToConsiderStale} days :zany_face:.\n" + $"Here's the oldest {numberOfBranchesToSuggest} to look at:\n" + string.Join("\n", oldestStaleBranchesMsg) }; var success = await slackClient.PostAsync(slackMessage); if (success) { var successMsg = "Success received from slack webhook. Message sent was: " + slackMessage.Text; log.Info(successMsg); return(new OkObjectResult(successMsg)); } else { log.Info("Error received from slack webhook. Message sent was: " + slackMessage.Text); return(new StatusCodeResult(500)); } }
private async Task Receive() { while (_clientWebSocket.State == WebSocketState.Open) { byte[] buffer = new byte[1024]; WebSocketReceiveResult webSocketReceiveResult = await _clientWebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); if (webSocketReceiveResult.MessageType == WebSocketMessageType.Close) { await _clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); } else { string message = Encoding.UTF8.GetString(buffer).TrimEnd('\0'); string messageType = ""; if (message.Contains("\"type\":\"") == true) { messageType = message.Substring(message.IndexOf("\"type\":\"") + "\"type\":\"".Length); if (messageType.Contains("\"") == true) { messageType = messageType.Substring(0, messageType.IndexOf("\"")); } } if (String.IsNullOrWhiteSpace(messageType) == false) { SlackMessage slackMessage = null; switch (messageType.ToLower()) { case "desktop_notification": slackMessage = Serialiser.FromString <DesktopNotificationSlackMessage>(message); break; case "hello": slackMessage = Serialiser.FromString <HelloSlackMessage>(message); break; case "message": MessageSlackMessage oMessageSlackMessage = Serialiser.FromString <MessageSlackMessage>(message); OnMessageReceived(oMessageSlackMessage); slackMessage = oMessageSlackMessage; break; case "presence_change": slackMessage = Serialiser.FromString <PresenceChangeSlackMessage>(message); break; case "reconnect_url": slackMessage = Serialiser.FromString <ReconnectUrlSlackMessage>(message); break; case "user_typing": slackMessage = Serialiser.FromString <UserTypingSlackMessage>(message); break; default: WriteLineToConsole($"Unhandled message type: {messageType}"); break; } } } } }
public bool CanRespond(SlackMessage context) { return((context.Message.MentionsBot || context.Message.ChatHub.Type == SlackChatHubType.DM) && Regex.IsMatch(context.Message.Text, @"\b(what's new)\b", RegexOptions.IgnoreCase)); }
public bool ShouldHandle(SlackMessage message) => message.MentionsBot && message.Text.Contains("transfers");
public void Setup() { messageString = Helpers.Random; sut = new SlackClient(Helpers.RandomUri.OriginalString); _JsonPathAndValues = new Dictionary <string, string> { { "attachments[0].fallback", Helpers.Random } , { "attachments[0].color", Color.Gold.ToHex() } , { "attachments[0].pretext", Helpers.Random } , { "attachments[0].text", messageString } , { "attachments[0].author_name", Helpers.Random } , { "attachments[0].author_icon", Helpers.RandomUri.OriginalString } , { "attachments[0].author_link", Helpers.RandomUri.OriginalString } , { "attachments[0].title", Helpers.Random } , { "attachments[0].title_link", Helpers.RandomUri.OriginalString } , { "attachments[0].fields[0].title", Helpers.Random } , { "attachments[0].fields[0].value", Helpers.Random } , { "attachments[0].fields[0].short", "True" } , { "attachments[0].image_url", Helpers.RandomUri.OriginalString } , { "attachments[0].thumb_url", Helpers.RandomUri.OriginalString } , { "username", Helpers.Random } , { "text", messageString } }; _fallback = _JsonPathAndValues["attachments[0].fallback"]; _pretext = _JsonPathAndValues["attachments[0].pretext"]; _color = _JsonPathAndValues["attachments[0].color"].ToColor(); _authorIcon = new Uri(_JsonPathAndValues["attachments[0].author_icon"]); _authorName = _JsonPathAndValues["attachments[0].author_name"]; _authorLink = new Uri(_JsonPathAndValues["attachments[0].author_link"]);; _titleName = _JsonPathAndValues["attachments[0].title"]; _titleLink = new Uri(_JsonPathAndValues["attachments[0].title_link"]); _text = _JsonPathAndValues["attachments[0].text"]; _fieldTitle = _JsonPathAndValues["attachments[0].fields[0].title"]; _fieldValue = _JsonPathAndValues["attachments[0].fields[0].value"]; _fieldShort = bool.Parse(_JsonPathAndValues["attachments[0].fields[0].short"]); _thumbUrl = new Uri(_JsonPathAndValues["attachments[0].thumb_url"]); _imageUrl = new Uri(_JsonPathAndValues["attachments[0].image_url"]); _username = _JsonPathAndValues["username"]; _attachment = new SlackAttachment { Fallback = _fallback , Author = new SlackAuthor { Icon = _authorIcon, Link = _authorLink, Name = _authorName } , Color = _color , Pretext = _pretext , Title = new LinkedElement { Link = _titleLink, Name = _titleName } , Text = _text , ImageUri = _imageUrl , ThumbUri = _thumbUrl }; _attachment.AddField(_fieldTitle, _fieldValue, _fieldShort); _message = new SlackMessage { }; _message.WithMessageText(_text); _message.Attach(_attachment); _message.AsUser(_username); _json = sut.GetJson(_message); }
public static Task Reply(this SlackMessage _this, string message) { return(_this.Slack.SendMessage( _this.Channel.Name, message)); }
private string GetUsername(SlackMessage message) { return(_connection.UserCache.ContainsKey(message.User.Id) ? _connection.UserCache[message.User.Id].Name : string.Empty); }
public static Task Update(this SlackMessage _this, string messageToUpdate) { return(_this.Slack.UpdateMessage( _this.Channel.Id, _this.Timestamp, messageToUpdate)); }
public void Any(SlackMessage request) { TestAppHost.AssertCallback(request); }
private async Task <SlackResponse> PostMessage(SlackMessage message) { var resp = await _client.InvokeApi <SlackMessage, SlackResponse>("chat.postMessage", message); return(resp.ResponseData); }
public SlackMessage GetSample1() { var slackMessage = new SlackMessage(); slackMessage.Text = "The assistant to the Regional Manager Dwight has an announcement!"; var sectionBlock1 = new SlackSectionBlock(); // can also use new SlackMarkdownText() {Text = "..."}; SlackMarkdownText text1 = "Hello, Assistant to the Regional Manager Dwight! *Michael Scott* wants to know where you'd like to take the Paper Company investors to dinner tonight.\n\n *Please select a restaurant:*"; sectionBlock1.Text = text1; slackMessage.Blocks.Add(sectionBlock1); var divider = new SlackDividerBlock(); divider.BlockId = null; // to enable reuse slackMessage.Blocks.Add(divider); var sectionBlock2 = new SlackSectionBlock(); SlackMarkdownText text2 = "*Farmhouse Thai Cuisine*\n:star::star::star::star: 1528 reviews\n They do have some vegan options, like the roti and curry, plus they have a ton of salad stuff and noodles can be ordered without meat!! They have something for everyone here"; sectionBlock2.Text = text2; sectionBlock2.Accessory = new SlackImageBlockElement { Url = new Uri("https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg"), AlternateText = "alt text for image" }; slackMessage.Blocks.Add(sectionBlock2); var sectionBlock3 = new SlackSectionBlock(); SlackMarkdownText text3 = "*Kin Khao*\n:star::star::star::star: 1638 reviews\n The sticky rice also goes wonderfully with the caramelized pork belly, which is absolutely melt-in-your-mouth and so soft."; sectionBlock3.Text = text3; sectionBlock3.Accessory = new SlackImageBlockElement { Url = new Uri("https://s3-media2.fl.yelpcdn.com/bphoto/korel-1YjNtFtJlMTaC26A/o.jpg"), AlternateText = "alt text for image" }; slackMessage.Blocks.Add(sectionBlock3); var sectionBlock4 = new SlackSectionBlock(); SlackMarkdownText text4 = "*Ler Ros*\n:star::star::star::star: 2082 reviews\n I would really recommend the Yum Koh Moo Yang - Spicy lime dressing and roasted quick marinated pork shoulder, basil leaves, chili & rice powder."; sectionBlock4.Text = text4; sectionBlock4.Accessory = new SlackImageBlockElement { Url = new Uri("https://s3-media2.fl.yelpcdn.com/bphoto/DawwNigKJ2ckPeDeDM7jAg/o.jpg"), AlternateText = "alt text for image" }; slackMessage.Blocks.Add(sectionBlock4); slackMessage.Blocks.Add(divider); var actionBlock = new SlackActionBlock(); var buttonElement1 = new SlackButtonBlockElement(); SlackPlainText text5 = "Farmhouse"; text5.Emoji = true; buttonElement1.Text = text5; buttonElement1.Value = "click_me_123"; actionBlock.Elements.Add(buttonElement1); var buttonElement2 = new SlackButtonBlockElement(); SlackPlainText text6 = "Kin Khao"; text5.Emoji = true; buttonElement2.Text = text6; buttonElement2.Value = "click_me_123"; actionBlock.Elements.Add(buttonElement2); var buttonElement3 = new SlackButtonBlockElement(); SlackPlainText text7 = "Ler Ros"; text5.Emoji = true; buttonElement3.Text = text7; buttonElement3.Value = "click_me_123"; actionBlock.Elements.Add(buttonElement3); slackMessage.Blocks.Add(actionBlock); return(slackMessage); }
static void TestPostMessage(SlackMessage message, LogLevel level = LogLevel.Info, ConsoleColor color = ConsoleColor.Black, bool force = false) { var slackClient = new SlackClient(webhookURL); slackClient.Post(message); }
/// <summary> /// /// </summary> /// <param name="identify"></param> /// <param name="message"></param> /// <returns></returns> public SlackPool Emit(string identify, SlackMessage message) { return(Emit(identify, message, null)); }
static void TestPostMessage(string message, LogLevel level = LogLevel.Info, ConsoleColor color = ConsoleColor.Black, bool force = false) { //var context = parseLogContext(level); var slackMessage = new SlackMessage { Channel = channel, Text = message, IconEmoji = ":nerd_face:", Username = botName + "Info" }; SlackAttachment slackAttachment; switch (level) { case LogLevel.Error: slackMessage.Text = "uh oh! I'm in trouble!"; slackMessage.IconEmoji = Emoji.Scream; slackMessage.Username = botName + "Error"; slackAttachment = new SlackAttachment { Text = message, Color = "#C0392B" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Warning: slackMessage.Text = "this is a warning..."; slackMessage.IconEmoji = ":thinking_face:"; slackMessage.Username = botName + "Warning"; slackAttachment = new SlackAttachment { Text = message, Color = "#F4D03F" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Info: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.DarkCyan : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Info}) {message}"); break; case LogLevel.Pokestop: slackMessage.Text = "made it to another pokestop!"; slackMessage.IconEmoji = Emoji.Blush; slackMessage.Username = botName + "LootingStop"; slackAttachment = new SlackAttachment { Text = message, Color = "#3498DB" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Farming: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.Magenta : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Farming}) {message}"); break; case LogLevel.Sniper: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.White : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Sniper}) {message}"); break; case LogLevel.Recycling: slackMessage.Text = ""; slackMessage.IconEmoji = ":recycle:"; slackMessage.Username = botName + "Recycling"; slackAttachment = new SlackAttachment { Text = message, Color = "#8E44AD" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Caught: slackMessage.Text = "I caught the guy!"; slackMessage.IconEmoji = Emoji.Laughing; slackMessage.Username = botName + "Caught"; slackAttachment = new SlackAttachment { Text = message, Color = "#2ECC71" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Flee: slackMessage.Text = "he's getting away from me!"; slackMessage.IconEmoji = ":anguished:"; slackMessage.Username = botName + "Struggling"; slackAttachment = new SlackAttachment { Text = message, Color = "#F4D03F" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Transfer: slackMessage.Text = @"I'm /'transfering/' pokemon. Not putting them in a blender"; slackMessage.IconEmoji = Emoji.Smirk; slackMessage.Username = botName + "Transfering"; slackAttachment = new SlackAttachment { Text = message, Color = "#186A3B" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Evolve: slackMessage.Text = @"Oh shit dat evolve"; slackMessage.IconEmoji = Emoji.Frog; slackMessage.Username = botName + "Evolving"; slackAttachment = new SlackAttachment { Text = message, Color = "#186A3B" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Berry: slackMessage.Text = "Deploying tasty berries"; slackMessage.IconEmoji = Emoji.Cherries; slackMessage.Username = botName + "Berries"; slackAttachment = new SlackAttachment { Text = message, Color = "#F4D03F" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Egg: slackMessage.Text = "I <3 eggs"; slackMessage.IconEmoji = Emoji.KissingSmilingEyes; slackMessage.Username = botName + "EggKeeping"; slackAttachment = new SlackAttachment { Text = message, Color = "#F4D03F" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.Debug: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.Gray : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Debug}) {message}"); break; case LogLevel.Update: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.White : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Update}) {message}"); break; case LogLevel.New: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.Green : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.New}) {message}"); break; case LogLevel.SoftBan: slackMessage.Text = "SOFT BAN DETECTED"; slackMessage.IconEmoji = Emoji.Confounded; slackMessage.Username = botName + "SoftBanned"; slackAttachment = new SlackAttachment { Text = message, Color = "#C0392B" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; case LogLevel.LevelUp: slackMessage.Text = "The XP must flow"; slackMessage.IconEmoji = Emoji.Star; slackMessage.Username = botName + "LeveledUp"; slackAttachment = new SlackAttachment { Text = message, Color = "#186A3B" }; slackMessage.Attachments = new List <SlackAttachment> { slackAttachment }; break; default: //Console.ForegroundColor = color == ConsoleColor.Black ? ConsoleColor.White : color; //Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] ({LoggingStrings.Error}) {message}"); break; } var slackClient = new SlackClient(webhookURL); slackClient.Post(slackMessage); }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously async Task SlackIntegrationOnMessageReceived(SlackMessage message) { called = true; }
public bool CanRespond(SlackMessage context) { return((context.Message.ChatHub.Type == SlackChatHubType.DM || context.Message.MentionsBot) && (Regex.IsMatch(context.Message.Text, WIKI_MULTIWORD_REGEX) || Regex.IsMatch(context.Message.Text, WIKI_SINGLEWORD_REGEX))); }
public IncomingDirectMessage(SlackMessage message) : base(message) { UserName = message.ChatHub.Name; }
private Task SlackConnectorOnMessageReceived(SlackMessage message) { Debug.WriteLine(message.Text); Console.WriteLine(message.Text); return(Task.CompletedTask); }