Exemple #1
0
        private async static Task EnviarMensagemDiscord(string mensagem, string urlDiscord, string urlCrowdin)
        {
            Console.WriteLine("Cria a conexão com o webhook");
            var client = new DiscordWebhookClient(urlDiscord);

            var message = new DiscordMessage
                          (
                content: "Atualizações quentinhas saindo do forno para vocês <:kazupray:829517786509869057>",
                username: "******",
                avatarUrl: @"https://support.crowdin.com/assets/logos/crowdin-dark-symbol.png",
                tts: false,
                embeds: new []
            {
                new DiscordMessageEmbed
                (
                    "Novas Atualizações",
                    0,
                    null,
                    urlCrowdin,
                    mensagem,
                    null,
                    null,
                    null,
                    null
                )
            }
                          );

            Console.WriteLine($"Envia a mensagem para o Webhook: {mensagem} - {urlDiscord}");
            await client.SendToDiscord(message);

            Console.WriteLine($"mensagem enviada!");
        }
        public async static void SendWebHook(string joinTime, string link)
        {
            // Checks if discord web link exists in settings.json if not then dont send webhook
            if (string.IsNullOrWhiteSpace(discordWebhookLink))
            {
                return;
            }
            try
            {
                var client = new DiscordWebhookClient(discordWebhookLink);

                // Create your DiscordMessage with all parameters of your message.
                var message = new DiscordMessage(
                    DateTime.Now.ToString("MMM dd, yyyy HH:mm:ss tt"),
                    username: "******",
                    avatarUrl: "https://www.publiccounsel.net/train/wp-content/uploads/sites/13/5e8ce318664eae0004085461.png",
                    tts: false,
                    embeds: new[]
                {
                    new DiscordMessageEmbed(
                        "Current Logs",
                        color: 0,
                        author: new DiscordMessageEmbedAuthor("By smashguns#6175"),
                        //url: "https://www.publiccounsel.net/train/wp-content/uploads/sites/13/5e8ce318664eae0004085461.png",
                        //description: "This is a embed description.",
                        fields: new[]
                    {
                        new DiscordMessageEmbedField("Joined Time", MilitaryToAmPm(Convert.ToDateTime(joinTime))),
                        new DiscordMessageEmbedField("Link", link)
                    },

                        footer: new DiscordMessageEmbedFooter("Made by smashguns#6175 • " + DateTime.Now, "https://cdn.discordapp.com/avatars/242889488785866752/40ee66d845e1a6341e03c450fcf6d221.png?size=256")
                        )
                }
                    );
                await client.SendToDiscord(message);
            }
            catch (Exception ex)
            {
                throwErr("Discord Webhook Error!\n" + ex.Message);
            }
        }
Exemple #3
0
        static void Main(string[] args)
        {
            // Create default config file if it doesn't exist
            if (!File.Exists("config.cfg"))
            {
                var c = new Configuration
                {
                    new Section("General")
                    {
                        { "subreddit", "market_subreddit_name" },
                        { "webhook", "https://discordapp.com/api/webhooks/..." }
                    }
                };

                c.SaveToFile("config.cfg");
            }

            // Load configuration
            var config        = Configuration.LoadFromFile("config.cfg");
            var configGeneral = config["General"];

            var webhook   = configGeneral["webhook"].StringValue;
            var subreddit = configGeneral["subreddit"].StringValue;

            // Load webhook handler
            var discord = new DiscordWebhookClient(webhook);

            // Load market entry cache database
            var cacheDb       = new LiteDatabase("cachedposts.db");
            var cachedEntries = cacheDb.GetCollection <MarketEntry>();

            cachedEntries.EnsureIndex(entry => entry.Id, true);

            // Load the most recent subreddit posts
            SubredditNewPosts sub;

            using (var wc = new WebClient())
                sub = JsonConvert.DeserializeObject <SubredditNewPosts>(wc.DownloadString($"https://www.reddit.com/r/{subreddit}/new.json"));

            // Create title-matching regex
            var regex = new Regex("\\[(?<location>.*?)\\]\\s*\\[H\\](?<have>.*)\\[W\\](?<want>.+)", RegexOptions.Compiled);

            // Select "buying" posts which have a correct title format
            var marketEntries =
                sub.Subreddit.SubredditPosts
                .Where(post => post.Post.LinkFlairCssClass == "selling" && regex.IsMatch(post.Post.Title))
                .Select(post => (post, matches: regex.Match(post.Post.Title)))
                .Select(tuple => new MarketEntry(
                            tuple.post.Post.Author,
                            tuple.matches.Groups["have"].Value.Trim(),
                            tuple.matches.Groups["want"].Value.Trim(),
                            tuple.matches.Groups["location"].Value.Trim(),
                            UnixTimeStampToDateTime(tuple.post.Post.Created),
                            tuple.post.Post.Id,
                            tuple.post.Post.Permalink
                            ))
                .Where(entry => !cachedEntries.Exists(marketEntry => marketEntry.Id == entry.Id));

            foreach (var post in marketEntries)
            {
                var message = new DiscordMessage
                {
                    Embeds = new[]
                    {
                        new DiscordMessageEmbed
                        {
                            Color  = 0x5b92fa,
                            Url    = $"https://reddit.com{post.Permalink}",
                            Title  = $"New listing by {post.Author} in {post.Location}",
                            Fields = new[]
                            {
                                new DiscordMessageEmbedField
                                {
                                    Name  = "Have",
                                    Value = post.Have
                                },
                                new DiscordMessageEmbedField
                                {
                                    Name  = "Want",
                                    Value = post.Want
                                }
                            }
                        }
                    }
                };

                discord.SendToDiscord(message);

                cachedEntries.Insert(post);
            }
        }
Exemple #4
0
        public async Task Should_Send_Hello_World_Message()
        {
            var message = new DiscordMessage("Hello World!");

            await _client.SendToDiscord(message);

            Assert.IsTrue(true);
        }
Exemple #5
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            var client = new DiscordWebhookClient(_options.WebhookUrl);

            DiscordMessage message = null;

            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            var formattedMessage = formatter(state, exception);

            if (string.IsNullOrEmpty(formattedMessage))
            {
                return;
            }

            var messageContent    = string.Empty;
            int?messageEmbedColor = null;

            switch (logLevel)
            {
            case LogLevel.None:
            case LogLevel.Trace:
                messageContent = $"**{logLevel}**: {formattedMessage}";
                break;

            case LogLevel.Debug:
                messageContent = $"{DiscordEmoji.SpiderWeb} **{logLevel}**: {formattedMessage}";
                break;

            case LogLevel.Information:
                messageContent    = $"{DiscordEmoji.InformationSource} **{logLevel}**: {formattedMessage}";
                messageEmbedColor = (int)DiscordColor.Blue;
                break;

            case LogLevel.Warning:
                messageContent    = $"{DiscordEmoji.Warning} **{logLevel}**: {formattedMessage}";
                messageEmbedColor = (int)DiscordColor.Yellow;
                break;

            case LogLevel.Critical:
                messageContent    = $"{DiscordEmoji.Radioactive} **{logLevel}**: {formattedMessage}";
                messageEmbedColor = 16711680;
                break;

            case LogLevel.Error:
                messageContent    = $"{DiscordEmoji.Skull} **{logLevel}**: {formattedMessage}";
                messageEmbedColor = (int)DiscordColor.Red;
                break;
            }

            var fields = new List <DiscordMessageEmbedField>();

            if (!string.IsNullOrEmpty(_options.ApplicationName))
            {
                fields.Add(new DiscordMessageEmbedField("Application name", _options.ApplicationName));
            }

            if (!string.IsNullOrEmpty(_options.EnvironmentName))
            {
                fields.Add(new DiscordMessageEmbedField("Environment name", _options.EnvironmentName));
            }

            if (_httpContextAcessor?.HttpContext?.User != null && _options.UserClaimValueToDiscordFields.Count > 0)
            {
                foreach (var item in _options.UserClaimValueToDiscordFields.Where(x => !string.IsNullOrEmpty(x.DiscordFieldName)))
                {
                    var claimValue = _httpContextAcessor?.HttpContext?.User?.Claims?.FirstOrDefault(x => x.Type == item.ClaimType)?.Value;
                    fields.Add(new DiscordMessageEmbedField(item.DiscordFieldName, claimValue));
                }
            }

            var files = new List <DiscordFile>();

            DiscordMessageEmbed embed = null;

            if (exception != null)
            {
                fields.Add(new DiscordMessageEmbedField("Exception type", exception.GetType().ToString()));
                fields.Add(new DiscordMessageEmbedField("Source", exception.Source));

                var exceptionInfoText = new StringBuilder();

                exceptionInfoText.Append("Message: ").AppendLine(exception.Message);
                exceptionInfoText.Append("Exception type: ").AppendLine(exception.GetType().ToString());
                exceptionInfoText.Append("Source: ").AppendLine(exception.Source);
                exceptionInfoText.Append("Base exception: ").AppendLine(exception.GetBaseException()?.Message);

                foreach (DictionaryEntry data in exception.Data)
                {
                    exceptionInfoText.Append(data.Key).Append(": ").Append(data.Value).AppendLine();
                }

                exceptionInfoText.Append("Stack trace: ").AppendLine(exception.StackTrace);

                if (_httpContextAcessor?.HttpContext?.Request != null)
                {
                    var uriBuilder = new UriBuilder
                    {
                        Scheme = _httpContextAcessor.HttpContext.Request.Scheme,
                        Host   = _httpContextAcessor.HttpContext.Request.Host.Host,
                        Path   = _httpContextAcessor.HttpContext.Request.Path.ToString(),
                        Query  = _httpContextAcessor.HttpContext.Request.QueryString.ToString()
                    };

                    if (_httpContextAcessor.HttpContext.Request.Host.Port.HasValue && _httpContextAcessor.HttpContext.Request.Host.Port.Value != 80)
                    {
                        uriBuilder.Port = _httpContextAcessor.HttpContext.Request.Host.Port.Value;
                    }

                    if (!string.IsNullOrEmpty(uriBuilder.Host))
                    {
                        fields.Add(new DiscordMessageEmbedField("URL", uriBuilder.Uri.ToString()));
                    }

                    var requestHeaders = new Dictionary <string, string>();

                    foreach (var item in _httpContextAcessor.HttpContext.Request.Headers?.Where(x => x.Key != "Cookie" && x.Value.Count > 0))
                    {
                        requestHeaders.Add(item.Key, string.Join(",", item.Value.ToArray()));
                    }

                    if (requestHeaders.Count > 0)
                    {
                        exceptionInfoText.AppendLine("Request headers:").AppendLine(JsonConvert.SerializeObject(requestHeaders, Formatting.Indented));
                    }
                }

                files.Add(new DiscordFile("exception-details.txt", Encoding.UTF8.GetBytes(exceptionInfoText.ToString())));

                embed = new DiscordMessageEmbed(color: messageEmbedColor, description: $"**{exception.Message}**", fields: fields.Count > 0 ? fields.ToArray() : null);
            }
            else if (fields.Count > 0)
            {
                embed = new DiscordMessageEmbed(color: messageEmbedColor, fields: fields.ToArray());
            }

            message = new DiscordMessage(messageContent, _options.UserName, embeds: embed != null ? new[] { embed } : null);

            if (files.Count > 0)
            {
                client.SendToDiscord(message, files.ToArray(), true).Wait();
            }
            else
            {
                client.SendToDiscord(message, true).Wait();
            }
        }