コード例 #1
0
ファイル: DonatorModule.cs プロジェクト: ShanuMaurya/Miki
        public async Task ChangeTitleAsync(EventContext e)
        {
            using (var context = new MikiContext())
            {
                IsDonator donator = await context.IsDonator.FindAsync((long)e.Author.Id);

                User user = await context.Users.FindAsync((long)e.Author.Id);

                donator.AddBalance(-10);
                user.Title = e.Arguments.ToString();

                await context.SaveChangesAsync();
            }
        }
コード例 #2
0
        public async Task RedeemKeyAsync(EventContext e)
        {
            using (var context = new MikiContext())
            {
                long       id  = (long)e.Author.Id;
                DonatorKey key = await context.DonatorKey.FindAsync(Guid.Parse(e.arguments));

                IsDonator donatorStatus = await context.IsDonator.FindAsync(id);

                if (key != null)
                {
                    if (donatorStatus == null)
                    {
                        donatorStatus = (await context.IsDonator.AddAsync(new IsDonator()
                        {
                            UserId = id
                        })).Entity;
                    }

                    if (donatorStatus.ValidUntil > DateTime.Now)
                    {
                        donatorStatus.ValidUntil += key.StatusTime;
                    }
                    else
                    {
                        donatorStatus.ValidUntil = DateTime.Now + key.StatusTime;
                    }
                    Utils.Embed.SetTitle($"🎉 Congratulations, {e.Author.Username}")
                    .SetColor(226, 46, 68)
                    .SetDescription($"You have successfully redeemed a donator key, I've given you **{key.StatusTime.TotalDays}** days of donator status.")
                    .AddInlineField("When does my status expire?", donatorStatus.ValidUntil.ToLongDateString())
                    .SetThumbnailUrl("https://i.imgur.com/OwwA5fV.png")
                    .QueueToChannel(e.Channel);

                    context.DonatorKey.Remove(key);
                    await context.SaveChangesAsync();
                }
                else
                {
                    await e.Channel.SendMessageAsync("invalid key");
                }
            }
        }
コード例 #3
0
ファイル: DonatorModule.cs プロジェクト: zink-debug/bot
        public async Task RedeemKeyAsync(IContext e)
        {
            if (e.HasFeatureEnabled("redeemkey_using_payment_service"))
            {
                await RedeemKeyV2Async(e);

                return;
            }

            var unit = e.GetService <IUnitOfWork>();

            var donatorRepository = unit.GetRepository <IsDonator>();
            var keyRepository     = unit.GetRepository <DonatorKey>();
            var locale            = e.GetLocale();

            long id = (long)e.GetAuthor().Id;

            if (!e.GetArgumentPack().Take(out Guid guid))
            {
                throw new InvalidKeyFormatException();
            }

            DonatorKey key = await DonatorKey.GetKeyAsync(keyRepository, guid);

            IsDonator donatorStatus = await donatorRepository.GetAsync(id);

            if (donatorStatus == null)
            {
                donatorStatus = new IsDonator
                {
                    UserId       = id,
                    KeysRedeemed = 1,
                    ValidUntil   = DateTime.UtcNow + key.StatusTime
                };
                await donatorRepository.AddAsync(donatorStatus);
            }
            else
            {
                donatorStatus.KeysRedeemed++;

                if (donatorStatus.ValidUntil > DateTime.Now)
                {
                    donatorStatus.ValidUntil += key.StatusTime;
                }
                else
                {
                    donatorStatus.ValidUntil = DateTime.Now + key.StatusTime;
                }
                await donatorRepository.EditAsync(donatorStatus);
            }
            await keyRepository.DeleteAsync(key);

            await unit.CommitAsync();

            await new EmbedBuilder
            {
                Title        = $"🎉 {locale.GetString("common_success", e.GetAuthor().Username)}",
                Color        = new Color(226, 46, 68),
                Description  = locale.GetString("key_redeem_success", $"**{key.StatusTime.TotalDays}**"),
                ThumbnailUrl = "https://i.imgur.com/OwwA5fV.png"
            }.AddInlineField("When does my status expire?", donatorStatus.ValidUntil.ToLongDateString())
            .ToEmbed().QueueAsync(e, e.GetChannel());

            var achievementManager = e.GetService <AchievementService>();
            var donatorAchievement = achievementManager.GetAchievement(AchievementIds.DonatorId);

            if (donatorStatus.KeysRedeemed >= 1 &&
                donatorStatus.KeysRedeemed < 5)
            {
                await achievementManager.UnlockAsync(donatorAchievement, e.GetAuthor().Id);
            }
            else if (donatorStatus.KeysRedeemed >= 5 &&
                     donatorStatus.KeysRedeemed < 25)
            {
                await achievementManager.UnlockAsync(donatorAchievement, e.GetAuthor().Id, 1)
                .ConfigureAwait(false);
            }
            else if (donatorStatus.KeysRedeemed >= 25)
            {
                await achievementManager.UnlockAsync(donatorAchievement, e.GetAuthor().Id, 2);
            }
        }
コード例 #4
0
ファイル: DonatorModule.cs プロジェクト: Auxiliatrix/Miki.Bot
        public async Task RedeemKeyAsync(EventContext e)
        {
            using (var context = new MikiContext())
            {
                long id = (long)e.Author.Id;
                if (e.Arguments.Take(out Guid guid))
                {
                    DonatorKey key = await DonatorKey.GetKeyAsync(context, guid);

                    IsDonator donatorStatus = await context.IsDonator.FindAsync(id);

                    if (donatorStatus == null)
                    {
                        donatorStatus = (await context.IsDonator.AddAsync(new IsDonator()
                        {
                            UserId = id
                        })).Entity;
                    }

                    donatorStatus.KeysRedeemed++;

                    if (donatorStatus.ValidUntil > DateTime.Now)
                    {
                        donatorStatus.ValidUntil += key.StatusTime;
                    }
                    else
                    {
                        donatorStatus.ValidUntil = DateTime.Now + key.StatusTime;
                    }

                    await new EmbedBuilder()
                    {
                        Title        = ($"🎉 Congratulations, {e.Author.Username}"),
                        Color        = new Color(226, 46, 68),
                        Description  = ($"You have successfully redeemed a donator key, I've given you **{key.StatusTime.TotalDays}** days of donator status."),
                        ThumbnailUrl = ("https://i.imgur.com/OwwA5fV.png")
                    }.AddInlineField("When does my status expire?", donatorStatus.ValidUntil.ToLongDateString())
                    .ToEmbed().QueueToChannelAsync(e.Channel);

                    context.DonatorKey.Remove(key);
                    await context.SaveChangesAsync();

                    // cheap hack.
                    var achievementManager = AchievementManager.Instance;
                    var achievements       = achievementManager.GetContainerById("donator").Achievements;

                    if (donatorStatus.KeysRedeemed == 1)
                    {
                        await achievementManager.UnlockAsync(achievements[0], e.Channel, e.Author, 0);
                    }
                    else if (donatorStatus.KeysRedeemed == 5)
                    {
                        await achievementManager.UnlockAsync(achievements[1], e.Channel, e.Author, 1);
                    }
                    else if (donatorStatus.KeysRedeemed == 25)
                    {
                        await achievementManager.UnlockAsync(achievements[2], e.Channel, e.Author, 2);
                    }
                }
            }
        }
コード例 #5
0
        public override async Task <bool> CheckAsync(ICommandContext e)
        {
            var context = e.GetService <DbContext>();

            return(await IsDonator.ForUserAsync(context, e.Author.Id));
        }