private void PluginsPluginsReloaded(object sender, EventArgs e) { plugins.Clear(); bot.CleanPlugins(); foreach (var pluginName in pluginManager.GetSubclasses("Huffelpuff.Plugins.AbstractPlugin")) { Log.Instance.Log("Initialize Plugin " + pluginName, Level.Info); var p = (AbstractPlugin)pluginManager.CreateInstance(pluginName, BindingFlags.CreateInstance, new object[] { bot }); try { p.Init(); } catch (Exception exception) { Log.Instance.Log(exception); continue; } if (p.Ready) { plugins.Add(p); } else { OnPluginLoadEvent(new PluginLoadEventArgs(pluginName, PluginLoadEventType.Failed, null)); } } foreach (var plugin in plugins) { var assemblyParts = GetAssemblyParts(plugin.AssemblyName); string assemblyVersion = assemblyParts.AssemblyVersion; string assemblyName = assemblyParts.AssemblyName; string newAssemblyVersion; PluginLoadEventType loadType; if (oldPlugs.TryGetValue(assemblyName, out newAssemblyVersion)) { loadType = assemblyVersion != newAssemblyVersion ? PluginLoadEventType.Update : PluginLoadEventType.Reload; oldPlugs.Remove(assemblyName); } else { loadType = PluginLoadEventType.Load; } OnPluginLoadEvent(new PluginLoadEventArgs(plugin.FullName, loadType, plugin)); } foreach (var s in oldPlugs) { OnPluginLoadEvent(new PluginLoadEventArgs(s.Key, PluginLoadEventType.Remove, null)); } oldPlugs.Clear(); foreach (var assemblyParts in plugins.Select(plugin => GetAssemblyParts(plugin.AssemblyName))) { oldPlugs.Add(assemblyParts.AssemblyName, assemblyParts.AssemblyVersion); } if (bot.MainBotData == null) { return; } foreach (var pluginname in bot.MainBotData.Plugin.Select(pl => pl.PluginName)) { var plugin = plugins.Where(p => p.FullName == pluginname).FirstOrDefault(); if (plugin != null) { try { plugin.Activate(); } catch (Exception exception) { Log.Instance.Log(exception); continue; } } } }