Example #1
0
        public Task <E <string> > Run()
        {
            Scheduler.VerifyOwnThread();

            Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address);
            return(Task.FromResult(ts3client.Connect()));
        }
Example #2
0
        public E <string> InitializeBot()
        {
            Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address);

            // Registering config changes
            config.Language.Changed += (s, e) =>
            {
                var langResult = LocalizationManager.LoadLanguage(e.NewValue, true);
                if (!langResult.Ok)
                {
                    Log.Error("Failed to load language file ({0})", langResult.Error);
                }
            };
            config.Events.IdleDelay.Changed += (s, e) => EnableIdleTickWorker();
            config.Events.OnIdle.Changed    += (s, e) => EnableIdleTickWorker();

            var builder = new DependencyBuilder(Injector);

            builder.AddModule(this);
            builder.AddModule(config);
            builder.AddModule(Injector);
            builder.AddModule(config.Playlists);
            builder.RequestModule <PlaylistIO>();
            builder.RequestModule <PlaylistManager>();
            builder.AddModule(Id);
            builder.AddModule(new TsFullClient());
            builder.RequestModule <TsBaseFunctions, TsFullClient>();
            builder.RequestModule <Ts3Client>();
            builder.RequestModule <Player>();
            builder.RequestModule <CustomTargetPipe>();
            builder.RequestModule <IVoiceTarget, CustomTargetPipe>();
            builder.RequestModule <SessionManager>();
            builder.RequestModule <ResolveContext>();
            if (!builder.TryCreate <CommandManager>(out var commandManager))
            {
                return("Failed to create commandManager");
            }
            builder.AddModule(commandManager);
            if (config.History.Enabled)
            {
                builder.AddModule(config.History);
                builder.RequestModule <HistoryManager>();
            }
            builder.RequestModule <PlayManager>();

            if (!builder.Build())
            {
                Log.Error("Missing bot module dependency");
                return("Could not load all bot modules");
            }

            {
                var io             = Injector.GetModule <PlaylistIO>();
                var resourceSearch = new ResourceSearch(io);
                Injector.AddModule(resourceSearch);
                var playlistManager = Injector.GetModule <PlaylistManager>();
                playlistManager.ResourceSearch = resourceSearch;
            }

            resourceResolver = Injector.GetModule <ResolveContext>();
            ts3FullClient    = Injector.GetModule <TsFullClient>();
            ts3client        = Injector.GetModule <Ts3Client>();
            player           = Injector.GetModule <Player>();
            player.SetTarget(Injector.GetModule <CustomTargetPipe>());
            Injector.AddModule(ts3FullClient.Book);

            playManager    = Injector.GetModule <PlayManager>();
            targetManager  = Injector.GetModule <IVoiceTarget>();
            sessionManager = Injector.GetModule <SessionManager>();
            stats          = Injector.GetModule <Stats>();

            player.OnSongEnd     += playManager.SongEndedEvent;
            player.OnSongUpdated += (s, e) => playManager.Update(e);
            // Update idle status events
            playManager.BeforeResourceStarted += (s, e) => DisableIdleTickWorker();
            playManager.PlaybackStopped       += (s, e) => EnableIdleTickWorker();
            // Used for the voice_mode script
            playManager.BeforeResourceStarted += BeforeResourceStarted;
            // Update the own status text to the current song title
            playManager.AfterResourceStarted += LoggedUpdateBotStatus;
            playManager.PlaybackStopped      += LoggedUpdateBotStatus;
            playManager.OnResourceUpdated    += LoggedUpdateBotStatus;
            // Log our resource in the history
            if (Injector.TryGet <HistoryManager>(out var historyManager))
            {
                playManager.AfterResourceStarted += (s, e) => historyManager.LogAudioResource(new HistorySaveData(e.PlayResource.BaseData, e.MetaData.ResourceOwnerUid ?? Uid.Null));
            }
            // Update our thumbnail
            playManager.AfterResourceStarted += GenerateStatusImage;
            playManager.PlaybackStopped      += GenerateStatusImage;
            // Stats
            playManager.AfterResourceStarted += (s, e) => stats.TrackSongStart(Id, e.ResourceData.AudioType);
            playManager.ResourceStopped      += (s, e) => stats.TrackSongStop(Id);
            // Register callback for all messages happening
            ts3client.OnMessageReceived += OnMessageReceived;
            // Register callback to remove open private sessions, when user disconnects
            ts3FullClient.OnEachClientLeftView += OnClientLeftView;
            ts3client.OnBotConnected           += OnBotConnected;
            ts3client.OnBotDisconnect          += OnBotDisconnect;
            // Alone mode
            ts3client.OnAloneChanged += OnAloneChanged;
            // Whisper stall
            ts3client.OnWhisperNoTarget += (s, e) => player.SetStall();

            commandManager.RegisterCollection(MainCommands.Bag);
            // TODO remove after plugin rework
            var pluginManager = Injector.GetModule <PluginManager>();

            foreach (var plugin in pluginManager.Plugins)
            {
                if (plugin.Type == PluginType.CorePlugin || plugin.Type == PluginType.Commands)
                {
                    commandManager.RegisterCollection(plugin.CorePlugin.Bag);
                }
            }
            // Restore all alias from the config
            foreach (var alias in config.Commands.Alias.GetAllItems())
            {
                commandManager.RegisterAlias(alias.Key, alias.Value).UnwrapToLog(Log);
            }

            // Connect after everyting is set up
            return(ts3client.Connect());
        }
Example #3
0
        public E <string> InitializeBot()
        {
            Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address);

            // Registering config changes
            config.Language.Changed += (s, e) =>
            {
                var langResult = LocalizationManager.LoadLanguage(e.NewValue, true);
                if (!langResult.Ok)
                {
                    Log.Error("Failed to load language file ({0})", langResult.Error);
                }
            };
            config.Events.IdleTime.Changed += (s, e) => EnableIdleTickWorker();
            config.Events.OnIdle.Changed   += (s, e) => EnableIdleTickWorker();

            var builder = new DependencyBuilder(Injector);

            builder.AddModule(this);
            builder.AddModule(config);
            builder.AddModule(Injector);
            builder.AddModule(config.Playlists);
            builder.RequestModule <PlaylistIO>();
            builder.RequestModule <PlaylistManager>();
            builder.AddModule(Id);
            builder.AddModule(new Ts3FullClient());
            builder.RequestModule <Ts3BaseFunctions, Ts3FullClient>();
            builder.RequestModule <Ts3Client>();
            builder.RequestModule <IPlayerConnection, Ts3Client>();
            builder.RequestModule <SessionManager>();
            if (config.History.Enabled)
            {
                builder.AddModule(config.History);
                builder.RequestModule <HistoryManager>();
            }
            builder.RequestModule <PlayManager>();

            if (!builder.Build())
            {
                Log.Error("Missing bot module dependency");
                return("Could not load all bot modules");
            }

            tsFullClient     = Injector.GetModule <Ts3FullClient>();
            clientConnection = Injector.GetModule <Ts3Client>();
            playerConnection = clientConnection;
            Injector.AddModule <IVoiceTarget>(clientConnection.TargetPipe);
            Injector.AddModule(tsFullClient.Book);

            playManager    = Injector.GetModule <PlayManager>();
            targetManager  = Injector.GetModule <IVoiceTarget>();
            sessionManager = Injector.GetModule <SessionManager>();

            playerConnection.OnSongEnd     += playManager.SongStoppedEvent;
            playerConnection.OnSongUpdated += (s, e) => playManager.Update(e);
            // Update idle status events
            playManager.BeforeResourceStarted += (s, e) => DisableIdleTickWorker();
            playManager.AfterResourceStopped  += (s, e) => EnableIdleTickWorker();
            // Used for the voice_mode script
            playManager.BeforeResourceStarted += BeforeResourceStarted;
            // Update the own status text to the current song title
            playManager.AfterResourceStarted += LoggedUpdateBotStatus;
            playManager.AfterResourceStopped += LoggedUpdateBotStatus;
            playManager.OnResourceUpdated    += LoggedUpdateBotStatus;
            // Log our resource in the history
            if (Injector.TryGet <HistoryManager>(out var historyManager))
            {
                playManager.AfterResourceStarted += (s, e) => historyManager.LogAudioResource(new HistorySaveData(e.PlayResource.BaseData, e.Invoker.ClientUid));
            }
            // Update our thumbnail
            playManager.AfterResourceStarted += GenerateStatusImage;
            playManager.AfterResourceStopped += GenerateStatusImage;
            // Register callback for all messages happening
            clientConnection.OnMessageReceived += OnMessageReceived;
            // Register callback to remove open private sessions, when user disconnects
            tsFullClient.OnEachClientLeftView += OnClientLeftView;
            clientConnection.OnBotConnected   += OnBotConnected;
            clientConnection.OnBotDisconnect  += OnBotDisconnect;

            // Restore all alias from the config
            foreach (var alias in config.Commands.Alias.GetAllItems())
            {
                commandManager.RegisterAlias(alias.Key, alias.Value).UnwrapToLog(Log);
            }

            // Connect the query after everyting is set up
            return(clientConnection.Connect());
        }