Пример #1
0
            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)));
            }
Пример #3
0
            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)));
            }