Пример #1
0
        public async Task Run([Remainder] string code)
        {
            string url   = null;
            string error = null;

            try
            {
                url = await _service.UploadCode(Context.Message, code);
            }
            catch (WebException ex)
            {
                url   = null;
                error = ex.Message;
            }

            if (url != null)
            {
                var embed = _service.BuildEmbed(Context.User, code, url);

                await ReplyAsync(Context.User.Mention, false, embed);

                await Context.Message.DeleteAsync();
            }
            else
            {
                await ReplyAsync(error);
            }
        }
Пример #2
0
        private async Task <string> UploadLog(IMessage logMessage, IEmote countedEmote, IEnumerable <IUserMessage> messages)
        {
            messages = messages.Where(Message => Message.Reactions.ContainsKey(countedEmote));
            string allEntries = string.Join('\n', messages.Select(d => $"{d.Reactions[countedEmote].ReactionCount} reactions: {d.GetMessageLink()}"));

            return(await _pasteService.UploadCode($"All entries for contest held on {DateTimeOffset.UtcNow}\nResults here: {logMessage.GetMessageLink()}\n\n{allEntries}"));
        }
Пример #3
0
        public static async Task UploadToServiceIfBiggerThan(this EmbedBuilder embed, string content, string contentType, uint size, CodePasteService service)
        {
            if (content.Length > size)
            {
                try
                {
                    var resultLink = await service.UploadCode(content, contentType);

                    embed.AddField(a => a.WithName("More...").WithValue($"[View on Hastebin]({resultLink})"));
                }
                catch (WebException we)
                {
                    embed.AddField(a => a.WithName("More...").WithValue(we.Message));
                }
            }
        }
Пример #4
0
        public void Emit(LogEvent logEvent)
        {
            var formattedMessage = logEvent.RenderMessage(_formatProvider);
            var webhookClient    = new DiscordWebhookClient(_webhookId, _webhookToken);

            var message = new EmbedBuilder()
                          .WithAuthor("DiscordLogger")
                          .WithTitle("Modix")
                          .WithTimestamp(DateTimeOffset.UtcNow)
                          .WithColor(Color.Red)
                          .AddField(new EmbedFieldBuilder()
                                    .WithIsInline(false)
                                    .WithName($"LogLevel: {logEvent.Level}")
                                    .WithValue(Format.Code($"{formattedMessage}\n{logEvent.Exception?.Message}")));

            try
            {
                var eventAsJson = JsonConvert.SerializeObject(logEvent, _jsonSerializerSettings);

                var pasteHandler = new CodePasteService();
                var url          = pasteHandler.UploadCode(eventAsJson, "json").GetAwaiter().GetResult();

                message.AddField(new EmbedFieldBuilder()
                                 .WithIsInline(false)
                                 .WithName("Full Log Event")
                                 .WithValue($"[view on paste.mod.gg]({url})"));
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Unable to upload log event.{ex}");
                message.AddField(new EmbedFieldBuilder()
                                 .WithIsInline(false)
                                 .WithName("Stack Trace")
                                 .WithValue(Format.Code($"{formattedMessage}\n{logEvent.Exception?.ToString().TruncateTo(1000)}")));
                message.AddField(new EmbedFieldBuilder()
                                 .WithIsInline(false)
                                 .WithName("Upload Failure Exception")
                                 .WithValue(Format.Code($"{ex.ToString().TruncateTo(1000)}")));
            }
            webhookClient.SendMessageAsync(string.Empty, embeds: new[] { message.Build() }, username: "******");
        }
Пример #5
0
        private async Task <EmbedBuilder> BuildEmbed(SocketGuildUser guildUser, string code, string result)
        {
            var    failed     = result.Contains("Emit Failed");
            string resultLink = null;
            string error      = null;

            if (result.Length > 990)
            {
                try
                {
                    resultLink = await _pasteService.UploadCode(result);
                }
                catch (WebException we)
                {
                    error = we.Message;
                }
            }

            var embed = new EmbedBuilder()
                        .WithTitle("Decompile Result")
                        .WithDescription(result.Contains("Emit Failed") ? "Failed" : "Successful")
                        .WithColor(failed ? new Color(255, 0, 0) : new Color(0, 255, 0))
                        .WithAuthor(a => a.WithIconUrl(Context.User.GetAvatarUrl()).WithName(guildUser?.Nickname ?? Context.User.Username));

            embed.AddField(a => a.WithName("Code").WithValue(Format.Code(code, "cs")));

            embed.AddField(a => a.WithName($"Result:")
                           .WithValue(Format.Code(result.TruncateTo(990), "asm")));

            if (resultLink != null)
            {
                embed.AddField(a => a.WithName("More...").WithValue($"[View on Hastebin]({resultLink})"));
            }
            else if (error != null)
            {
                embed.AddField(a => a.WithName("More...").WithValue(error));
            }

            return(embed);
        }