Exemplo n.º 1
0
        async Task <IonicMessage> PurchaseRoleInternalAsync(ulong userId, uint itemId)
        {
            var item = GetRoleById(itemId);

            if (item is null)
            {
                return(await messageService.GetMessageAsync("store-wrongnumber", new FormatData(userId)));
            }

            if (!await CanBuyRoleAsync(userId))
            {
                return(await messageService.GetMessageAsync("rolestore-cooldown", new FormatData(userId)));
            }

            if (await DB.RoleInventory.HasAnyAsync(userId, item.DatabaseId))
            {
                return(await messageService.GetMessageAsync("rolestore-hasrole", new FormatData(userId)));
            }

            var role = await DB.Roles.GetAsync(item.DatabaseId);

            if (role is null)
            {
                return(MessageService.Error);
            }

            if (!await TryWithdrawAsync(userId, item))
            {
                switch (item.Currency)
                {
                case Currency.Coins: return(await messageService.GetMessageAsync("store-nocoins", new FormatData(userId)));

                case Currency.Tokens:
                    return(await messageService.GetMessageAsync("store-notokens", new FormatData(userId)));
                }
            }

            RolesPurchased?.Invoke(null, new RolesPurchasedEventArgs(userId, 1u));

            await DB.RoleInventory.AddAsync(userId, role.Id, "Store");

            var reward = new RoleReward().SetRole(item.DatabaseId);

            await DB.Cooldowns.SetLastRoleStoreTimeAsync(userId, DateTime.UtcNow);

            RiftBot.Log.Information($"Role purchased: #{item.RoleId.ToString()} by {userId.ToString()}.");

            return(await messageService.GetMessageAsync("store-success", new FormatData(userId)
            {
                Reward = reward
            }));
        }
Exemplo n.º 2
0
        public override async Task <RiftMessage> ApplyAsync(RiftMessage message, FormatData data)
        {
            var rewardString = data.Reward switch
            {
                ItemReward itemReward => data.RewardService.Format(itemReward),
                RoleReward roleReward => await data.RewardService.FormatAsync(roleReward),
                BackgroundReward backgroundReward => await data.RewardService.FormatAsync(backgroundReward),
                _ => "Пусто :("
            };

            return(await ReplaceDataAsync(message, rewardString));
        }
    }
Exemplo n.º 3
0
        public async Task <string> FormatAsync(RoleReward reward)
        {
            var text = "роль";

            var dbRole = await DB.Roles.GetAsync(reward.RoleId);

            if (dbRole is null || !IonicHelper.GetRole(Settings.App.MainGuildId, dbRole.RoleId, out var role))
            {
                text += " не найдена";
                return(text);
            }

            text += $" {role.Name}";

            if (reward.Duration != null)
            {
                text += $" на {reward.Duration.Value.Humanize(culture: RiftBot.Culture)}";
            }

            return(text);
        }
Exemplo n.º 4
0
        async Task DeliverRoleAsync(ulong userId, RoleReward reward)
        {
            if (reward.Duration is null)
            {
                if (await DB.RoleInventory.HasAnyAsync(userId, reward.RoleId))
                {
                    return;
                }

                await DB.RoleInventory.AddAsync(userId, reward.RoleId, "Reward");

                return;
            }

            var dbRole = await DB.Roles.GetAsync(reward.RoleId);

            if (dbRole is null)
            {
                RiftBot.Log.Error($"No such role ID in database: {reward.RoleId.ToString()}");
                return;
            }

            await roleService.AddTempRoleAsync(userId, dbRole.RoleId, reward.Duration.Value, nameof(RoleReward));
        }