예제 #1
0
        public async Task JoinTeam(int id)
        {
            IGuildUser user = (Context.User as IGuildUser);
            Player     plr  = _storage.Players.Find(x => x.DiscordId == user.Id);

            if (plr is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.DiscordUserNoPlayer(user)).ConfigureAwait(false);

                return;
            }
            Team team = _storage.Teams.Find(x => x.Id == id);

            if (team is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.UserNotOnTeam(plr)).ConfigureAwait(false);

                return;
            }

            IRole guildRole = Context.Guild.GetRole(team.RoleId);

            await user.AddRoleAsync(guildRole).ConfigureAwait(false);

            plr.TeamId = id;

            await Context.Channel.SendMessageAsync("", false, Embeds.PlayerJoinedTeam(user, team, Context.Guild));
        }
예제 #2
0
        public async Task RegisterTribe([Remainder] string tribeName)
        {
            IUser  user = Context.User;
            Player plr  = _storage.Players.Find(x => x.DiscordId == user.Id);

            if (plr is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.DiscordUserNoPlayer(user)).ConfigureAwait(false);

                return;
            }
            Team team = _storage.Teams.Find(x => x.Id == plr.TeamId);

            if (team is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.UserNotOnTeam(plr)).ConfigureAwait(false);

                return;
            }
            if (_storage.Teams.Any(team => team.TribeName == tribeName))
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.TribeNameAlreadyExists(tribeName)).ConfigureAwait(false);

                return;
            }
            team.TribeName = tribeName;

            await Context.Channel.SendMessageAsync("", false, Embeds.NewTribe(user, team));
        }
예제 #3
0
        public async Task NewTeam(string teamName, [Remainder] string tribeName)
        {
            IUser user = Context.User;

            if (_storage.Teams.Any(x => x.Name == teamName))
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.TeamAlreadyExists(teamName)).ConfigureAwait(false);

                return;
            }

            Team newTeam = new Team();

            newTeam.Id        = _storage.Teams.Count + 1;
            newTeam.Name      = teamName;
            newTeam.TribeName = tribeName;

            var role = await Context.Guild.CreateRoleAsync(teamName, null, null, false, true, null).ConfigureAwait(false);

            newTeam.RoleId = role.Id;

            _storage.Teams.Add(newTeam);

            await Context.Channel.SendMessageAsync("", false, Embeds.NewTeam(user, newTeam, Context.Guild));
        }
예제 #4
0
        public async Task SendEmptyMessage()
        {
            if (_config["misc:deathCounterMessageId"] != "")
            {
                return;
            }

            await Context.Channel.SendMessageAsync("", false, Embeds.ServerStatus(new List <StatusClass>())).ConfigureAwait(false);
        }
예제 #5
0
        public async Task RegisterPlayer(string steamId, [Remainder] string characterName)
        {
            IUser user = Context.User;

            if (_storage.Players.Any(plr => plr.DiscordId == user.Id))
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.UserAlreadyExists(user)).ConfigureAwait(false);

                return;
            }

            _storage.Players.Add(new Player()
            {
                DiscordId = user.Id, CharacterName = characterName, SteamID = steamId
            });
            await Context.Channel.SendMessageAsync("", false, Embeds.NewCharacterRegistered(user, characterName));
        }
예제 #6
0
        public async Task CloseWorld()
        {
            IUser  user = Context.User;
            Player plr  = _storage.Players.Find(x => x.DiscordId == user.Id);

            if (plr is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.DiscordUserNoPlayer(user)).ConfigureAwait(false);

                return;
            }

            Team team = _storage.Teams.Find(x => x.Id == plr.TeamId);

            if (team is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.UserNotOnTeam(plr)).ConfigureAwait(false);

                return;
            }

            if (string.IsNullOrEmpty(team.OpenMap))
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.NoMapOpen(team)).ConfigureAwait(false);

                return;
            }

            await Context.Channel.SendMessageAsync("", false, Embeds.TeamClosedWorld(team));

            StatusClass server = Globals.Servers.Find(x => x.MapName == team.OpenMap);

            server.RemoveTeamFromWhiteList(team);

            try
            {
                server.KickAllTeamPlayers(team).Wait();
            }
            catch (Exception ex)
            {
                _log.Info(ex);
            }

            team.OpenMap = "";
            await _commands.UpdateHoursRemaining(Embeds.TeamCurrency(_storage.Teams));
        }
        private async Task CheckExternalHours()
        {
            _storage.Teams.ForEach(async x =>
            {
                if (!string.IsNullOrEmpty(x.OpenMap))
                {
                    x.MinutesRemaining--;

                    if (x.MinutesRemaining == 30.0d || x.MinutesRemaining == 15.0d || x.MinutesRemaining == 0.0d)
                    {
                        await _commands.SendMinutesRemaining(x).ConfigureAwait(false);
                    }
                }
            });
            _storage.Save();

            await _commands.UpdateHoursRemaining(Embeds.TeamCurrency(_storage.Teams)).ConfigureAwait(false);
        }
예제 #8
0
        private async Task CheckServersAvailable()
        {
            Globals.Servers.ForEach(x =>
            {
                _log.Info($"{x.MapName} connected: {x.Connected}");
                if (!x.Connected)
                {
                    x.Reconnect();
                }
            });


            //Globals.Servers.Where(x => !x.Connected).ToList().ForEach(x =>
            //{
            //    _log.Info($"{x.MapName} connected: {x.Connected}");
            //});

            await _commands.UpdateServerStatus(Embeds.ServerStatus(Globals.Servers)).ConfigureAwait(false);
        }
예제 #9
0
        public async Task OpenWorld(string serverName)
        {
            IUser  user = Context.User;
            Player plr  = _storage.Players.Find(x => x.DiscordId == user.Id);

            if (plr is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.DiscordUserNoPlayer(user)).ConfigureAwait(false);

                return;
            }
            Team team = _storage.Teams.Find(x => x.Id == plr.TeamId);

            if (team is null)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.UserNotOnTeam(plr)).ConfigureAwait(false);

                return;
            }
            if (team.MinutesRemaining <= 0)
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.TeamNoTimeLeft(team)).ConfigureAwait(false);

                return;
            }
            if (!string.IsNullOrEmpty(team.OpenMap))
            {
                await Context.Channel.SendMessageAsync("", false, Embeds.MapAlreadyOpen(team)).ConfigureAwait(false);

                return;
            }

            if (ValidateWorldExists(serverName))
            {
                StatusClass server = Globals.Servers.Find(x => x.Name == serverName);
                server.WhiteListTeam(team);
                team.OpenMap = server.MapName;
            }

            await Context.Channel.SendMessageAsync("", false, Embeds.TeamOpenedWorld(team)).ConfigureAwait(false);

            await _commands.UpdateHoursRemaining(Embeds.TeamCurrency(_storage.Teams));
        }
예제 #10
0
        public async Task StopServer(string serverName)
        {
            Embed e    = null;
            IUser user = Context.User;

            if (ValidateWorldExists(serverName))
            {
                await _rconManager.ShutdownServerAsync(serverName);

                e = Embeds.ServerStopRequested(serverName, user);
            }
            else
            {
                e = Embeds.ServerNameDoesntExist(serverName, user);
            }


            await Context.Channel.SendMessageAsync("", false, e).ConfigureAwait(false);

            await Context.Message.DeleteAsync().ConfigureAwait(false);
        }
예제 #11
0
        public async Task StartupServer(string serverName)
        {
            Embed e    = null;
            IUser user = Context.User;

            if (ValidateWorldExists(serverName))
            {
                string startupCommand = _config[$"servers:{serverName}:startupCommand"];

                Process.Start(startupCommand);
                e = Embeds.ServerStartupRequested(serverName, user);
            }
            else
            {
                e = Embeds.ServerNameDoesntExist(serverName, user);
            }

            await Context.Channel.SendMessageAsync("", false, e).ConfigureAwait(false);

            await Context.Message.DeleteAsync().ConfigureAwait(false);
        }
예제 #12
0
 private async Task UpdateDeathCounters()
 {
     await _commands.UpdateDeathCount(Embeds.DeathCounter(_storage.Players)).ConfigureAwait(false);
 }
예제 #13
0
 internal async Task SendKillFeed(string fullString, bool wasDino)
 {
     Embed e = Embeds.UserKill(fullString, wasDino);
     await _commands.WriteKillToChannel(e).ConfigureAwait(false);
 }
예제 #14
0
 internal async Task SendKillFeed(Player plr, Player klr)
 {
     Embed e = Embeds.UserKill(plr, klr);
     await _commands.WriteKillToChannel(e).ConfigureAwait(false);
 }
예제 #15
0
 internal async Task SendMinutesRemaining(Team team)
 {
     await _logChannel.SendMessageAsync("", false, Embeds.MinutesRemaining(team, _guild)).ConfigureAwait(false);
 }