public Task <E <string> > Run() { Scheduler.VerifyOwnThread(); Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address); return(Task.FromResult(ts3client.Connect())); }
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()); }
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()); }