diff --git a/NadekoBot.iss b/NadekoBot.iss index c56caae3..b1692678 100644 --- a/NadekoBot.iss +++ b/NadekoBot.iss @@ -8,27 +8,31 @@ AppVersion={#version} AppPublisher=Kwoth DefaultDirName={pf}\NadekoBot DefaultGroupName=NadekoBot -UninstallDisplayIcon={app}\{#sysfolder}\NadekoBot.exe +UninstallDisplayIcon={app}\{#sysfolder}\nadeko_icon.ico Compression=lzma2 SolidCompression=yes OutputDir=userdocs:projekti/NadekoInstallerOutput OutputBaseFilename=NadekoBot-setup-{#version} -AppReadmeFile=http://nadekobot.readthedocs.io/en/latest/Commands%20List/ +AppReadmeFile=http://nadekobot.readthedocs.io/en/1.4/Commands%20List/ +ArchitecturesInstallIn64BitMode=x64 [Files] ;install -Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\*"; DestDir: "{app}\{#sysfolder}"; Permissions: users-modify; Flags: recursesubdirs onlyifdoesntexist ignoreversion createallsubdirs; Excludes: "*.pdb, *.db" +Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\*"; DestDir: "{app}\{#sysfolder}"; Permissions: users-full; Flags: recursesubdirs onlyifdoesntexist ignoreversion createallsubdirs; Excludes: "*.pdb, *.db" +;rename credentials example to credentials, but don't overwrite if it exists +Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\credentials_example.json"; DestName: "credentials.json"; DestDir: "{app}\{#sysfolder}"; Permissions: users-full; Flags: skipifsourcedoesntexist onlyifdoesntexist; ;reinstall - i want to copy all files, but i don't want to overwrite any data files because users will lose their customization if they don't have a backup, ; and i don't want them to have to backup and then copy-merge into data folder themselves, or lose their currency images due to overwrite. -Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\*"; DestDir: "{app}\{#sysfolder}"; Permissions: users-modify; Flags: recursesubdirs onlyifdestfileexists createallsubdirs; Excludes: "*.pdb, *.db, data\*, credentials.json"; -Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\data\*"; DestDir: "{app}\{#sysfolder}\data"; Permissions: users-modify; Flags: recursesubdirs onlyifdoesntexist createallsubdirs; +Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\*"; DestDir: "{app}\{#sysfolder}"; Permissions: users-full; Flags: recursesubdirs onlyifdestfileexists createallsubdirs; Excludes: "*.pdb, *.db, data\*, credentials.json"; +Source: "src\NadekoBot\bin\Release\PublishOutput\{#target}\data\*"; DestDir: "{app}\{#sysfolder}\data"; Permissions: users-full; Flags: recursesubdirs onlyifdoesntexist createallsubdirs; ;readme ;Source: "readme"; DestDir: "{app}"; Flags: isreadme [Run] -Filename: "http://nadekobot.readthedocs.io/en/latest/Commands%20List/"; Flags: postinstall checked shellexec runasoriginaluser; Description: "Open Command List" +Filename: "http://nadekobot.readthedocs.io/en/1.4/JSON%20Explanations/"; Flags: postinstall shellexec runasoriginaluser; Description: "Open setup guide" +Filename: "{app}\{#sysfolder}\credentials.json"; Flags: postinstall shellexec runasoriginaluser; Description: "Open credentials file" [Icons] ; for pretty install directory @@ -36,4 +40,32 @@ Name: "{app}\NadekoBot"; Filename: "{app}\{#sysfolder}\NadekoBot.exe"; IconFilen Name: "{app}\credentials"; Filename: "{app}\{#sysfolder}\credentials.json" Name: "{app}\data"; Filename: "{app}\{#sysfolder}\data" ; desktop shortcut -Name: "{commondesktop}\NadekoBot"; Filename: "{app}\NadekoBot"; \ No newline at end of file +Name: "{commondesktop}\NadekoBot"; Filename: "{app}\NadekoBot"; + +[Registry] +;make the app run as administrator +Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ + ValueType: String; ValueName: "{app}\{#sysfolder}\NadekoBot.exe"; ValueData: "RUNASADMIN"; \ + Flags: uninsdeletekeyifempty uninsdeletevalue; +Root: "HKCU"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ + ValueType: String; ValueName: "{app}\{#sysfolder}\NadekoBot.exe"; ValueData: "RUNASADMIN"; \ + Flags: uninsdeletekeyifempty uninsdeletevalue; + +;ask the user if they want to delete all settings +[Code] +var +X: string; +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + if CurUninstallStep = usPostUninstall then + begin + X := ExpandConstant('{app}'); + if FileExists(X + '\{#sysfolder}\data\NadekoBot.db') then begin + if MsgBox('Do you want to delete all settings associated with this bot?', mbConfirmation, MB_YESNO) = IDYES then begin + DelTree(X + '\{#sysfolder}', True, True, True); + end + end else begin + MsgBox(X + '\{#sysfolder}\data\NadekoBot.db doesn''t exist', mbConfirmation, MB_YESNO) + end + end; +end; \ No newline at end of file diff --git a/src/NadekoBot/NadekoBot.cs b/src/NadekoBot/NadekoBot.cs index 0a3bdb42..4c2cd91a 100644 --- a/src/NadekoBot/NadekoBot.cs +++ b/src/NadekoBot/NadekoBot.cs @@ -25,6 +25,7 @@ using NadekoBot.Services.Administration; using NadekoBot.Services.Permissions; using NadekoBot.Services.Utility; using NadekoBot.Services.Help; +using System.IO; namespace NadekoBot { @@ -63,6 +64,7 @@ namespace NadekoBot { SetupLogger(); _log = LogManager.GetCurrentClassLogger(); + TerribleElevatedPermissionCheck(); Credentials = new BotCredentials(); Db = new DbService(Credentials); @@ -244,11 +246,11 @@ namespace NadekoBot await LoginAsync(Credentials.Token).ConfigureAwait(false); - _log.Info("Loading serveices..."); + _log.Info("Loading services..."); AddServices(); sw.Stop(); - _log.Info("Connected in " + sw.Elapsed.TotalSeconds.ToString("F2")); + _log.Info($"Connected in {sw.Elapsed.TotalSeconds:F2} s"); var stats = Services.GetService(); stats.Initialize(); @@ -295,6 +297,21 @@ namespace NadekoBot await Task.Delay(-1).ConfigureAwait(false); } + private void TerribleElevatedPermissionCheck() + { + try + { + File.WriteAllText("test", "test"); + File.Delete("test"); + } + catch + { + _log.Error("You must run the application as an ADMINISTRATOR."); + Console.ReadKey(); + Environment.Exit(2); + } + } + private static void SetupLogger() { try diff --git a/src/NadekoBot/NadekoBot.csproj b/src/NadekoBot/NadekoBot.csproj index 3f22fffc..77179ae9 100644 --- a/src/NadekoBot/NadekoBot.csproj +++ b/src/NadekoBot/NadekoBot.csproj @@ -4,6 +4,7 @@ General purpose Discord bot written in C#. Kwoth Kwoth + Kwoth netcoreapp1.1 true NadekoBot @@ -20,7 +21,7 @@ 1.0.0.0 nadeko_icon.ico win7-x64 - + 1.4.1 diff --git a/src/NadekoBot/Services/Administration/LogCommandService.cs b/src/NadekoBot/Services/Administration/LogCommandService.cs index 1df6ce97..51fb392d 100644 --- a/src/NadekoBot/Services/Administration/LogCommandService.cs +++ b/src/NadekoBot/Services/Administration/LogCommandService.cs @@ -41,8 +41,6 @@ namespace NadekoBot.Services.Administration _mute = mute; _prot = prot; - var sw = Stopwatch.StartNew(); - GuildLogSettings = gcs .ToDictionary(g => g.GuildId, g => g.LogSetting) .ToConcurrent(); @@ -69,9 +67,6 @@ namespace NadekoBot.Services.Administration } }, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15)); - sw.Stop(); - _log.Debug($"Loaded in {sw.Elapsed.TotalSeconds:F2}s"); - //_client.MessageReceived += _client_MessageReceived; _client.MessageUpdated += _client_MessageUpdated; _client.MessageDeleted += _client_MessageDeleted;