public async Task HandleAsync(string rawName, string rawGender) { if (string.IsNullOrWhiteSpace(rawName) || string.IsNullOrWhiteSpace(rawGender)) { await ReplyAsync(Messages.InvalidCommand); return; } var name = rawName.Trim(); // Check if the cat already exists var existingCat = await _repository.FindByNameAsync(name); if (existingCat != null) { await ReplyAsync(string.Format(Messages.CatNameExistsFormat, name)); return; } if (!Enum.TryParse(rawGender.Trim(), true, out Gender gender) || gender == Gender.None) { await ReplyAsync($"Valid genders are '{Gender.Male}' and '{Gender.Female}'"); return; } // Check if the current owner already has a cat if (_currentOwner.Cat != null) { await ReplyAsync(Messages.CatAlreadyOwned); return; } // If there is no owner yet, generate one if (_currentOwner.Owner == null) { var owner = await CreateOwnerAsync(Context.Message.Author); await((IOwnerService)_currentOwner).SetCurrentOwner(owner); } // Generate the new cat var newCat = new Cat(_currentOwner.Owner.Id, name, gender); // Store the new cat _repository.Add(newCat); await _repository.SaveChangesAsync(); // Track event _telemetryService.TrackCreateCommand(_currentOwner, newCat); var message = $"{newCat.Name} happily meets {newCat.Posessive} new master\n"; var catSheet = CatSheet.GetSheet(_currentOwner, newCat, message); await ReplyAsync(string.Empty, embed : catSheet); }
public async Task <ResultMessage> GetOverviewAsync(ICurrentOwner currentOwner, Cat cat) { Embed embed; var adventureEntry = await _adventureEntryRepository.FindByCatIdAsync(cat.Id); if (adventureEntry != null) { var adventure = _adventureRepository.FindByAdventureRef(adventureEntry.AdventureRef); embed = CatSheet.GetSheet(currentOwner, cat, string.Empty, adventure, adventureEntry.End); } else { embed = CatSheet.GetSheet(currentOwner, cat); } return(new ResultMessage(string.Empty, embed)); }
private async Task HandleAdventureResultAsync(Cat cat, AdventureEntry adventureEntry) { var adventure = _adventureRepository.FindByAdventureRef(adventureEntry.AdventureRef); var owner = await _ownerRepository.FindAsync(cat.OwnerId); var reward = adventure.GetReward(); var item = await _itemRepository.FindByItemRefAsync(reward.ItemRef); cat.ApplyStatModifiers(adventure.StatGain); owner.GiveItem(reward.ItemRef, reward.Quantity); var user = await _discordClient.GetUserAsync(Convert.ToUInt64(owner.AuthorId)); var guild = ((DiscordSocketClient)_discordClient).Guilds.FirstOrDefault(i => i.Users.Any(j => j.Id == user.Id)); // TODO: For now we select the default channel. Replace with configurable channel var channel = guild.GetTextChannel(guild.DefaultChannel.Id); var embed = CatSheet.GetRewardSheet(owner, cat, adventure, item, reward); await channel.SendMessageAsync(string.Empty, embed : embed); ////await channel.SendMessageAsync($"{cat.Name} got {reward.Quantity} {item.Name}!"); }