예제 #1
0
        public async Task CreatePasta(EventContext e)
        {
            if (e.Arguments.Count < 2)
            {
                e.ErrorEmbed(e.Locale.GetString("createpasta_error_no_content"))
                .ToEmbed().QueueToChannel(e.Channel);
                return;
            }

            ArgObject arg = e.Arguments.FirstOrDefault();

            string id = arg.Argument;

            arg = arg.Next();
            string text = arg.TakeUntilEnd().Argument;

            if (Regex.IsMatch(text, "(http[s]://)?((discord.gg)|(discordapp.com/invite))/([A-Za-z0-9]+)", RegexOptions.IgnoreCase))
            {
                throw new Exception("You can't add discord invites!");
            }

            using (var context = new MikiContext())
            {
                await GlobalPasta.AddAsync(context, id, text, (long)e.Author.Id);

                await context.SaveChangesAsync();
            }

            e.SuccessEmbed(e.Locale.GetString("miki_module_pasta_create_success", id))
            .QueueToChannel(e.Channel);
        }
예제 #2
0
        public async Task GetPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Guild.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await e.Channel.SendMessage(Utils.ErrorEmbed(locale, "Please enter one of the tags, or commands."));

                return;
            }

            List <string> arguments = e.arguments.Split(' ').ToList();

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                GlobalPasta pasta = await context.Pastas.FindAsync(arguments[0]);

                if (pasta == null)
                {
                    await e.Channel.SendMessage(Utils.ErrorEmbed(locale, $"No pasta found with the name `{e.arguments}`"));

                    return;
                }
                pasta.TimesUsed++;
                await e.Channel.SendMessage(pasta.Text);

                await context.SaveChangesAsync();
            }
        }
예제 #3
0
        public async Task EditPasta(EventContext e)
        {
            if (e.Arguments.Pack.Length < 2)
            {
                await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_error_specify", e.Locale.GetString("miki_module_pasta_error_specify_edit")))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            using (var context = new MikiContext())
            {
                e.Arguments.Take(out string tag);

                GlobalPasta p = await context.Pastas.FindAsync(tag);

                if (p.CreatorId == e.Author.Id.ToDbLong())
                {
                    p.Text = e.Arguments.Pack.TakeAll();
                    await context.SaveChangesAsync();

                    await e.SuccessEmbed($"Edited `{tag}`!")
                    .QueueToChannelAsync(e.Channel);
                }
                else
                {
                    await e.ErrorEmbed($"You cannot edit pastas you did not create. Baka!")
                    .ToEmbed().QueueToChannelAsync(e.Channel);
                }
            }
        }
예제 #4
0
        public async Task CreatePasta(EventContext e)
        {
            if (e.Arguments.Pack.Length < 2)
            {
                await e.ErrorEmbed(e.Locale.GetString("createpasta_error_no_content"))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            e.Arguments.Take(out string id);
            string text = e.Arguments.Pack.TakeAll();

            if (Regex.IsMatch(text, "(http[s]://)?((discord.gg)|(discordapp.com/invite))/([A-Za-z0-9]+)", RegexOptions.IgnoreCase))
            {
                throw new PastaInviteException();
            }

            using (var context = new MikiContext())
            {
                await GlobalPasta.AddAsync(context, id, text, (long)e.Author.Id);

                await context.SaveChangesAsync();
            }

            await e.SuccessEmbed(e.Locale.GetString("miki_module_pasta_create_success", id))
            .QueueToChannelAsync(e.Channel);
        }
예제 #5
0
        public async Task GetPasta(EventContext e)
        {
            if (string.IsNullOrWhiteSpace(e.Arguments.ToString()))
            {
                await e.ErrorEmbed(e.Locale.GetString("pasta_error_no_arg")).ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(e.Arguments.ToString());

                if (pasta == null)
                {
                    await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_search_error_no_results", e.Arguments.ToString()))
                    .ToEmbed().QueueToChannelAsync(e.Channel);

                    return;
                }
                pasta.TimesUsed++;

                var sanitizedText = Utils.EscapeEveryone(pasta.Text);
                e.Channel.QueueMessage(sanitizedText);
                await context.SaveChangesAsync();
            }
        }
예제 #6
0
파일: PastaModule.cs 프로젝트: hlinkad/Miki
        public async Task CreatePasta(EventContext e)
        {
            if (e.Arguments.Count < 2)
            {
                e.ErrorEmbed(e.GetResource("createpasta_error_no_content"))
                .ToEmbed().QueueToChannel(e.Channel);
                return;
            }

            ArgObject arg = e.Arguments.FirstOrDefault();

            string id = arg.Argument;

            arg = arg.Next();
            string text = arg.TakeUntilEnd().Argument;

            using (var context = new MikiContext())
            {
                await GlobalPasta.AddAsync(context, id, text, (long)e.Author.Id);

                await context.SaveChangesAsync();
            }

            Utils.SuccessEmbed(e.Channel.Id, e.GetResource("miki_module_pasta_create_success", id))
            .QueueToChannel(e.Channel);
        }
예제 #7
0
        public async Task GetPasta(CommandContext e)
        {
            string pastaArg = e.Arguments.Pack.TakeAll();

            if (string.IsNullOrWhiteSpace(pastaArg))
            {
                await e.ErrorEmbed(e.Locale.GetString("pasta_error_no_arg")).ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            var context = e.GetService <MikiDbContext>();

            GlobalPasta pasta = await context.Pastas.FindAsync(pastaArg);

            if (pasta == null)
            {
                await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_search_error_no_results", pastaArg))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }
            pasta.TimesUsed++;

            var sanitizedText = Utils.EscapeEveryone(pasta.Text);

            e.Channel.QueueMessage(sanitizedText);
            await context.SaveChangesAsync();
        }
예제 #8
0
파일: PastaModule.cs 프로젝트: mugSans/Miki
        public async Task EditPasta(EventContext e)
        {
            if (e.Arguments.Count < 2)
            {
                e.ErrorEmbed(e.GetResource("miki_module_pasta_error_specify", e.GetResource("miki_module_pasta_error_specify_edit")))
                .Build().QueueToChannel(e.Channel);
                return;
            }

            using (var context = new MikiContext())
            {
                ArgObject arg = e.Arguments.FirstOrDefault();

                string tag = arg.Argument;
                arg = arg.Next();

                GlobalPasta p = await context.Pastas.FindAsync(tag);

                if (p.CreatorId == e.Author.Id.ToDbLong())
                {
                    p.Text = arg.TakeUntilEnd().Argument;
                    await context.SaveChangesAsync();

                    e.Channel.QueueMessageAsync($"Edited `{tag}`!");
                }
                else
                {
                    e.Channel.QueueMessageAsync($@"You cannot edit pastas you did not create. Baka!");
                }
            }
        }
예제 #9
0
        public async Task GetPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, e.GetResource("pasta_error_no_arg")).QueueToChannel(e.Channel);

                return;
            }

            List <string> arguments = e.arguments.Split(' ').ToList();

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(arguments[0]);

                if (pasta == null)
                {
                    await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_search_error_no_results", e.arguments)).QueueToChannel(e.Channel);

                    return;
                }
                pasta.TimesUsed++;
                await e.Channel.QueueMessageAsync(pasta.Text);

                await context.SaveChangesAsync();
            }
        }
예제 #10
0
파일: PastaModule.cs 프로젝트: Drummss/Miki
        public async Task IdentifyPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, e.GetResource("infopasta_error_no_arg"))
                .SendToChannel(e.Channel.Id);

                return;
            }

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                try
                {
                    GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                    if (pasta == null)
                    {
                        await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_null")).SendToChannel(e.Channel);

                        return;
                    }

                    User creator = await context.Users.FindAsync(pasta.creator_id);

                    IDiscordEmbed b = Utils.Embed;

                    b.SetAuthor(pasta.Id.ToUpper(), "", "");
                    b.Color = new IA.SDK.Color(47, 208, 192);

                    if (creator != null)
                    {
                        b.AddInlineField(e.GetResource("miki_module_pasta_identify_created_by"), $"{ creator.Name} [{creator.Id}]");
                    }

                    b.AddInlineField(e.GetResource("miki_module_pasta_identify_date_created"), pasta.date_created.ToShortDateString());

                    b.AddInlineField(e.GetResource("miki_module_pasta_identify_times_used"), pasta.TimesUsed.ToString());

                    VoteCount v = pasta.GetVotes(context);

                    b.AddInlineField(e.GetResource("infopasta_rating"), $"⬆️ { v.Upvotes} ⬇️ {v.Downvotes}");

                    await b.SendToChannel(e.Channel);
                }
                catch (Exception ex)
                {
                    Log.ErrorAt("IdentifyPasta", ex.Message);
                }
            }
        }
예제 #11
0
        public async Task CreatePasta(EventContext e)
        {
            List <string> arguments = e.arguments.Split(' ').ToList();

            Locale locale = Locale.GetEntity(e.Guild.Id.ToDbLong());

            if (arguments.Count < 2)
            {
                await Utils.ErrorEmbed(locale, "I couldn't find any content for this pasta, please specify what you want to make.").SendToChannel(e.Channel.Id);

                return;
            }

            string id = arguments[0];

            arguments.RemoveAt(0);

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                try
                {
                    GlobalPasta pasta = await context.Pastas.FindAsync(id);

                    if (pasta != null)
                    {
                        await e.Channel.SendMessage(Utils.ErrorEmbed(locale, "This pasta already exists! Try a different tag!"));

                        return;
                    }

                    context.Pastas.Add(new GlobalPasta()
                    {
                        Id = id, Text = string.Join(" ", arguments), CreatorId = e.Author.Id, date_created = DateTime.Now
                    });
                    await context.SaveChangesAsync();

                    await e.Channel.SendMessage(Utils.SuccessEmbed(locale, $"Created pasta `{id}`!"));
                }
                catch (Exception ex)
                {
                    Log.ErrorAt("IdentifyPasta", ex.Message);
                }
            }
        }
예제 #12
0
        public async Task IdentifyPasta(EventContext e)
        {
            string pastaArg = e.Arguments.Pack.TakeAll();

            if (string.IsNullOrWhiteSpace(pastaArg))
            {
                await e.ErrorEmbed(e.Locale.GetString("infopasta_error_no_arg"))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(pastaArg);

                if (pasta == null)
                {
                    await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_error_null")).ToEmbed().QueueToChannelAsync(e.Channel);

                    return;
                }

                User creator = await context.Users.FindAsync(pasta.CreatorId);

                EmbedBuilder b = new EmbedBuilder();

                b.SetAuthor(pasta.Id.ToUpper(), "", "");
                b.Color = new Color(47, 208, 192);

                if (creator != null)
                {
                    b.AddInlineField(e.Locale.GetString("miki_module_pasta_identify_created_by"), $"{ creator.Name} [{creator.Id}]");
                }

                b.AddInlineField(e.Locale.GetString("miki_module_pasta_identify_date_created"), pasta.CreatedAt.ToShortDateString());

                b.AddInlineField(e.Locale.GetString("miki_module_pasta_identify_times_used"), pasta.TimesUsed.ToString());

                VoteCount v = await pasta.GetVotesAsync(context);

                b.AddInlineField(e.Locale.GetString("infopasta_rating"), $"⬆️ { v.Upvotes} ⬇️ {v.Downvotes}");

                await b.ToEmbed().QueueToChannelAsync(e.Channel);
            }
        }
예제 #13
0
        public async Task IdentifyPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, e.GetResource("infopasta_error_no_arg"))
                .QueueToChannel(e.Channel.Id);

                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                if (pasta == null)
                {
                    await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_null")).QueueToChannel(e.Channel);

                    return;
                }

                User creator = await context.Users.FindAsync(pasta.CreatorId);

                IDiscordEmbed b = Utils.Embed;

                b.SetAuthor(pasta.Id.ToUpper(), "", "");
                b.Color = new Color(47, 208, 192);

                if (creator != null)
                {
                    b.AddInlineField(e.GetResource("miki_module_pasta_identify_created_by"), $"{ creator.Name} [{creator.Id}]");
                }

                b.AddInlineField(e.GetResource("miki_module_pasta_identify_date_created"), pasta.CreatedAt.ToShortDateString());

                b.AddInlineField(e.GetResource("miki_module_pasta_identify_times_used"), pasta.TimesUsed.ToString());

                VoteCount v = await pasta.GetVotesAsync(context);

                b.AddInlineField(e.GetResource("infopasta_rating"), $"⬆️ { v.Upvotes} ⬇️ {v.Downvotes}");

                await b.QueueToChannel(e.Channel);
            }
        }
예제 #14
0
파일: PastaModule.cs 프로젝트: Drummss/Miki
        public async Task CreatePasta(EventContext e)
        {
            List <string> arguments = e.arguments.Split(' ').ToList();

            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (arguments.Count < 2)
            {
                await Utils.ErrorEmbed(locale, e.GetResource("createpasta_error_no_content")).SendToChannel(e.Channel.Id);

                return;
            }

            string id = arguments[0];

            arguments.RemoveAt(0);

            using (var context = new MikiContext())
            {
                try
                {
                    GlobalPasta pasta = await context.Pastas.FindAsync(id);

                    if (pasta != null)
                    {
                        await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_create_error_already_exist")).SendToChannel(e.Channel);

                        return;
                    }

                    context.Pastas.Add(new GlobalPasta()
                    {
                        Id = id, Text = e.message.RemoveMentions(string.Join(" ", arguments)), creator_id = e.Author.Id.ToDbLong(), date_created = DateTime.Now
                    });
                    await context.SaveChangesAsync();

                    await Utils.SuccessEmbed(locale, e.GetResource("miki_module_pasta_create_success", id)).SendToChannel(e.Channel);
                }
                catch (Exception ex)
                {
                    Log.ErrorAt("IdentifyPasta", ex.Message);
                }
            }
        }
예제 #15
0
        public async Task DeletePasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Guild.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, "Please specify which pasta you'd like to remove.")
                .SendToChannel(e.Channel.Id);

                return;
            }

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                if (pasta == null)
                {
                    await e.Channel.SendMessage(Utils.ErrorEmbed(locale, "This pasta doesn't exist! check the tag!"));

                    return;
                }

                if (pasta.CanDeletePasta(e.Author.Id))
                {
                    context.Pastas.Remove(pasta);

                    List <PastaVote> votes = context.Votes.AsNoTracking().Where(p => p.Id.Equals(e.arguments)).ToList();
                    context.Votes.RemoveRange(votes);

                    await context.SaveChangesAsync();

                    await e.Channel.SendMessage(Utils.SuccessEmbed(locale, $"Deleted pasta `{e.arguments}`!"));

                    return;
                }
                await e.Channel.SendMessage(Utils.ErrorEmbed(locale, "This pasta is not yours!"));

                return;
            }
        }
예제 #16
0
파일: PastaModule.cs 프로젝트: Drummss/Miki
        public async Task DeletePasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_specify", e.GetResource("miki_module_pasta_error_specify")))
                .SendToChannel(e.Channel.Id);

                return;
            }

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                if (pasta == null)
                {
                    await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_null")).SendToChannel(e.Channel);

                    return;
                }

                if (pasta.CanDeletePasta(e.Author.Id))
                {
                    context.Pastas.Remove(pasta);

                    List <PastaVote> votes = context.Votes.AsNoTracking().Where(p => p.Id.Equals(e.arguments)).ToList();
                    context.Votes.RemoveRange(votes);

                    await context.SaveChangesAsync();

                    await Utils.SuccessEmbed(locale, e.GetResource("miki_module_pasta_delete_success", e.arguments)).SendToChannel(e.Channel);

                    return;
                }
                await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_no_permissions", e.GetResource("miki_module_pasta_error_specify_delete"))).SendToChannel(e.Channel);

                return;
            }
        }
예제 #17
0
        public async Task DeletePasta(EventContext e)
        {
            string pastaArg = e.Arguments.Pack.TakeAll();

            if (string.IsNullOrWhiteSpace(pastaArg))
            {
                await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_error_specify", e.Locale.GetString("miki_module_pasta_error_specify")))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(pastaArg);

                if (pasta == null)
                {
                    await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_error_null")).ToEmbed().QueueToChannelAsync(e.Channel);

                    return;
                }

                if (pasta.CreatorId == e.Author.Id.ToDbLong())
                {
                    context.Pastas.Remove(pasta);

                    List <PastaVote> votes = context.Votes.Where(p => p.Id == pastaArg).ToList();
                    context.Votes.RemoveRange(votes);

                    await context.SaveChangesAsync();

                    await e.SuccessEmbed(e.Locale.GetString("miki_module_pasta_delete_success", pastaArg)).QueueToChannelAsync(e.Channel);

                    return;
                }
                await e.ErrorEmbed(e.Locale.GetString("miki_module_pasta_error_no_permissions", e.Locale.GetString("miki_module_pasta_error_specify_delete")))
                .ToEmbed().QueueToChannelAsync(e.Channel);

                return;
            }
        }
예제 #18
0
        public async Task EditPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Guild.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, "Please specify which pasta you'd like to edit.")
                .SendToChannel(e.Channel.Id);

                return;
            }

            if (e.arguments.Split(' ').Length == 1)
            {
                await Utils.ErrorEmbed(locale, "Please specify the content you'd like it to be edited to.")
                .SendToChannel(e.Channel.Id);

                return;
            }

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                string tag = e.arguments.Split(' ')[0];
                e.arguments = e.arguments.Substring(tag.Length + 1);

                GlobalPasta p = await context.Pastas.FindAsync(tag);

                if (p.CreatorId == e.Author.Id || Bot.instance.Events.Developers.Contains(e.Author.Id))
                {
                    p.Text = e.arguments;
                    await context.SaveChangesAsync();

                    await e.Channel.SendMessage($"Edited `{tag}`!");
                }
                else
                {
                    await e.Channel.SendMessage($@"You cannot edit pastas you did not create. Baka!");
                }
            }
        }
예제 #19
0
        public async Task EditPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_specify", e.GetResource("miki_module_pasta_error_specify_edit")))
                .QueueToChannel(e.Channel.Id);

                return;
            }

            if (e.arguments.Split(' ').Length == 1)
            {
                await Utils.ErrorEmbed(locale, e.GetResource("miki_module_pasta_error_specify", e.GetResource("miki_module_pasta_error_specify_edit")))
                .QueueToChannel(e.Channel.Id);

                return;
            }

            using (var context = new MikiContext())
            {
                string tag = e.arguments.Split(' ')[0];
                e.arguments = e.arguments.Substring(tag.Length + 1);

                GlobalPasta p = await context.Pastas.FindAsync(tag);

                if (p.CreatorId == e.Author.Id.ToDbLong() || Bot.instance.Events.Developers.Contains(e.Author.Id))
                {
                    p.Text = e.arguments;
                    await context.SaveChangesAsync();

                    await e.Channel.QueueMessageAsync($"Edited `{tag}`!");
                }
                else
                {
                    await e.Channel.QueueMessageAsync($@"You cannot edit pastas you did not create. Baka!");
                }
            }
        }
예제 #20
0
        public async Task GetPastaAsync(IContext e)
        {
            var locale   = e.GetLocale();
            var pastaArg = e.GetArgumentPack().Pack.TakeAll();

            if (string.IsNullOrWhiteSpace(pastaArg))
            {
                await e.ErrorEmbed(locale.GetString("pasta_error_no_arg"))
                .ToEmbed()
                .QueueAsync(e, e.GetChannel());

                return;
            }

            var pastaService = e.GetService <PastaService>();

            GlobalPasta pasta = await pastaService.GetPastaAsync(pastaArg);

            await pastaService.UseAsync(pasta);

            var embedBuilder = new EmbedBuilder()
                               .SetTitle($"🍝  Pasta - {pasta.Id}")
                               .SetColor(255, 204, 77)
                               .SetFooter($"Requested by {e.GetAuthor().Username}#{e.GetAuthor().Discriminator}");

            var escapedText  = Utils.EscapeEveryone(pasta.Text);
            var deImagedText = Regex.Replace(escapedText, Utils.ImageRegex, x =>
            {
                embedBuilder.SetImage(x.Groups[0].Value);
                return("");
            });

            if (!string.IsNullOrWhiteSpace(deImagedText))
            {
                embedBuilder.SetDescription(deImagedText);
            }

            await embedBuilder.ToEmbed()
            .QueueAsync(e, e.GetChannel());
        }
예제 #21
0
        public static async Task AddAsync(MikiContext context, string id, string text, long creator)
        {
            if (Regex.IsMatch(text, "(http[s]://)?((discord.gg)|(discordapp.com/invite))/([A-Za-z0-9]+)", RegexOptions.IgnoreCase))
            {
                throw new Exception("You can't add discord invites!");
            }

            GlobalPasta pasta = await context.Pastas.FindAsync(id);

            if (pasta != null)
            {
                throw new DuplicatePastaException(pasta);
            }

            await context.Pastas.AddAsync(new GlobalPasta()
            {
                Id        = id,
                Text      = text,
                CreatorId = creator,
                CreatedAt = DateTime.Now
            });
        }
예제 #22
0
파일: PastaModule.cs 프로젝트: mugSans/Miki
        public async Task GetPasta(EventContext e)
        {
            if (string.IsNullOrWhiteSpace(e.Arguments.ToString()))
            {
                e.ErrorEmbed(e.GetResource("pasta_error_no_arg")).Build().QueueToChannel(e.Channel);
                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(e.Arguments.ToString());

                if (pasta == null)
                {
                    e.ErrorEmbed(e.GetResource("miki_module_pasta_search_error_no_results", e.Arguments.ToString()))
                    .Build().QueueToChannel(e.Channel);
                    return;
                }
                pasta.TimesUsed++;
                e.Channel.QueueMessageAsync(pasta.Text);
                await context.SaveChangesAsync();
            }
        }
예제 #23
0
        public async ValueTask <GlobalPasta> CreatePastaAsync(string tag, string body, long createdBy)
        {
            GlobalPasta pasta = await repository.GetAsync(tag);

            if (pasta != null)
            {
                throw new DuplicatePastaException(pasta);
            }

            pasta = new GlobalPasta()
            {
                Id        = tag,
                Text      = body,
                CreatorId = createdBy,
                CreatedAt = DateTime.UtcNow
            };

            await repository.AddAsync(pasta);

            await unit.CommitAsync();

            return(pasta);
        }
예제 #24
0
        public async Task DeletePasta(EventContext e)
        {
            Locale locale = new Locale(e.Channel.Id);

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                e.ErrorEmbed(e.GetResource("miki_module_pasta_error_specify", e.GetResource("miki_module_pasta_error_specify")))
                .QueueToChannel(e.Channel.Id);
                return;
            }

            using (var context = new MikiContext())
            {
                GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                if (pasta == null)
                {
                    e.ErrorEmbed(e.GetResource("miki_module_pasta_error_null")).QueueToChannel(e.Channel);
                    return;
                }

                if (pasta.CanDeletePasta(e.Author.Id))
                {
                    context.Pastas.Remove(pasta);

                    List <PastaVote> votes = context.Votes.Where(p => p.Id == e.arguments).ToList();
                    context.Votes.RemoveRange(votes);

                    await context.SaveChangesAsync();

                    Utils.SuccessEmbed(locale, e.GetResource("miki_module_pasta_delete_success", e.arguments)).QueueToChannel(e.Channel);
                    return;
                }
                e.ErrorEmbed(e.GetResource("miki_module_pasta_error_no_permissions", e.GetResource("miki_module_pasta_error_specify_delete"))).QueueToChannel(e.Channel);
                return;
            }
        }
예제 #25
0
 protected PastaException(GlobalPasta pasta) : base()
 {
     this.Pasta = pasta;
 }
예제 #26
0
        public async Task IdentifyPasta(EventContext e)
        {
            Locale locale = Locale.GetEntity(e.Guild.Id.ToDbLong());

            if (string.IsNullOrWhiteSpace(e.arguments))
            {
                await Utils.ErrorEmbed(locale, "Please state which pasta you'd like to identify.")
                .SendToChannel(e.Channel.Id);

                return;
            }

            using (var context = MikiContext.CreateNoCache())
            {
                context.Set <GlobalPasta>().AsNoTracking();

                try
                {
                    GlobalPasta pasta = await context.Pastas.FindAsync(e.arguments);

                    if (pasta == null)
                    {
                        await e.Channel.SendMessage(Utils.ErrorEmbed(locale, "This pasta doesn't exist!"));

                        return;
                    }

                    User creator = await context.Users.FindAsync(pasta.creator_id);

                    EmbedBuilder b = new EmbedBuilder();
                    b.Author      = new EmbedAuthorBuilder();
                    b.Author.Name = pasta.Id.ToUpper();
                    b.Color       = new Discord.Color(47, 208, 192);

                    if (creator != null)
                    {
                        b.AddField(x =>
                        {
                            x.Name     = "Created by";
                            x.Value    = $"{creator.Name} [{creator.Id}]";
                            x.IsInline = true;
                        });
                    }

                    b.AddField(x =>
                    {
                        x.Name     = "Date Created";
                        x.Value    = pasta.date_created.ToShortDateString();
                        x.IsInline = true;
                    });

                    b.AddInlineField("Times Used", pasta.TimesUsed);

                    b.AddField(x =>
                    {
                        x.Name = "Rating";

                        VoteCount v = pasta.GetVotes(context);

                        x.Value    = $"⬆️ {v.Upvotes} ⬇️ {v.Downvotes}";
                        x.IsInline = true;
                    });

                    await e.Channel.SendMessage(new RuntimeEmbed(b));
                }
                catch (Exception ex)
                {
                    Log.ErrorAt("IdentifyPasta", ex.Message);
                }
            }
        }
예제 #27
0
 public async ValueTask UseAsync(GlobalPasta pasta)
 {
     pasta.TimesUsed++;
     await repository.EditAsync(pasta);
 }
예제 #28
0
 public DuplicatePastaException(GlobalPasta pasta) : base(pasta)
 {
 }
예제 #29
0
 public PastaException(GlobalPasta pasta) : base()
 {
     _pasta = pasta;
 }