public Task Race() { var ar = new AnimalRace(_cs, _bc.BotConfig.RaceAnimals.Shuffle().ToArray()); if (!_service.AnimalRaces.TryAdd(Context.Guild.Id, ar)) { return(Context.Channel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_already_started"))); } ar.Initialize(); var count = 0; Task _client_MessageReceived(SocketMessage arg) { var _ = Task.Run(() => { try { if (arg.Channel.Id == Context.Channel.Id) { if (ar.CurrentPhase == AnimalRace.Phase.Running && ++count % 9 == 0) { raceMessage = null; } } } catch { } }); return(Task.CompletedTask); } Task Ar_OnEnded(AnimalRace race) { _client.MessageReceived -= _client_MessageReceived; _service.AnimalRaces.TryRemove(Context.Guild.Id, out _); var winner = race.FinishedUsers[0]; if (race.FinishedUsers[0].Bet > 0) { return(Context.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_won_money", Format.Bold(winner.Username), winner.Animal.Icon, (race.FinishedUsers[0].Bet * (race.Users.Length - 1)) + _bc.BotConfig.CurrencySign))); } else { return(Context.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_won", Format.Bold(winner.Username), winner.Animal.Icon))); } } ar.OnStartingFailed += Ar_OnStartingFailed; ar.OnStateUpdate += Ar_OnStateUpdate; ar.OnEnded += Ar_OnEnded; ar.OnStarted += Ar_OnStarted; _client.MessageReceived += _client_MessageReceived; return(Context.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_starting"), footer: GetText("animal_race_join_instr", Prefix))); }
public Task Race() { var ar = new AnimalRace(_cs, _bc.BotConfig.RaceAnimals.Shuffle().ToArray()); if (!AnimalRaces.TryAdd(Context.Guild.Id, ar)) { return(Context.Channel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_already_started"))); } ar.Initialize(); ar.OnStartingFailed += Ar_OnStartingFailed; ar.OnStateUpdate += Ar_OnStateUpdate; ar.OnEnded += Ar_OnEnded; ar.OnStarted += Ar_OnStarted; return(Context.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_starting"), footer: GetText("animal_race_join_instr", Prefix))); }
public Task Race(params string[] args) { var(options, success) = OptionsParser.ParseFrom(new RaceOptions(), args); var ar = new AnimalRace(options, _cs, _gamesConf.Data.RaceAnimals.Shuffle()); if (!_service.AnimalRaces.TryAdd(ctx.Guild.Id, ar)) { return(ctx.Channel.SendErrorAsync(GetText("animal_race"), GetText("animal_race_already_started"))); } ar.Initialize(); var count = 0; Task _client_MessageReceived(SocketMessage arg) { var _ = Task.Run(() => { try { if (arg.Channel.Id == ctx.Channel.Id) { if (ar.CurrentPhase == AnimalRace.Phase.Running && ++count % 9 == 0) { raceMessage = null; } } } catch { } }); return(Task.CompletedTask); } Task Ar_OnEnded(AnimalRace race) { _client.MessageReceived -= _client_MessageReceived; _service.AnimalRaces.TryRemove(ctx.Guild.Id, out _); var winner = race.FinishedUsers[0]; if (race.FinishedUsers[0].Bet > 0) { return(ctx.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_won_money", Format.Bold(winner.Username), winner.Animal.Icon, (race.FinishedUsers[0].Bet * (race.Users.Count - 1)) + CurrencySign))); } else { return(ctx.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_won", Format.Bold(winner.Username), winner.Animal.Icon))); } } ar.OnStartingFailed += Ar_OnStartingFailed; ar.OnStateUpdate += Ar_OnStateUpdate; ar.OnEnded += Ar_OnEnded; ar.OnStarted += Ar_OnStarted; _client.MessageReceived += _client_MessageReceived; return(ctx.Channel.SendConfirmAsync(GetText("animal_race"), GetText("animal_race_starting", options.StartTime), footer: GetText("animal_race_join_instr", Prefix))); }