Added ~poke and ~pokab commands.

This commit is contained in:
Master Kwoth 2016-06-26 21:33:25 +02:00
parent 0418cfba19
commit 2b7e81e68f
4 changed files with 125 additions and 1 deletions

View File

@ -15,6 +15,11 @@ namespace NadekoBot.Classes
/// </summary> /// </summary>
protected DiscordModule Module { get; } protected DiscordModule Module { get; }
/// <summary>
/// Parent module's prefix
/// </summary>
protected string Prefix => Module.Prefix;
/// <summary> /// <summary>
/// Creates a new instance of discord command, /// Creates a new instance of discord command,
/// use ": base(module)" in the derived class' /// use ": base(module)" in the derived class'

View File

@ -0,0 +1,116 @@
using Discord.Commands;
using NadekoBot.Classes;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
namespace NadekoBot.Modules.Searches.Commands
{
class PokemonSearchCommands : DiscordCommand
{
private static Dictionary<string, SearchPokemon> pokemons;
private static Dictionary<string, SearchPokemonAbility> pokemonAbilities;
public PokemonSearchCommands(DiscordModule module) : base(module)
{
pokemons = JsonConvert.DeserializeObject<Dictionary<string, SearchPokemon>>(File.ReadAllText("data/pokemon/pokemon_list.json"));
pokemonAbilities = JsonConvert.DeserializeObject<Dictionary<string, SearchPokemonAbility>>(File.ReadAllText("data/pokemon/pokemon_abilities.json"));
}
internal override void Init(CommandGroupBuilder cgb)
{
cgb.CreateCommand(Prefix + "pokemon")
.Alias(Prefix + "poke")
.Description("Searches for a pokemon.")
.Parameter("pokemon", ParameterType.Unparsed)
.Do(async e =>
{
var pok = e.GetArg("pokemon")?.Trim().ToUpperInvariant();
if (string.IsNullOrWhiteSpace(pok))
return;
foreach (var kvp in pokemons)
{
if (kvp.Key.ToUpperInvariant() == pok.ToUpperInvariant())
{
await e.Channel.SendMessage($"`Stats for \"{kvp.Key}\" pokemon:`\n{kvp.Value}");
return;
}
}
await e.Channel.SendMessage("`No pokemon found.`");
});
cgb.CreateCommand(Prefix + "pokemonability")
.Alias(Prefix + "pokab")
.Description("Searches for a pokemon ability.")
.Parameter("abil", ParameterType.Unparsed)
.Do(async e =>
{
var ab = e.GetArg("abil")?.Trim().ToUpperInvariant();
if (string.IsNullOrWhiteSpace(ab))
return;
foreach (var kvp in pokemonAbilities)
{
if (kvp.Key.ToUpperInvariant() == ab)
{
await e.Channel.SendMessage($"`Info for \"{kvp.Key}\" ability:`\n{kvp.Value}");
return;
}
}
await e.Channel.SendMessage("`No ability found.`");
});
}
}
public class SearchPokemon
{
public class GenderRatioClass
{
public float M { get; set; }
public float F { get; set; }
}
public class BaseStatsClass
{
public int HP { get; set; }
public int ATK { get; set; }
public int DEF { get; set; }
public int SPA { get; set; }
public int SPD { get; set; }
public int SPE { get; set; }
public override string ToString() => $@"
**HP:** {HP,-4} **ATK:** {ATK,-4} **DEF:** {DEF,-4}
**SPA:** {SPA,-4} **SPD:** {SPD,-4} **SPE:** {SPE,-4}";
}
public int Id { get; set; }
public string Species { get; set; }
public string[] Types { get; set; }
public GenderRatioClass GenderRatio { get; set; }
public BaseStatsClass BaseStats { get; set; }
public Dictionary<string, string> Abilities { get; set; }
public float HeightM { get; set; }
public float WeightKg { get; set; }
public string Color { get; set; }
public string[] Evos { get; set; }
public string[] EggGroups { get; set; }
public override string ToString() => $@"`Name:` {Species}
`Types:` {string.Join(", ", Types)}
`Stats:` {BaseStats}
`Height:` {HeightM,4}m `Weight:` {WeightKg}kg
`Abilities:` {string.Join(", ", Abilities.Values)}";
}
public class SearchPokemonAbility
{
public string Desc { get; set; }
public string Name { get; set; }
public float Rating { get; set; }
public override string ToString() => $@"`Name:` : {Name}
`Rating:` {Rating}
`Description:` {Desc}";
}
}

View File

@ -14,7 +14,6 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net;
using System.Net.Http; using System.Net.Http;
namespace NadekoBot.Modules.Searches namespace NadekoBot.Modules.Searches
@ -31,6 +30,7 @@ namespace NadekoBot.Modules.Searches
commands.Add(new WowJokeCommand(this)); commands.Add(new WowJokeCommand(this));
commands.Add(new CalcCommand(this)); commands.Add(new CalcCommand(this));
commands.Add(new OsuCommands(this)); commands.Add(new OsuCommands(this));
commands.Add(new PokemonSearchCommands(this));
rng = new Random(); rng = new Random();
} }
@ -474,6 +474,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
Console.WriteLine(ex); Console.WriteLine(ex);
} }
}); });
}); });
} }
} }

View File

@ -149,6 +149,7 @@
<Compile Include="Modules\Searches\Commands\IMDB\ImdbScraper.cs" /> <Compile Include="Modules\Searches\Commands\IMDB\ImdbScraper.cs" />
<Compile Include="Classes\IncidentsHandler.cs" /> <Compile Include="Classes\IncidentsHandler.cs" />
<Compile Include="Modules\Searches\Commands\OsuCommands.cs" /> <Compile Include="Modules\Searches\Commands\OsuCommands.cs" />
<Compile Include="Modules\Searches\Commands\PokemonSearchCommands.cs" />
<Compile Include="_Models\JSONModels\AnimeResult.cs" /> <Compile Include="_Models\JSONModels\AnimeResult.cs" />
<Compile Include="_Models\JSONModels\Configuration.cs" /> <Compile Include="_Models\JSONModels\Configuration.cs" />
<Compile Include="Modules\Searches\Commands\WowJokes.cs" /> <Compile Include="Modules\Searches\Commands\WowJokes.cs" />
@ -495,6 +496,7 @@
<Content Include="lib\ScaredFingers.UnitsConversion.dll" /> <Content Include="lib\ScaredFingers.UnitsConversion.dll" />
<None Include="resources\images\rose_overlay.png" /> <None Include="resources\images\rose_overlay.png" />
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.