Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
		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);
 }
Exemplo n.º 5
0
 private Task SlackConnectorOnMessageReceived(SlackMessage message)
 {
     return(new Task(() => { }));
 }
Exemplo n.º 6
0
        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);
 }
Exemplo n.º 8
0
 private async Task <string> GetUserChannel(SlackMessage message)
 {
     return((await GetUserChatHub(message.User.Id, joinChannel: false) ?? new SlackChatHub()).Id);
 }
Exemplo n.º 9
0
 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);
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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."
                });
            }
        }
Exemplo n.º 13
0
        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[]
Exemplo n.º 14
0
 public bool CanRespond(SlackMessage context)
 {
     return((context.Message.MentionsBot || context.Message.ChatHub.Type == SlackChatHubType.DM) && Regex.IsMatch(context.Message.Text, DEFINE_REGEX));
 }
Exemplo n.º 15
0
 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
        }
Exemplo n.º 17
0
        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));
            }
        }
Exemplo n.º 18
0
        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;
                        }
                    }
                }
            }
        }
Exemplo n.º 19
0
 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));
 }
Exemplo n.º 20
0
 public bool ShouldHandle(SlackMessage message) => message.MentionsBot && message.Text.Contains("transfers");
Exemplo n.º 21
0
            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);
            }
Exemplo n.º 22
0
 public static Task Reply(this SlackMessage _this, string message)
 {
     return(_this.Slack.SendMessage(
                _this.Channel.Name,
                message));
 }
Exemplo n.º 23
0
 private string GetUsername(SlackMessage message)
 {
     return(_connection.UserCache.ContainsKey(message.User.Id) ? _connection.UserCache[message.User.Id].Name : string.Empty);
 }
Exemplo n.º 24
0
 public static Task Update(this SlackMessage _this, string messageToUpdate)
 {
     return(_this.Slack.UpdateMessage(
                _this.Channel.Id, _this.Timestamp,
                messageToUpdate));
 }
Exemplo n.º 25
0
 public void Any(SlackMessage request)
 {
     TestAppHost.AssertCallback(request);
 }
Exemplo n.º 26
0
        private async Task <SlackResponse> PostMessage(SlackMessage message)
        {
            var resp = await _client.InvokeApi <SlackMessage, SlackResponse>("chat.postMessage", message);

            return(resp.ResponseData);
        }
Exemplo n.º 27
0
        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);
        }
Exemplo n.º 28
0
        static void TestPostMessage(SlackMessage message, LogLevel level = LogLevel.Info, ConsoleColor color = ConsoleColor.Black, bool force = false)
        {
            var slackClient = new SlackClient(webhookURL);

            slackClient.Post(message);
        }
Exemplo n.º 29
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="identify"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public SlackPool Emit(string identify, SlackMessage message)
 {
     return(Emit(identify, message, null));
 }
Exemplo n.º 30
0
        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);
        }
Exemplo n.º 31
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        async Task SlackIntegrationOnMessageReceived(SlackMessage message)
        {
            called = true;
        }
Exemplo n.º 32
0
 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)));
 }
Exemplo n.º 33
0
 public IncomingDirectMessage(SlackMessage message)
     : base(message)
 {
     UserName = message.ChatHub.Name;
 }
Exemplo n.º 34
0
 private Task SlackConnectorOnMessageReceived(SlackMessage message)
 {
     Debug.WriteLine(message.Text);
     Console.WriteLine(message.Text);
     return(Task.CompletedTask);
 }