Ejemplo n.º 1
0
        public async System.Threading.Tasks.Task MainCommand(CommandContext ctx, string command)
        {
            await ctx.TriggerTypingAsync();

            var context = new CommandAttributes.RequireAuthentication();
            await context.ExecuteCheckAsync(ctx, false);

            switch (command.ToLower())
            {
            case "start":
                await new StartButton()
                {
                    Authentication = context,
                    CommandContext = ctx
                }.DoAction();
                break;

            case "restart":
                await new RestartButton()
                {
                    Authentication = context,
                    CommandContext = ctx
                }.DoAction();
                break;

            case "stop":
                await new StopButton()
                {
                    Authentication = context,
                    CommandContext = ctx
                }.DoAction();
                break;
            }
        }
Ejemplo n.º 2
0
        public async Task MainCommand(CommandContext ctx)
        {
            var context = new CommandAttributes.RequireAuthentication();

            await context.ExecuteCheckAsync(ctx, false);

            await new TcaServiceMenu().MenuEmulation(ctx, context);
        }
Ejemplo n.º 3
0
        public async Task RemoteConsoleCommand(CommandContext ctx, [RemainingText] string command)
        {
            var context = new CommandAttributes.RequireAuthentication();

            await context.ExecuteCheckAsync(ctx, false);

            var remoteConsole = new RemoteConsoleButton
            {
                Authentication = context,
                CommandContext = ctx
            };

            await remoteConsole.RconTask(command);
        }
Ejemplo n.º 4
0
        public TcaFileManager(CommandContext ctx, CommandAttributes.RequireAuthentication authenticationService,
                              string rootDir, bool lockDirectory = false)
        {
            AuthenticationService = authenticationService;

            var service = authenticationService.Service;
            var user    = authenticationService.User;

            Server           = new Server(service.ServerId);
            FileSystem       = Server.FileSystemService;
            CurrentDirectory = rootDir + "\\";
            LockDirectory    = lockDirectory;

            VirtualDirectorySecurity =
                new VirtualDirectorySecurity(FileSystem, CurrentDirectory, user.UserType, service.GameId);
            FileSystemUtilities = new FileSystemUtilities(VirtualDirectorySecurity, Server, service, ctx);
            CurrentListing      = FileSystemUtilities.GenerateListingDirectory(CurrentDirectory, VirtualDirectorySecurity);
            CommandContext      = ctx;

            IsServer = false;
        }
Ejemplo n.º 5
0
        public async Task MenuEmulation(CommandContext ctx, CommandAttributes.RequireAuthentication context)
        {
            await ctx.Message.DeleteAsync();

            await ctx.TriggerTypingAsync();

            var config = Configuration.GetConfiguration();

            var ftpInfo      = context.Service.FtpInfo.Split(':');
            var embedBuilder = new DiscordEmbedBuilder
            {
                Title     = context.Service.Name,
                Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail
                {
                    Url = config.ThumbnailUrl
                },
                Footer =
                    new DiscordEmbedBuilder.EmbedFooter
                {
                    Text    = $"Requested by {ctx.User.Username}#{ctx.User.Discriminator}",
                    IconUrl = ctx.User.AvatarUrl
                },
                Timestamp = DateTime.Now,
                Url       = new CompanyInfo(2).ControlPanelUrl +
                            "/Service/Home/" + context.Service.ServiceId,
                Description = $"**Name: **{context.Service.Name}\n"
                              + $"**Owner: **{context.Service.UserName}\n"
                              + $"**Server Info: **{context.Service.IpAddress} Port: {context.Service.GamePort}\n"
                              + $"**FTP: **{ftpInfo[0]} Port: {ftpInfo[1]}\n"
                              + $"{(context.User.UserType != UserType.User ? "**Server: **" + context.Service.ServerName : string.Empty)}\n"
            };

            var currentStatistics = config.ShowCpu ? $"**CPU:** {context.Service.CurrentCpu}%\n" : "";

            currentStatistics +=
                config.ShowMemory
                    ? $"**Memory:** {SizeSuffix(context.Service.CurrentMemory)}/{SizeSuffix(context.Service.MemoryLimitMB)} **[{context.Service.CurrentMemoryPercent}%]**\n"
                    : "";
            currentStatistics += config.ShowPlayers
                ? $"**Players:** {context.Service.CurrentPlayers}/{context.Service.CurrentMaxPlayers}"
                : "";

            if (!string.IsNullOrEmpty(currentStatistics))
            {
                embedBuilder.AddField("Stats", currentStatistics, true);
            }

            switch (context.Service.Status.ServiceStatus)
            {
            case ServiceStatus.Running:
            case ServiceStatus.Starting:
            case ServiceStatus.Resuming:
                embedBuilder.Color = DiscordColor.Green;
                break;

            case ServiceStatus.StartError:
            case ServiceStatus.Disabled:
            case ServiceStatus.Stopped:
            case ServiceStatus.Stopping:
                embedBuilder.Color = DiscordColor.Red;
                break;

            case ServiceStatus.Processing:
            case ServiceStatus.Pausing:
            case ServiceStatus.Paused:
                embedBuilder.Color = DiscordColor.Orange;
                break;

            case ServiceStatus.Unknown:
                embedBuilder.Color = DiscordColor.DarkRed;
                break;

            default:
                embedBuilder.Color = DiscordColor.Gray;
                break;
            }

            var modules = NexusServiceMenuModules.ToList();

            embedBuilder.AddField("Actions", GenerateActions(ctx.Client, modules));

            var menuMsg = await ctx.RespondAsync(embed : embedBuilder);

            foreach (var module in modules.OrderBy(x => x.Settings.ViewOrder))
            {
                module.CommandContext = ctx;
                module.Authentication = context;
                module.MenuMessage    = menuMsg;
                await menuMsg.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client,
                                                                        module.Settings.ActionCommandAttribute.EmojiName));

                await Task.Delay(250);
            }

            while (true)
            {
                var reactAction = await menuMsg.WaitForReactionAsync(ctx.User, TimeSpan.FromMinutes(5));

                if (reactAction.TimedOut)
                {
                    return;
                }
                if (reactAction.Result.User.Id != ctx.User.Id)
                {
                    continue;
                }

                await ctx.TriggerTypingAsync();

                await menuMsg.DeleteReactionAsync(reactAction.Result.Emoji, ctx.User);

                var modulePressed = modules.FirstOrDefault(x =>
                                                           x.Settings.ActionCommandAttribute.EmojiName == reactAction.Result.Emoji.GetDiscordName());
                if (modulePressed != null)
                {
#pragma warning disable 4014
                    Task.Run(async() => { await modulePressed.DoAction(); });
#pragma warning restore 4014
                }
            }
        }