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 })); }
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)); } }
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); }
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)); }