Ejemplo n.º 1
0
        public Task <ResultInfo> SendMessageAsync(CreateHelpRequest message, string appName = null)
        {
            return(RetryUtils.DoAsync(async() =>
            {
                var text = new StringBuilder();
                if (!string.IsNullOrEmpty(appName))
                {
                    text.AppendLine($"*AppName:* {appName}");
                }
                text.AppendLine($"*From:* {message.Email}");
                text.AppendLine($"*Subject:* {message.Subject}");
                text.AppendLine($"*Description:* {message.Description}");

                var slack = new SlackClient(_options.Url);
                var slackMessage = new SlackMessage()
                {
                    Channel = _options.Channel,
                    Text = text.ToString(),
                    Username = _options.Username,
                    IconEmoji = Emoji.Angel
                };
                return await slack.PostAsync(slackMessage) ? new ResultInfo(HttpStatusCode.OK) : new ResultInfo(HttpStatusCode.BadRequest, "Error in post message");
            },
                                      TimeSpan.FromMilliseconds(500),
                                      3,
                                      false,
                                      exception => { LoggerUtils.Log("SlackManager exception", exception, nameof(SlackManager)); }));
        }
        public async Task <ActionResult> FlagUrl([FromQuery] string url)
        {
            var message = $"Please flag url: {url}";

            if (!string.IsNullOrEmpty(url))
            {
                try {
                    var slackClient  = new SlackClient(_chatSettings.SlackWebhookUrl);
                    var slackMessage = new SlackMessage {
                        Channel   = "#userrequests",
                        Text      = $"{message}\n\nFrom: {_applicationUser.GetBestGuessName()}\nFromId: {_applicationUser.Id}\nFromEmail: {_applicationUser.Email}",
                        IconEmoji = Emoji.HearNoEvil,
                        Username  = _applicationUser.Slug
                    };
                    await slackClient.PostAsync(slackMessage);
                } catch (Exception e) {
                    _logger.LogError("Error posting user flag url to slack");
                    _logger.LogError(e.Message);
                }
                var request = new UserRequest()
                {
                    RequestText = message,
                    FromUser    = _applicationUser
                };
                _userRequestRepository.AddOrUpdate(request);
                await _unitOfWork.CompleteAsync();

                return(Ok());
            }
            return(BadRequest());
        }
Ejemplo n.º 3
0
        public async Task SendMessageAsync(Article article)
        {
            if (_isSlackEnabled)
            {
                var slack = new SlackClient(_slackChanelUrl);

                await slack.PostAsync(new SlackMessage()
                {
                    Channel     = _slackChanel,
                    Text        = article.ArticleType.ToString(),
                    Username    = "******",
                    Attachments = new List <SlackAttachment>()
                    {
                        new SlackAttachment()
                        {
                            Title     = article.Title,
                            TitleLink = article.Link,
                            Color     = "warning",
                            Pretext   = article.ShortText
                        }
                    }
                });

                _log.Info("Message to Slack sent for article: " + article.Title);

                article.IsSent = true;
            }
        }
Ejemplo n.º 4
0
 private async Task SendMessage(string url, string msg)
 {
     var client = new SlackClient(url);
     await client.PostAsync(new SlackMessage()
     {
         Username  = "******",
         IconEmoji = ":ghost:",
         Text      = msg
     });
 }
Ejemplo n.º 5
0
 public async Task SendMessage(string message, string icon, string username)
 {
     var slackClient = new SlackClient(_webhookUrl);
     await slackClient.PostAsync(new SlackMessage
     {
         Text      = message,
         IconEmoji = icon,
         Username  = username
     });
 }
 public static async Task <bool> SendToSlackAsync(this System.Exception ex, ExtraInfo extraInfo = null)
 {
     try
     {
         var slackMessage = GetExceptionText(ex, extraInfo);
         return(await SlackClient.PostAsync(slackMessage).ConfigureAwait(false));
     }
     catch (System.Exception e)
     {
         throw e;
     }
 }
Ejemplo n.º 7
0
        public async Task <bool> PostMessageAsync(string message, string iconName)
        {
            var iconEmoji = _config.Icons.FirstOrDefault(x => x.Name == iconName)?.EmojiName;

            var slackMessage = new SlackMessage()
            {
                Channel = _config.Channel, IconEmoji = iconEmoji, Username = _config.Username, Text = message
            };
            var result = await _client.PostAsync(slackMessage);

            return((int)result.StatusCode < 400 && String.IsNullOrEmpty(result.ErrorMessage));
        }
        public async Task SendNotification(string title, string message, Dictionary <string, string> facts = null, string color = null)
        {
            if (!configuration.Enabled)
            {
                return;
            }

            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


            var blocks = new List <Block>();

            blocks.Add(new Section
            {
                Text = new TextObject($"*{title}*")
                {
                    Type = TextObject.TextType.Markdown
                },
                Fields = new List <TextObject>
                {
                    new TextObject {
                        Text = message
                    }
                }
            });

            if (facts != null)
            {
                var factMarkDown = string.Join("\n", facts.Select(t => $"> *{t.Key}* : {t.Value}"));
                blocks.Add(new Section
                {
                    Text = new TextObject(factMarkDown)
                    {
                        Type = TextObject.TextType.Markdown
                    }
                });
            }

            var slackMessage = new SlackMessage
            {
                IconEmoji = Emoji.Ghost,
                Username  = "******",
                Text      = title,
                Blocks    = blocks
            };

            var slackClient = new SlackClient(configuration.Webhook);
            await slackClient.PostAsync(slackMessage);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Post message to Slack
        /// Slackにポストする
        /// </summary>
        /// <param name="webHookUrl"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task <string> PostSlack(string webHookUrl, string message)
        {
            var client       = new SlackClient(webHookUrl);
            var slackMessage = new SlackMessage
            {
                Channel   = "#sigfox_test",
                Text      = message,
                IconEmoji = Emoji.RobotFace,
                Username  = "******"
            };

            await client.PostAsync(slackMessage);

            return("Send message detail: " + message);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Overrides <see cref="PeriodicBatchingSink.EmitBatchAsync"/> and sends the <see cref="LogEvent"/> with a <see cref="SlackClient"/> to Slack.
        /// </summary>
        /// <param name="events">A collection of <see cref="LogEvent"/>.</param>
        /// <returns>An Awaitable Task.</returns>
        protected override async Task EmitBatchAsync(IEnumerable <LogEvent> events)
        {
            // check activation status
            if (_slackSinkActivationSwitch.SlackSinkStatus == SlackSinkActivationSwitch.SlackSinkActivationStatus.InActive)
            {
                return;
            }

            foreach (LogEvent logEvent in events)
            {
                // create new slack message
                var msg = new SlackMessage
                {
                    Attachments     = _generateSlackMessageAttachments(logEvent, _formatProvider, _slackSinkOptions),
                    Blocks          = _generateSlackMessageBlocks(logEvent, _formatProvider, _slackSinkOptions),
                    Channel         = _slackSinkOptions.SlackChannels != null && _slackSinkOptions.SlackChannels.Any() ? _slackSinkOptions.SlackChannels[0] : null,
                    DeleteOriginal  = _slackSinkOptions.SlackDeleteOriginal,
                    IconEmoji       = _slackSinkOptions.SlackEmojiIcon,
                    IconUrl         = _slackSinkOptions.SlackUriIcon,
                    LinkNames       = _slackSinkOptions.SlackLinkNames,
                    Markdown        = _slackSinkOptions.SlackMarkdown,
                    Parse           = _slackSinkOptions.SlackParse,
                    ReplaceOriginal = _slackSinkOptions.SlackReplaceOriginal,
                    ResponseType    = _slackSinkOptions.SlackResponseType,
                    Text            = _generateSlackMessageText(logEvent, _formatProvider, _slackSinkOptions),
                    ThreadId        = _slackSinkOptions.SlackThreadId,
                    Username        = _slackSinkOptions.SlackUsername
                };

                // check for multi channel post
                if (_slackSinkOptions.SlackChannels != null)
                {
                    // multi channel post
                    var logMsgPosts = _slackClient.PostToChannelsAsync(msg, _slackSinkOptions.SlackChannels);

                    foreach (Task <bool> logMsgPost in logMsgPosts)
                    {
                        await logMsgPost;
                    }
                }
                else
                {
                    // single channel post
                    await _slackClient.PostAsync(msg);
                }
            }
        }
Ejemplo n.º 11
0
        public async Task <bool> NotifyUser(ChatViewModel message)
        {
            if (string.IsNullOrEmpty(_chatSettings.SlackWebhookUrl))
            {
                return(false);
            }

            var slackClient  = new SlackClient(_chatSettings.SlackWebhookUrl);
            var slackMessage = new SlackMessage {
                Channel   = _chatSettings.SlackChannel,
                Text      = $"{message.Message}\n\nFrom: {message.FromUserName}\nFromId: {message.FromUserId}",
                IconEmoji = Emoji.HearNoEvil,
                Username  = message.FromUserName
            };

            return(await slackClient.PostAsync(slackMessage));
        }
Ejemplo n.º 12
0
        protected void SendMessageWithWebHooks(string webhookUri, string message)
        {
            SelfLog.WriteLine("Trying to send message to webhook '{0}': '{1}'.", webhookUri, message);

            if (!string.IsNullOrWhiteSpace(message))
            {
                var slackClient = new SlackClient(webhookUri, 25);

                var sendMessageTask = slackClient.PostAsync(message);
                Task.WaitAll(sendMessageTask);

                var sendMessageResult = sendMessageTask.Result;
                if (sendMessageResult != null)
                {
                    SelfLog.WriteLine("Message sent to webhook '{0}': '{1}'.", webhookUri, sendMessageResult.StatusCode);
                }
            }
        }
        public async Task NotifyAsync(string webhookUrl, IEnumerable <string> messages)
        {
            var client      = new SlackClient(webhookUrl);
            var postMessage = new List <string>
            {
                "```"
            };

            postMessage.AddRange(messages);
            postMessage.Add("```");

            var slackMessage = new SlackMessage()
            {
                Text = string.Join("\r\n", postMessage),
            };

            _ = await client.PostAsync(slackMessage);
        }
        public async Task <bool> SendSlackMessageAsync(string message, string channel, string userName, string icon)
        {
            var uri = await new SimpleSystemsManagementService()
                      .GetParameterValueAsync(GetEnvironmentVariableValue("SLACK_URI"));

            var slackClient = new SlackClient(uri);


            if (!Enum.TryParse <Emoji>(icon, out Emoji emoji))
            {
                emoji = Emoji.RobotFace;
            }

            var slackMessage = new SlackMessage
            {
                Channel   = channel,
                Text      = message,
                IconEmoji = emoji,
                Username  = userName
            };

            return(await slackClient.PostAsync(slackMessage));
        }
Ejemplo n.º 15
0
        private static async Task Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("settings.json", false)
                                .AddUserSecrets(Assembly.GetEntryAssembly())
                                .Build();

            var queues            = configuration.GetSection("Queues").Get <List <string> >();
            var messageCounts     = queues.ToDictionary(q => q, _ => (uint)0);
            var connectionFactory = CreateConnectionFactory(configuration);
            var cts = new CancellationTokenSource();

            var runningTask = Task.Run(async() =>
            {
                using var connection = connectionFactory.CreateConnection();
                using var channel    = connection.CreateModel();

                foreach (var q in queues)
                {
                    messageCounts[q] = channel.MessageCount(q);
                }

                while (!cts.IsCancellationRequested)
                {
                    foreach (var queueName in queues)
                    {
                        var count = channel.MessageCount(queueName);

                        Log($"Queue {queueName} contains {count} messages.");

                        messageCounts.TryGetValue(queueName, out var oldCount);

                        if (count > oldCount)
                        {
                            Log($"{queueName} contains {count - oldCount} more message(s) than before.");

                            if (IsSlackConfigured())
                            {
                                await SendWebHookAsync(queueName, oldCount, count);
                            }
                        }

                        messageCounts[queueName] = count;
                    }

                    await Task.Delay(TimeSpan.FromMinutes(1), cts.Token);
                }
            }, cts.Token);

            Log("Monitoring RabbitMQ. Hit return to stop.");
            Console.ReadLine();

            cts.Cancel();
            try
            {
                await runningTask;
            }
            catch (OperationCanceledException)
            {
            }

            async Task SendWebHookAsync(string queueName, uint oldCount, uint newCount)
            {
                var slackClient = new SlackClient(configuration["Slack:WebHookEndPoint"]);
                var channelName = configuration["Slack:ChannelName"];

                Log($"-- Sending message to channel {channelName}..");

                await slackClient.PostAsync(new SlackMessage
                {
                    Channel   = channelName,
                    Text      = $"Queue {queueName} contains {newCount} messages, up from {oldCount}.",
                    IconEmoji = Emoji.Ghost
                });
            }

            bool IsSlackConfigured() => !string.IsNullOrWhiteSpace(configuration["Slack:WebHookEndPoint"]) &&
            !string.IsNullOrWhiteSpace(configuration["Slack:ChannelName"]);
Ejemplo n.º 16
0
        public AquariumMonitor(Store store, IHubContext <DashboardHub> hubContext, IConfiguration configuration)
        {
            this._store           = store;
            this._hubContext      = hubContext;
            this._aquaWebHookUrl  = configuration.GetSection("WebHookUrl").GetSection("AquariumSlack").Get <string>();
            this._errorWebHookUrl = configuration.GetSection("WebHookUrl").GetSection("ErrorSlack").Get <string>();
            var slackClient      = new SlackClient(this._aquaWebHookUrl).AddTo(this._compositeDisposable);
            var errorSlackClient = new SlackClient(this._errorWebHookUrl).AddTo(this._compositeDisposable);

            // 更新値通知
            this._store
            .Aquarium
            .LatestTimeStamp
            .CombineLatest(
                this._store.Aquarium.LatestWaterTemperature,
                this._store.Aquarium.LatestHumidity,
                this._store.Aquarium.LatestTemperature,
                (time, water, humidity, temp) => new { time, water, humidity, temp })
            .Throttle(TimeSpan.FromMilliseconds(10))
            .Subscribe(async x => {
                await this._hubContext.Clients.All.SendAsync(
                    DashboardHub.GetMethodName(DashboardHub.Method.AquaStateChanged),
                    x.time,
                    x.water,
                    x.humidity,
                    x.temp);
            }).AddTo(this._compositeDisposable);

            // 室温警告
            store
            .Aquarium
            .LatestTemperature
            .Where(x => x >= 30 && x >= this._store.Aquarium.LastWarnedTemperature.Value + 0.5)
            .Subscribe(async x => {
                this._store.Aquarium.LastWarnedTemperature.Value = x;
                await slackClient.PostAsync(new SlackMessage {
                    Text = $"室温警告 : {x:##.000}℃", Username = "******"
                });
            }).AddTo(this._compositeDisposable);

            // 室温警告解除
            store
            .Aquarium
            .LatestTemperature
            .Where(_ => this._store.Aquarium.LastWarnedTemperature.Value >= 29)
            .Where(x => x < 29 || x <= this._store.Aquarium.LastWarnedTemperature.Value - 0.5)
            .Subscribe(async x => {
                this._store.Aquarium.LastWarnedTemperature.Value = x;
                if (x < 29)
                {
                    await slackClient.PostAsync(new SlackMessage {
                        Text = $"室温警告解除 : {x:##.000}℃", Username = "******"
                    });
                }
                else
                {
                    await slackClient.PostAsync(new SlackMessage {
                        Text = $"室温が{x:##.000}℃まで下がりました。", Username = "******"
                    });
                }
            }).AddTo(this._compositeDisposable);

            // 水温警告
            store
            .Aquarium
            .LatestWaterTemperature
            .Where(x => x >= 29 && x >= this._store.Aquarium.LastWarnedWaterTemperature.Value + 0.5)
            .Subscribe(async x => {
                this._store.Aquarium.LastWarnedWaterTemperature.Value = x;
                await slackClient.PostAsync(new SlackMessage {
                    Text = $"水温警告 : {x:##.000}℃", Username = "******"
                });
            }).AddTo(this._compositeDisposable);

            // 水温警告解除
            store
            .Aquarium
            .LatestWaterTemperature
            .Where(_ => this._store.Aquarium.LastWarnedWaterTemperature.Value >= 28)
            .Where(x => x < 28 || x <= this._store.Aquarium.LastWarnedWaterTemperature.Value - 0.5)
            .Subscribe(async x => {
                this._store.Aquarium.LastWarnedWaterTemperature.Value = x;
                if (x < 28)
                {
                    await slackClient.PostAsync(new SlackMessage {
                        Text = $"水温警告解除 : {x:##.000}℃", Username = "******"
                    });
                }
                else
                {
                    await slackClient.PostAsync(new SlackMessage {
                        Text = $"水温が{x:##.000}℃まで下がりました。", Username = "******"
                    });
                }
            }).AddTo(this._compositeDisposable);

            store.Aquarium
            .LatestWaterTemperature
            .Throttle(TimeSpan.FromMinutes(10))
            .Subscribe(async _ => {
                await errorSlackClient.PostAsync(new SlackMessage {
                    Text = "10分間水温を受信していません。"
                });
            });
        }