Abstracted out command arguments a bit
This commit is contained in:
parent
c723f82d95
commit
471ab6cb27
13
NadekoBot.Core/Common/INadekoCommandOptions.cs
Normal file
13
NadekoBot.Core/Common/INadekoCommandOptions.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Core.Common
|
||||||
|
{
|
||||||
|
public interface INadekoCommandOptions
|
||||||
|
{
|
||||||
|
void NormalizeOptions();
|
||||||
|
}
|
||||||
|
}
|
20
NadekoBot.Core/Common/OptionsParser.cs
Normal file
20
NadekoBot.Core/Common/OptionsParser.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using CommandLine;
|
||||||
|
|
||||||
|
namespace NadekoBot.Core.Common
|
||||||
|
{
|
||||||
|
public class OptionsParser
|
||||||
|
{
|
||||||
|
private static OptionsParser _instance = new OptionsParser();
|
||||||
|
public static OptionsParser Default => _instance;
|
||||||
|
|
||||||
|
static OptionsParser() { }
|
||||||
|
|
||||||
|
public T ParseFrom<T>(T options, string[] args) where T : INadekoCommandOptions
|
||||||
|
{
|
||||||
|
var res = Parser.Default.ParseArguments<T>(args);
|
||||||
|
options = (T)res.MapResult(x => x, x => options);
|
||||||
|
options.NormalizeOptions();
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,6 +12,7 @@ using NadekoBot.Modules.Gambling.Common.AnimalRacing;
|
|||||||
using NadekoBot.Modules.Gambling.Services;
|
using NadekoBot.Modules.Gambling.Services;
|
||||||
using NadekoBot.Core.Modules.Gambling.Common.AnimalRacing;
|
using NadekoBot.Core.Modules.Gambling.Common.AnimalRacing;
|
||||||
using CommandLine;
|
using CommandLine;
|
||||||
|
using NadekoBot.Core.Common;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Gambling
|
namespace NadekoBot.Modules.Gambling
|
||||||
{
|
{
|
||||||
@ -38,10 +39,8 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[NadekoOptions(typeof(RaceOptions))]
|
[NadekoOptions(typeof(RaceOptions))]
|
||||||
public Task Race(params string[] args)
|
public Task Race(params string[] args)
|
||||||
{
|
{
|
||||||
var options = new RaceOptions();
|
var options = OptionsParser.Default.ParseFrom(new RaceOptions(), args);
|
||||||
var res = Parser.Default.ParseArguments<RaceOptions>(args);
|
|
||||||
options = res.MapResult(x => x, x => options);
|
|
||||||
options.NormalizeOptions();
|
|
||||||
var ar = new AnimalRace(options, _cs, _bc.BotConfig.RaceAnimals.Shuffle().ToArray());
|
var ar = new AnimalRace(options, _cs, _bc.BotConfig.RaceAnimals.Shuffle().ToArray());
|
||||||
if (!_service.AnimalRaces.TryAdd(Context.Guild.Id, ar))
|
if (!_service.AnimalRaces.TryAdd(Context.Guild.Id, ar))
|
||||||
return Context.Channel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_already_started"));
|
return Context.Channel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_already_started"));
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
using CommandLine;
|
using CommandLine;
|
||||||
|
using NadekoBot.Core.Common;
|
||||||
|
|
||||||
namespace NadekoBot.Core.Modules.Gambling.Common.AnimalRacing
|
namespace NadekoBot.Core.Modules.Gambling.Common.AnimalRacing
|
||||||
{
|
{
|
||||||
public class RaceOptions
|
public class RaceOptions : INadekoCommandOptions
|
||||||
{
|
{
|
||||||
[Option('s', "start-time", Default = 20, Required = false)]
|
[Option('s', "start-time", Default = 20, Required = false)]
|
||||||
public int StartTime { get; set; } = 20;
|
public int StartTime { get; set; } = 20;
|
||||||
|
Loading…
Reference in New Issue
Block a user