void IModule.Install(ModuleManager manager) { _manager = manager; _client = manager.Client; _config = configuration.LoadFile(); manager.CreateCommands("", group => { _client.GetService <CommandService>().CreateCommand("rm") .Alias("rm") .Description("Removes messages from a text channel.\rExample: !rm 100\rPermissions: Everyone") .Parameter("count", ParameterType.Optional) .MinPermissions((int)PermissionLevel.GroupUsers) .Do(async e => { try { if (e.GetArg("count") == "") { await e.Channel.SendMessage($"{e.User.Name}, Please give me the number of lines you want to remove."); return; } //convert the arg from string to int int counter = int.Parse(e.GetArg("count")); int deleteCounter = 100; while (counter > 0) { if (counter >= 100) { deleteCounter = 100; } else { deleteCounter = counter; } //tell server to download messages to memory Message[] messagesToDelete = await e.Channel.DownloadMessages(deleteCounter); //tell bot to delete them from server await e.Channel.DeleteMessages(messagesToDelete); counter = counter - 100; } _logs.logMessage("Info", "commandsSystem.rm", $"User requested {e.GetArg("count")} lines to be removed from {e.Channel.Name}", e.User.Name); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.rm", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("defaultRoom") .Alias("defaultRoom") .Description("Sets the bots default voice room.\rExample: !defaultRoom roomID\rPermission: Owner") .Parameter("roomID", ParameterType.Optional) .MinPermissions((int)PermissionLevel.BotOwner) .Do(async e => { try { if (e.GetArg("roomID") == null) { await e.Channel.SendMessage("Oops, you forgot to give me the room ID to make my home by default."); return; } ulong id = Convert.ToUInt64(e.GetArg("roomID")); _config.defaultRoomID = id; _config.SaveFile(); await e.Channel.SendMessage("I have updated the config file for you."); _logs.logMessage("Info", "commandsSystem.defaultRoom", $"defaultRoom was updated to {e.GetArg("roomID")}", e.User.Name); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.defaultRoom", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("volume") .Alias("vol") .Description("Adjusts the default volume from the bot.\rExample: !vol +10\rPermission: Everyone") .Parameter("vol", ParameterType.Optional) .MinPermissions((int)PermissionLevel.GroupUsers) .Do(async e => { try { if (e.GetArg("vol") == null) { await e.Channel.SendMessage($"{e.User.Name},\rPlease give me the percent value you want me to change to.\rExample: {_config.Prefix}vol 50"); return; } //make sure we got a number value int intVol = 0; int.TryParse(e.GetArg("vol"), out intVol); if (intVol >= 1 && intVol <= 100) { //convert the value that we deam a percent value to a string to format it string stringVol = intVol.ToString(); string t = null; if (stringVol.Length == 1) { t = $".0{stringVol}"; } else { t = $".{stringVol}"; } //convert to float float newVol = float.Parse(t, System.Globalization.CultureInfo.InvariantCulture); if (newVol >= 0f && newVol <= 1f) { //valid number _config.volume = newVol; _config.SaveFile(); player.volume = newVol; //send the updated value to the var so we dont have to load the config file everytime in the loop. await e.Channel.SendMessage($"{e.User.Name},\rI have updated the volume to {e.GetArg("vol")}%."); _logs.logMessage("Info", "commandsSyste.Volume", $"Volume was changed to {newVol}%", e.User.Name); } } else if (intVol >= 101) { await e.Channel.SendMessage($"{e.User.Name},\rThe value you gave was higher then 100%, sorry."); } else if (intVol <= 0) { await e.Channel.SendMessage($"{e.User.Name},\rThe value can't go below 1, sorry."); } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.vol", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("halt") .Alias("halt") .Description("Shuts down the bot.\rPermission: Owner") .MinPermissions((int)PermissionLevel.BotOwner) .Do(async e => { try { await e.Channel.SendMessage($":wave: :zzz:"); _logs.logMessage("Info", "commandsSystem.halt", $"Server was requested to shutdown.", e.User.Name); await e.Server.Client.Disconnect(); Environment.Exit(0); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.halt", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("restart") .Alias("reboot") .Description("Shuts down the bot.\rPermission: Mods") .MinPermissions((int)PermissionLevel.GroupMods) .Do(async e => { try { //dump the current game playing _client.SetGame(null); //send a message out on the restart await e.Channel.SendMessage($":wave: :zzz:"); //check to see if she is in a voice room, if so disconnect var bot = e.Server.FindUsers(_client.CurrentUser.Name).FirstOrDefault().VoiceChannel; //check to see if the bot is in a room. if (bot != null) { //if she is, disconnect from the room. await bot.LeaveAudio(); } _logs.logMessage("Info", _config.Prefix + "restart", "Process was restarted by user", e.User.Name); var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName); Environment.Exit(0); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.restart", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("serverIds") .Alias("serverIds") .Description("Exports roles IDs.\rPermission: Owner") .MinPermissions((int)PermissionLevel.GroupAdmin) .Do(async e => { try { //extract the roles and id's from the server List <Role> serverRolesList = e.Server.Roles.ToList(); string result = null; for (int i = 0; i < serverRolesList.Count; i++) { result = result + $"{serverRolesList[i].Name} = {serverRolesList[i].Id}\r"; } Channel userPM = await e.User.CreatePMChannel(); await userPM.SendMessage($"```\r{result}\r```"); _logs.logMessage("Info", "commandsSystem.serverIds", "User requested the server role IDs.", e.User.Name); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.serverIds", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("setGroup") .Alias("sg") .Description($"Sets the role group needed for basic commands.\r{_config.Prefix}setGroup default id\r{_config.Prefix}setGroup mods id\r{_config.Prefix}setGroup admins id\rPermission: Owner") .Parameter("role", ParameterType.Optional) .Parameter("id", ParameterType.Optional) .MinPermissions((int)PermissionLevel.BotOwner) .Do(async e => { try { ulong id = new ulong { }; try { id = Convert.ToUInt64(e.GetArg("id")); } catch { } if (e.GetArg("id") == null) { await e.Channel.SendMessage($"Please submit a role ID.\rExample: {_config.Prefix}setGroup default 139135090637668350"); return; } switch (e.GetArg("role")) { case "default": _config.idDefaultGroup = id; _config.SaveFile(); await e.Channel.SendMessage($"Permission Role has been updated."); _logs.logMessage("Info", "commandsSystem.setGroup default", $"Default role updated to {e.GetArg("id")}", e.User.Name); break; case "mods": _config.idModsGroup = id; _config.SaveFile(); await e.Channel.SendMessage($"Permission Role has been updated."); _logs.logMessage("Info", "commandsSystem.setGroup mods", $"Mods role updated to {e.GetArg("id")}", e.User.Name); break; case "admins": _config.idAdminGroup = id; _config.SaveFile(); await e.Channel.SendMessage($"Permission Role has been updated."); _logs.logMessage("Info", "commandsSystem.setGroup admins", $"Admins role updated to {e.GetArg("id")}", e.User.Name); break; default: await e.Channel.SendMessage($"Please submit a group level.\rAvailable args\rdefault\rmods\radmins\rExample: {_config.Prefix}setGroup default 139135090637668350"); break; } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.setGroup", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("setPrefix") .Alias("sp") .Description("Changes the prefix that the bot will listen to.\rPermission: Owner") .Parameter("id", ParameterType.Optional) .MinPermissions((int)PermissionLevel.BotOwner) .Do(async e => { try { if (e.GetArg("id") == "#" || e.GetArg("id") == "/" || e.GetArg("id") == "@") { await e.Channel.SendMessage($"Please pick another command character that is not one of the following.\r'#' '/' '@'"); return; } else { _config.Prefix = e.GetArg("id")[0]; _config.SaveFile(); await e.Channel.SendMessage($"Character prefix has been changed to {e.GetArg("id")} and will be active on next restart."); _logs.logMessage("Info", "commandsSystem.setPrefix", $"Commands prefix was changed to {e.GetArg("id")}.", e.User.Name); } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.setPrefix", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("about") .Alias("about") .Description("Returns with github infomation.\rPermission: Everyone") .Parameter("id", ParameterType.Optional) .MinPermissions((int)PermissionLevel.GroupUsers) .Do(async e => { try { await e.Channel.SendMessage($"Here is my current documentation.\rGetting Started: soon\rCommands: <https://github.com/luther38/DiscordMusicBot/wiki/Commands>"); _logs.logMessage("Info", "commandsSystem.about", "User requested help docs.", e.User.Name); } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.about", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("export") .Alias("export") .Description($"Exports current files based on given arg.\r{_config.Prefix}export playlist\r{_config.Prefix}export blacklist\r{_config.Prefix}export log = Running log file.\rPermission: Mods") .Parameter("file", ParameterType.Optional) .MinPermissions((int)PermissionLevel.GroupAdmin) .Do(async e => { try { string argFile = e.GetArg("file"); Channel userPM = await e.User.CreatePMChannel(); switch (argFile) { case "playlist": case "pl": bool plExport = _system.cmd_plExport(); if (plExport == true) { await userPM.SendFile(Directory.GetCurrentDirectory() + "\\configs\\playlist_export.json"); await e.Channel.SendMessage($"{e.User.Name},\rPlease check the PM that I sent you for your file request."); File.Delete(Directory.GetCurrentDirectory() + "\\configs\\playlist_export.json"); _logs.logMessage("Info", "commandsSystem.Export Playlist", "User requested the playlist file.", e.User.Name); } else { await e.Channel.SendMessage("Error generating file.\rPlease inform the server owner for more infomation."); } break; case "blacklist": case "bl": bool blExport = _system.cmd_blExport(); if (blExport == true) { await userPM.SendFile(Directory.GetCurrentDirectory() + "\\configs\\blacklist_export.json"); await e.Channel.SendMessage($"{e.User.Name},\rPlease check the PM that I sent you for your file request."); File.Delete(Directory.GetCurrentDirectory() + "\\configs\\blacklist_export.json"); _logs.logMessage("Info", "commandsSystem.Export Blacklist", "User requested the blacklist file.", e.User.Name); } else { await e.Channel.SendMessage("Error generating file.\rPlease inform the server owner for more infomation."); } break; case "log": await userPM.SendFile(Directory.GetCurrentDirectory() + "\\logs.txt"); await e.Channel.SendMessage($"{e.User.Name},\rPlease check the PM that I sent you for your file request."); _logs.logMessage("Info", "commandsSystem.Export log", "User requested the log file.", e.User.Name); break; case "config": await userPM.SendFile(Directory.GetCurrentDirectory() + "\\configs\\config.json"); await e.Channel.SendMessage($"{e.User.Name},\rPlease check the PM that I sent you for your file request."); _logs.logMessage("Info", "commandsSystem.Export config", "User requested the config file.", e.User.Name); break; default: await e.Channel.SendMessage($"Invalid arguemnt found!\rPlease use one of the following.\r{_config.Prefix}export pl = Playlist\r{_config.Prefix}export bl = Blacklist\r{_config.Prefix}export log = Running log file."); break; } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.export", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("ping") .Alias("ping") .Description($"Exports current files based on given arg.\r{_config.Prefix}export playlist\r{_config.Prefix}export blacklist\r{_config.Prefix}export log = Running log file.\rPermission: Mods") .MinPermissions((int)PermissionLevel.GroupUsers) .Do(async e => { try { var t = e.Server.Region; long ping = _network.cmd_ping(t.Hostname); if (ping != -1) { await e.Channel.SendMessage($"{e.User.Name},\rDatacenter: {t.Name}\rPing: {ping}ms"); _logs.logMessage("Info", "commandSystem.ping", $"Datacenter: {t.Name} - Host IP: {t.Id} - Ping: {ping}ms", e.User.Name); } else { await e.Channel.SendMessage($"{e.User.Name}, Something happened and I was unable to ping the server. Please check the log for the dump info."); } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.ping", error.ToString(), e.User.Name); } }); _client.GetService <CommandService>().CreateCommand("maxSubmitted") .Alias("maxSub") .Description($"Changes the max number of tracks a user can submit to the queue.\r{_config.Prefix}maxSubmitted 10\rPermission: Admins") .Parameter("value", ParameterType.Optional) .MinPermissions((int)PermissionLevel.GroupAdmin) .Do(async e => { try { if (e.GetArg("value") == "") { await e.Channel.SendMessage($"{e.User.Name},\rMax Submitted: {_config.maxTrackSubmitted}"); } else { int value = -1; bool parseResult = int.TryParse(e.GetArg("value"), out value); if (parseResult == true) { if (value != -1) { _config.maxTrackSubmitted = value; _config.SaveFile(); await e.Channel.SendMessage($"{e.User.Name},\rI have adjusted the max number of submitted tracks to {e.GetArg("value")}."); } } else { await e.Channel.SendMessage($"{e.User.Name},\rPlease enter a number value to adjust the max number of tracks a user can submit."); } } } catch (Exception error) { _logs.logMessage("Error", "commandsSystem.maxSubmitted", error.ToString(), e.User.Name); } }); }); }