Пример #1
0
        private static ServerWebhook _server; // webhook messaging server / сервер рассылки сообщений через вебхуки

        /// <summary>
        /// get access to server
        /// получить доступ к серверу
        /// </summary>
        /// <returns></returns>
        public static ServerWebhook GetServer()
        {
            if (_server == null)
            {
                _server = new ServerWebhook();
            }
            return(_server);
        }
Пример #2
0
        /// <summary>
        /// send
        /// отправить
        /// </summary>
        public void Send()
        {
            byte[] screenshot = null;

            lock (ServerWebhook.GetServer().LokerMessanger)
            {
                for (int i = 0; i < ServerWebhook.GetServer().Webhooks.Length; i++)
                {
                    Send(ServerWebhook.GetServer().Webhooks[i], Message, NameBot, screenshot);
                }
            }
        }
Пример #3
0
        private void buttonAccept_Click(object sender, RoutedEventArgs e) // accept / принять
        {
            ServerWebhook serverWebhook = ServerWebhook.GetServer();

            serverWebhook.SlackBotToken            = TextBoxSlackBotToken.Text;
            serverWebhook.MustSendChartScreenshots = CheckBoxSendScreenshots.IsChecked.Value;

            string[] lockal = TextBoxWebhooks.Text.Split('\r');


            string shit = "";

            for (int i = 0; i < lockal.Length; i++)
            {
                shit += lockal[i];
            }
            lockal = shit.Split('\n');
            string[] lockal2 = null;
            for (int i = 0, ii = 0; i < lockal.Length; i++)
            {
                if (lockal[i] != "")
                {
                    if (lockal2 == null)
                    {
                        lockal2    = new string[1];
                        lockal2[0] = lockal[i];
                        ii++;
                    }
                    else
                    {
                        string[] newLock = new string[lockal2.Length + 1];
                        for (int iii = 0; iii < lockal2.Length; iii++)
                        {
                            newLock[iii] = lockal2[iii];
                        }
                        newLock[ii] = lockal[i];
                        lockal2     = newLock;
                        ii++;
                    }
                }
            }

            serverWebhook.Webhooks = lockal2;
            serverWebhook.Save();

            Close();
        }
Пример #4
0
        /// <summary>
        /// must send screenshot for the message?
        /// должны отправить скриншот для сообщения?
        /// </summary>
        private bool MustSendScreenshotFor(LogMessage message)
        {
            if (!ServerWebhook.GetServer().MustSendChartScreenshots)
            {
                return(false);
            }

            switch (message.Type)
            {
            case LogMessageType.Trade:
            case LogMessageType.Signal:
                return(true);

            default:
                return(false);
            }
        }
Пример #5
0
        // HOWTO
        //
        // 1 Create Slack app
        // 2 Set slack app scopes: https://api.slack.com/apps/<app_id>/oauth
        //   "OAuth & Permissions" - "Scopes" - "Upload and modify files as user"
        //   (it is only necessary for screenshots)
        // 3 Switch on webhooks: https://api.slack.com/apps/<app_id>/incoming-webhooks "Incoming Webhooks" - "On"
        // 4 Add new webhook: https://api.slack.com/apps/<app_id>/incoming-webhooks "Add New Webhook to Workspace"
        //
        // 1 Создайте приложение Slack
        // 2 Установите scopes для приложения: https://api.slack.com/apps/<app_id>/oauth
        //   "OAuth & Permissions" - "Scopes" - "Upload and modify files as user"
        //   (это нужно только для отправки скриншотов)
        // 3 Включите вебхуки: https://api.slack.com/apps/<app_id>/incoming-webhooks "Incoming Webhooks" - "On"
        // 4 Добавьте новый вебхук: https://api.slack.com/apps/<app_id>/incoming-webhooks "Add New Webhook to Workspace"

        /// <summary>
        /// send message to Slack
        /// отправить сообщение в Slack
        /// </summary>
        /// <param name="webhook"> webhook / вебхук </param>
        /// <param name="message"> log message / сообщение из лога </param>
        /// <param name="botName"> bot name / имя бота </param>
        /// <param name="file"> file (chart screenshot) / скриншот чарта </param>
        private void SendSlackMessage(string webhook, LogMessage message, string botName, byte[] file = null)
        {
            SlackMessage payload     = SlackPayload(message, botName);
            string       uploadToken = ServerWebhook.GetServer().SlackBotToken;

            if (!String.IsNullOrEmpty(uploadToken) && file != null)
            { // upload file to Slack / загрузить файл в Slack
                string uploadUrl = "https://slack.com/api/files.upload";

                var uploadRequest = new RestRequest(Method.POST);
                uploadRequest.AddParameter("token", uploadToken);
                uploadRequest.AddFile("file", file, $"chart_{WebUtcTime(message.Time)}.png");
                uploadRequest.AddHeader("Content-Type", "multipart/form-data");
                var uploadResult = new RestClient(uploadUrl).Execute(uploadRequest);

                if (uploadResult.StatusCode == HttpStatusCode.OK)
                { // make file as public (must be public to send it to chat)
                  // сделать файл публичным (должен быть публичным для отправки его в чат)

                    string uploadResultJson = uploadResult.Content;
                    string imageId          = JsonConvert.DeserializeObject <SlackUploadResult>(uploadResultJson).File.Id;
                    string shareImageUrl    = "https://slack.com/api/files.sharedPublicURL";

                    var shareImageRequest = new RestRequest(Method.POST);
                    shareImageRequest.AddParameter("token", uploadToken);
                    shareImageRequest.AddParameter("file", imageId);
                    shareImageRequest.AddHeader("Content-Type", "application/json");
                    var shareImageResult = new RestClient(shareImageUrl).Execute(shareImageRequest);

                    if (shareImageResult.StatusCode == HttpStatusCode.OK)
                    { // will serialize message with link to the file / будем сериализовать сообщение со ссылкой на файл
                        string shareImageResultJson = shareImageResult.Content;
                        string imageUrl             = JsonConvert.DeserializeObject <SlackUploadResult>(shareImageResultJson).File.Permalink_public;
                        payload.Attachments[0].Image_url = imageUrl;
                    }
                }
            }

            PostJson(webhook, SerializedString(payload));
        }
Пример #6
0
        /// <summary>
        /// send
        /// отправить
        /// </summary>
        public void Send()
        {
            byte[] screenshot;

            if (MustSendScreenshotFor(Message))
            {
                Thread.Sleep(5000);
                screenshot = GetChartScreenshotBytes(NameBot, Message.Message);
            }
            else
            {
                screenshot = null;
            };

            lock (ServerWebhook.GetServer().LokerMessanger)
            {
                for (int i = 0; i < ServerWebhook.GetServer().Webhooks.Length; i++)
                {
                    Send(ServerWebhook.GetServer().Webhooks[i], Message, NameBot, screenshot);
                }
            }
        }
Пример #7
0
        public ServerWebhookDeliveryUi()  // constructor / конструктор
        {
            InitializeComponent();

            ServerWebhook serverWebhook = ServerWebhook.GetServer();

            TextBoxSlackBotToken.Text         = serverWebhook.SlackBotToken;
            CheckBoxSendScreenshots.IsChecked = serverWebhook.MustSendChartScreenshots;
            TextBoxWebhooks.Text = "";

            if (serverWebhook.Webhooks != null)
            {
                for (int i = 0; i < serverWebhook.Webhooks.Length; i++)
                {
                    TextBoxWebhooks.Text += serverWebhook.Webhooks[i] + "\r\n";
                }
            }

            Title = OsLocalization.Logging.TitleEmailServer;
            ButtonAccept.Content            = OsLocalization.Logging.Button1;
            Label16.Content                 = OsLocalization.Logging.Label16;
            Label17.Content                 = OsLocalization.Logging.Label17;
            CheckBoxSendScreenshots.Content = OsLocalization.Logging.Label18;
        }
Пример #8
0
 private void ButtonWebhookGlobeSet_Click(object sender, RoutedEventArgs e) // button to configure the webhook server / кнопка настроить сервер рассылки сообщений через вебхуки
 {
     ServerWebhook.GetServer().ShowDialog();
 }
Пример #9
0
        /// <summary>
        /// Send message. If this message type is subscribed and distribution servers are configured, the message will be sent
        /// If test server is enabled, the message will not be sent
        /// Отправить сообщение. Если такой тип сообщений подписан на рассылку и сервера рассылки настроены, сообщение будет отправлено
        /// Если включен тестовый сервер - сообщение не будет отправленно
        /// </summary>
        public void AddNewMessage(LogMessage message)
        {
            if (_startProgram != StartProgram.IsOsTrader)
            {
                return;
            }

            if (WebhookSendOn)
            {
                if (message.Type == LogMessageType.Connect &&
                    WebhookConnectSendOn)
                {
                    ServerWebhook.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Error &&
                    WebhookErrorSendOn)
                {
                    ServerWebhook.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Signal &&
                    WebhookSignalSendOn)
                {
                    ServerWebhook.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.System &&
                    WebhookSystemSendOn)
                {
                    ServerWebhook.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Trade &&
                    WebhookTradeSendOn)
                {
                    ServerWebhook.GetServer().Send(message, _name);
                }
            }

            if (MailSendOn)
            {
                if (message.Type == LogMessageType.Connect &&
                    MailConnectSendOn)
                {
                    ServerMail.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Error &&
                    MailErrorSendOn)
                {
                    ServerMail.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Signal &&
                    MailSignalSendOn)
                {
                    ServerMail.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.System &&
                    MailSystemSendOn)
                {
                    ServerMail.GetServer().Send(message, _name);
                }
                if (message.Type == LogMessageType.Trade &&
                    MailTradeSendOn)
                {
                    ServerMail.GetServer().Send(message, _name);
                }
            }
            if (SmsSendOn)
            {
                if (message.Type == LogMessageType.Connect &&
                    SmsConnectSendOn)
                {
                    ServerSms.GetSmsServer().Send(message.GetString());
                }
                if (message.Type == LogMessageType.Error &&
                    SmsErrorSendOn)
                {
                    ServerSms.GetSmsServer().Send(message.GetString());
                }
                if (message.Type == LogMessageType.Signal &&
                    SmsSignalSendOn)
                {
                    ServerSms.GetSmsServer().Send(message.GetString());
                }
                if (message.Type == LogMessageType.System &&
                    SmsSystemSendOn)
                {
                    ServerSms.GetSmsServer().Send(message.GetString());
                }
                if (message.Type == LogMessageType.Trade &&
                    SmsTradeSendOn)
                {
                    ServerSms.GetSmsServer().Send(message.GetString());
                }
            }
        }