public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("rolesid", "Rolls.", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { DiscordMember member = cmdArgs.Channel.Parent.Members.First(x => x.Value.ID == cmdArgs.Args[0]).Value; if(member != null) { cmdArgs.Channel.SendMessage($"```\n{RolesToString(member.Roles)}\n```"); } } }), this); manager.AddCommand(new CommandStub("roles", "Rolls.", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { DiscordMember member = cmdArgs.Channel.Parent.Members.First(x => x.Value.Username == cmdArgs.Args[0]).Value; if (member != null) { cmdArgs.Channel.SendMessage($"```\n{RolesToString(member.Roles)}\n```"); } } }), this); manager.AddCommand(new CommandStub("userswithname", "yay", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { string msg = "**Users with passed Username in this Server**\n\n"; foreach(var member in cmdArgs.Channel.Parent.Members) { if (member.Value.Username.ToLower() == cmdArgs.Args[0].ToLower()) msg += $"* {member.Value.Username} ({member.Value.ID})"; } cmdArgs.Channel.SendMessage(msg); } }), this); manager.AddCommand(new CommandStub("rename", "Renames the bot.", "", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { var userInfo = manager.Client.ClientPrivateInformation; userInfo.Username = cmdArgs.Args[0]; try { manager.Client.ChangeClientInformation(userInfo); } catch(Exception ex) { cmdArgs.Channel.SendMessage($"Error occured while renaming: {ex.Message}"); } } }), this); }
public override void Install(CommandsManager manager) { /** cool hack */ manager.Client.GuildUpdated += (sender, e) => { Console.WriteLine($"[TestServerLog Module] Guild update. Old guild name: {e.OldServer.Name}"); if(DiscordSharpTestServer != null) { if (e.NewServer.ID == DiscordSharpTestServer.ID) //test server { Console.WriteLine($"[TestServerLog Module] Posting comparison."); string msg = $"**Server Update**\n"; msg += $"\n**Name: **: {e.OldServer.Name} -> {e.NewServer.Name}"; msg += $"\n**Icon:** <{e.OldServer.IconURL}> -> <{e.OldServer.IconURL}>"; msg += $"\n**ID:** {e.NewServer.ID}"; msg += $"\n**Owner: ** {e.OldServer.Owner.ID} -> {e.NewServer.Owner.ID}"; msg += $"\n**Region: ** {e.OldServer.Region} -> {e.NewServer.Region}"; msg += $"\n**Users Online: **"; foreach (var user in DiscordSharpTestServer.Members) { if (user.Value != null && user.Value.Status == Status.Online) msg += $"{user.Value.Username}, "; } msg += "\n------------------------------"; LogChannel.SendMessage(msg); DiscordSharpTestServer = e.NewServer; } } }; manager.Client.ChannelUpdated += (sender, e) => { if (LogChannel != null && DiscordSharpTestServer != null) { if (e.NewChannel.Parent.ID == DiscordSharpTestServer.ID) { string msg = $"**Channel Update**\n"; msg += $"\n**Name: ** {e.OldChannel.Name} -> {e.NewChannel.Name}"; msg += $"\n**Topic:** {e.OldChannel.Topic} -> {e.NewChannel.Topic}"; msg += $"\n**ID:** {e.NewChannel.ID}"; msg += $"\n**Users Online: **"; foreach (var user in DiscordSharpTestServer.Members) { if (user.Value != null && user.Value.Status == Status.Online) msg += $"{user.Value.Username}, "; } msg += "\n------------------------------"; LogChannel.SendMessage(msg); } } }; }
/// <summary> /// Uninstall's this modules's commands from the given module manager. /// </summary> /// <param name="manager"></param> public void Uninstall(CommandsManager manager) { lock (manager.Commands) { foreach (var command in manager.Commands) { var thisModulesCommand = Commands.Select(x => x.ID == command.Value.ID && x.Parent.Name == Name); if (thisModulesCommand != null) manager.Commands.Remove(command.Key); } } }
/// <summary> /// Uninstall's this modules's commands from the given module manager. /// </summary> /// <param name="manager"></param> public void Uninstall(CommandsManager manager) { lock (manager.Commands) { foreach (var command in manager.Commands) { var thisModulesCommand = Commands.Find(x => x.ID == command.ID && x.Parent.Name == this.Name); //compare modules by name just in case if (thisModulesCommand != null) manager.Commands.Remove(command); } } }
public override void Install(CommandsManager manager) { manager.Client.MessageReceived += (sender, e) => { if(e.Author.ID == "72465239836196864" || e.Author.ID == "78703938047582208") //if it's me or uniqu0 { if(e.Message.Content.Trim().ToLower() == "hol up" || e.Message.Content.Trim().ToLower() == "holup") { e.Channel.SendMessage("we dem"); } } }; }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("f", "Pay respect.", "Press f", PermissionType.User, 0, cmdArgs => { manager.Integration.SendMessage($"{cmdArgs.Author.Name} has paid their respects {FEmojis[rng.Next(0, FEmojis.Length - 1)]}", cmdArgs.Channel); }), this); manager.AddCommand(new CommandStub("orange", "Orangifies your text.", "Discord only.", PermissionType.User, 1, cmdArgs => { if (cmdArgs.FromIntegration.ToLower().Trim() == "discord") { manager.Integration.SendMessage($"```fix\n{cmdArgs.Args[0]}\n```", cmdArgs.Channel); } else manager.Integration.SendMessage($"This command is only available on Discord!", cmdArgs.Channel); })); manager.AddCommand(new CommandStub("nf", "Pay no respect.", "Press nf", PermissionType.User, cmdArgs => { manager.Integration.SendMessage($"{cmdArgs.Author.Name} refuses to pay respect. {FEmojis[manager.rng.Next(0, FEmojis.Length - 1)]}", cmdArgs.Channel); }), this); manager.AddCommand(new CommandStub("8ball", "Have your fortune told.", "8ball <your message here>", PermissionType.User, cmdArgs => { manager.rng.Next(0, EightballMessages.Length); manager.rng.Next(0, EightballMessages.Length); int index = manager.rng.Next(0, EightballMessages.Length); manager.Integration.SendMessage($"{cmdArgs.Author.Mention()}: {manager.Integration.BoldText(EightballMessages[index])}", cmdArgs.Channel); }), this); manager.AddCommand(new CommandStub("42", "..", "...", PermissionType.User, cmdArgs => { manager.Integration.SendMessage("The answer to life, the universe, and everything.", cmdArgs.Channel); }), this); manager.AddCommand(new CommandStub("khaled", "Anotha one.", "", cmdArgs => { if (manager.rng == null) { Console.WriteLine("RNG null?!"); manager.rng = new Random((int)DateTime.Now.Ticks); } var quote = KhaledQuotes[manager.rng.Next(0, KhaledQuotes.Length - 1)]; manager.Integration.SendMessage($"{manager.Integration.BoldText(manager.Integration.ItalicizeText(quote))}", cmdArgs.Channel); }), this); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("ygo", "Retrieves information for a Yu-Gi-Oh card from the YugiohPrices database.", "Card names are (unfortunately) case sensitive.\n\n**Valid:** Dark Magician\n**Invalid: **dark magician", PermissionType.User, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { YugiohPricesSearcher searcher = new YugiohPricesSearcher(); try { cmdArgs.Channel.SimulateTyping(); var card = searcher.GetCardByName(cmdArgs.Args[0]).Result; if (card.Name != "<NULL CARD>") { card.CardImage.Save("ygotemp.png"); string message = $"**{card.Name}**"; if (card.Type == CardType.Monster) message += $" Level: {card.Level} Attribute: {card.Attribute}\n"; else message += "\n"; message += $"**Description:** {card.Description}"; if (card.Type == CardType.Monster) message += $"\n**Type:** {card.MonsterType}\n**ATK/DEF:** {card.Attack}/{card.Defense}"; manager.Client.AttachFile(cmdArgs.Channel, message, "ygotemp.png"); } else cmdArgs.Channel.SendMessage("Couldn't find that specified card!"); } catch (AggregateException ex) { ex.Handle((x) => { cmdArgs.Channel.SendMessage("Couldn't find that specified card! (" + x.Message + ")"); return true; }); } } }), this); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("gtfo", "Makes the bot leave the server", "", PermissionType.User, cmdArgs => { bool canExecute = false; foreach (var roll in cmdArgs.Author.Roles) if (roll.Permissions.HasPermission(DiscordSpecialPermissions.ManageServer)) canExecute = true; if (cmdArgs.Author.Equals(mainEntry.owner)) canExecute = true; if (canExecute) { if (cmdArgs.Channel.Parent.Owner.Equals(manager.Client.Me)) { manager.Client.DeleteServer(cmdArgs.Channel.Parent); } else manager.Client.LeaveServer(cmdArgs.Channel.Parent); } else cmdArgs.Channel.SendMessage("You don't have the proper permissions to do this! You need the ManagerServer permission."); }), this); }
public override void Install(CommandsManager manager) { //manager.Client will return the associated discord client manager.AddCommand(new CommandStub("orange", "Orangifies your text.", "", PermissionType.User, 1, cmdArgs => { cmdArgs.Channel.SendMessage($"```fix\n{cmdArgs.Args[0]}\n```"); }), this); manager.AddCommand(new CommandStub("f", "Pay respect.", "Press f", PermissionType.User, cmdArgs => { cmdArgs.Channel.SendMessage($"{cmdArgs.Author.Username} has paid their respects. {FEmojis[manager.rng.Next(0, FEmojis.Length - 1)]}"); }), this); manager.AddCommand(new CommandStub("nf", "Pay no respect.", "Press nf", PermissionType.User, cmdArgs => { cmdArgs.Channel.SendMessage($"{cmdArgs.Author.Username} refuses to pay respect. {FEmojis[manager.rng.Next(0, FEmojis.Length - 1)]}"); }), this); manager.AddCommand(new CommandStub("8ball", "Have your fortune told.", "8ball <your message here>", PermissionType.User, cmdArgs => { manager.rng.Next(0, EightballMessages.Length); manager.rng.Next(0, EightballMessages.Length); int index = manager.rng.Next(0, EightballMessages.Length); cmdArgs.Channel.SendMessage($"<@{cmdArgs.Author.ID}>: **{EightballMessages[index]}**"); }), this); manager.AddCommand(new CommandStub("42", "..", "...", PermissionType.User, cmdArgs => { cmdArgs.Channel.SendMessage("The answer to life, the universe, and everything."); }), this); manager.AddCommand(new CommandStub("khaled", "Anotha one.", "", cmdArgs => { if (manager.rng == null) { Console.WriteLine("RNG null?!"); manager.rng = new Random((int)DateTime.Now.Ticks); } cmdArgs.Channel.SendMessage($"***{KhaledQuotes[manager.rng.Next(0, KhaledQuotes.Length - 1)]}***"); }), this); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("rolesid", "Rolls.", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { DiscordMember member = cmdArgs.Channel.Parent.Members.First(x => x.Value.ID == cmdArgs.Args[0]).Value; if(member != null) { cmdArgs.Channel.SendMessage($"```\n{RolesToString(member.Roles)}\n```"); } } }), this); manager.AddCommand(new CommandStub("roles", "Rolls.", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { DiscordMember member = cmdArgs.Channel.Parent.Members.First(x => x.Value.Username == cmdArgs.Args[0]).Value; if (member != null) { cmdArgs.Channel.SendMessage($"```\n{RolesToString(member.Roles)}\n```"); } } }), this); manager.AddCommand(new CommandStub("userswithname", "yay", "No mentions.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { string msg = "**Users with passed Username in this Server**\n\n"; foreach(var member in cmdArgs.Channel.Parent.Members) { if (member.Value.Username.ToLower() == cmdArgs.Args[0].ToLower()) msg += $"* {member.Value.Username} ({member.Value.ID})"; } cmdArgs.Channel.SendMessage(msg); } }), this); manager.AddCommand(new CommandStub("rename", "Renames the bot.", "", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { var userInfo = manager.Client.ClientPrivateInformation; userInfo.Username = cmdArgs.Args[0]; try { manager.Client.ChangeClientInformation(userInfo); } catch(Exception ex) { cmdArgs.Channel.SendMessage($"Error occured while renaming: {ex.Message}"); } } }), this); manager.AddCommand(new CommandStub("info", "Displays info for a user.", "", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { var user = cmdArgs.Channel.Parent.GetMemberByKey(cmdArgs.Args[0].Trim(new char[] { '<', '@', '!', '>' })); if (user != null) { string msg = $"Info for {user.Username}\n```\n"; msg += $"Username: {user.Username}\nID: {user.ID}"; if (user.Nickname != null || user.Nickname.Trim() != "") msg += $"\nNickname: {user.Nickname}"; msg += $"\nDiscrim: {user.Discriminator}"; if(user.CurrentGame != null) { msg += $"\nCurrent Game: {user.CurrentGame}"; if(user.Streaming) { msg += $"\nStreaming at: {user.StreamURL}"; } } msg += $"\n```"; cmdArgs.Channel.SendMessage(msg); } } })); manager.AddCommand(new CommandStub("changemynick", "Changes your nickname.", "Needs appropriate permissions.", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { var meInServer = cmdArgs.Channel.Parent.GetMemberByKey(manager.Client.Me.ID); if(meInServer != null) { if(meInServer.HasPermission(DiscordSpecialPermissions.ManageNicknames)) { cmdArgs.Author.ChangeNickname(cmdArgs.Args[0]); } } } })); }
private Task SetupEvents(CancellationToken token) { Console.ForegroundColor = ConsoleColor.White; return Task.Run(() => { client.MessageReceived += (sender, e) => { if(owner == null) owner = client.GetServersList().Find(x => x.GetMemberByKey(config.OwnerID) != null).GetMemberByKey(config.OwnerID); //prays if (e.Author == null) { string msg = $"Author had null id in message received!\nRaw JSON:\n```\n{e.RawJson}\n```\n"; msg += $"Args\nChannel: {e.Channel.Name}/{e.Channel.ID}\nMessage: {e.Message}"; try { owner.SlideIntoDMs(msg); } catch { } } else { Console.WriteLine($"[-- Message from {e.Author.Username} in #{e.Channel.Name} on {e.Channel.Parent.Name}: {e.Message.Content}"); if (doingInitialRun) { if (e.Message.Content.StartsWith("?authenticate")) { string[] split = e.Message.Content.Split(new char[] { ' ' }, 2); if (split.Length > 1) { if (codeToEnter.Trim() == split[1].Trim()) { config.OwnerID = e.Author.ID; doingInitialRun = false; e.Channel.SendMessage("Authentication successful! **You are now my owner, " + e.Author.Username + ".**"); CommandsManager.AddPermission(e.Author, PermissionType.Owner); owner = e.Author; } } } } else { if (e.Message.Content.Length > 0 && (e.Message.Content[0] == config.CommandPrefix)) { string rawCommand = e.Message.Content.Substring(1); try { CommandsManager.ExecuteOnMessageCommand(rawCommand, e.Channel, e.Author); } catch (UnauthorizedAccessException ex) { e.Channel.SendMessage(ex.Message); } catch(ModuleNotEnabledException x) { e.Channel.SendMessage($"{x.Message}"); } catch (Exception ex) { e.Channel.SendMessage("Exception occurred while running command:\n```" + ex.Message + "\n```"); } } } //Now, for fun. //if(e.author == owner) //{ // if (StringContainsObjectInArray(e.message.content.ToLower(), NaughtyWords)) // { // try // { // var msg = client.GetMessageLog()[client.GetMessageLog().Count - 1].Value; // if (msg.author == owner // && client.GetLastMessageSent(e.Channel).content != null && // client.GetLastMessageSent(e.Channel).content != "hey now") // { // //if(msg.timestamp.AddMinutes(1) < DateTime.Now) // int timebetween = (DateTime.Now.Minute - msg.timestamp.Minute); // if ((timebetween < 1) && (timebetween > -1)) //less than one minute between his message and my vulgarity // e.Channel.SendMessage("hey now"); // } // } // catch { } // } //} if(e.Channel.ID == "91265608326324224") //discord-sharp on discordapi { if(e.Author != owner) { if(e.Message.Content != null && e.Message.Content.ToLower().Contains("how")) { if(e.Message.Content.ToLower().Contains("bot") && e.Message.Content.ToLower().Contains("tag")) { e.Channel.SendMessage($"<#124294271900712960>");//#api-changes } } } } } }; client.VoiceClientDebugMessageReceived += (sender, e) => { if(e.message.Level != MessageLevel.Unecessary) Console.WriteLine($"[{e.message.Level} {e.message.TimeStamp.ToString()}] {e.message.Message}"); }; client.VoiceClientConnected += (sender, e) => { try { owner.SlideIntoDMs($"Voice connection complete."); } catch { } //player = new AudioPlayer(client.GetVoiceClient().VoiceConfig); //bufferedWaveProvider = new BufferedWaveProvider(waveFormat); //bufferedWaveProvider.BufferDuration = new TimeSpan(0, 0, 50); //volumeProvider = new VolumeWaveProvider16(bufferedWaveProvider); //volumeProvider.Volume = 1.1f; //outputDevice.Init(volumeProvider); //stutterReducingTimer = new System.Timers.Timer(500); //stutterReducingTimer.Elapsed += StutterReducingTimer_Elapsed; //PlayAudioAsync(cancelToken); }; client.AudioPacketReceived += (sender, e) => { if(bufferedWaveProvider != null) { byte[] potential = new byte[4000]; int decodedFrames = client.GetVoiceClient().Decoder.DecodeFrame(e.OpusAudio, 0, e.OpusAudioLength, potential); bufferedWaveProvider.AddSamples(potential, 0, decodedFrames); } }; client.GuildCreated += (sender, e) => { if(owner == null) owner = client.GetServersList().Find(x => x.GetMemberByKey(config.OwnerID) != null).GetMemberByKey(config.OwnerID); Console.WriteLine($"Joined server {e.Server.Name} ({e.Server.ID})"); try { owner.SlideIntoDMs($"Joined server {e.Server.Name} ({e.Server.ID})"); } catch { } }; client.GuildAvailable += (sender, e) => { Console.WriteLine($"Guild {e.Server.Name} became available."); }; client.SocketClosed += (sender, e) => { Console.Title = "Luigibot - Discord - Socket Closed.."; if(!actuallyExit) { WriteError($"\n\nSocket Closed Unexpectedly! Code: {e.Code}. Reason: {e.Reason}. Clear: {e.WasClean}.\n\n"); Console.WriteLine("Waiting 6 seconds to reconnect.."); Thread.Sleep(6 * 1000); LetsGoAgain(); } else { Console.WriteLine($"Shutting down ({e.Code}, {e.Reason}, {e.WasClean})"); } }; client.UnknownMessageTypeReceived += (sender, e) => { if (!Directory.Exists("dumps")) Directory.CreateDirectory("dumps"); string message = $"Ahoy! An unknown message type `{e.RawJson["t"].ToString()}` was discovered with the contents: \n\n"; message += $"```\n{e.RawJson.ToString()}\n```\nIt's been dumped to `dumps/{e.RawJson["t"].ToString()}.json` for your viewing pleasure."; string filename = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}dumps{Path.DirectorySeparatorChar}{e.RawJson["t"].ToString()}.json"; if(!File.Exists(filename)) { File.WriteAllText(e.RawJson.ToString(), filename); try { owner.SlideIntoDMs(message); } catch { } } }; client.TextClientDebugMessageReceived += (sender, e) => { if (e.message.Level == MessageLevel.Error || e.message.Level == MessageLevel.Critical) { WriteError($"(Logger Error) {e.message.Message}"); try { owner.SlideIntoDMs($"Bot error ocurred: ({e.message.Level.ToString()})```\n{e.message.Message}\n```"); } catch { } } if (e.message.Level == MessageLevel.Warning) WriteWarning($"(Logger Warning) {e.message.Message}"); }; client.Connected += (sender, e) => { Console.Title = "Luigibot - Discord - Logged in as " + e.User.Username; Console.WriteLine("Connected as " + e.User.Username); if (!String.IsNullOrEmpty(config.OwnerID)) { } else { doingInitialRun = true; RandomCodeGenerator rcg = new RandomCodeGenerator(); codeToEnter = rcg.GenerateRandomCode(); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Important: "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("\tPlease authenticate yourself as owner by typing the following into any Discord server you and the bot are in: "); Console.WriteLine($"\t{config.CommandPrefix}authenticate " + codeToEnter); } CommandsManager = new CommandsManager(client); if (File.Exists("permissions.json")) { var permissionsDictionary = JsonConvert.DeserializeObject<Dictionary<string, PermissionType>>(File.ReadAllText("permissions.json")); if (permissionsDictionary == null) permissionsDictionary = new Dictionary<string, PermissionType>(); if(permissionsDictionary.Count == 0 && owner != null) permissionsDictionary.Add(owner.ID, PermissionType.Owner); CommandsManager.OverridePermissionsDictionary(permissionsDictionary); } SetupCommands(); if(config.ModulesDictionary != null) { CommandsManager.OverrideModulesDictionary(config.ModulesDictionary); } //client.UpdateCurrentGame($"DiscordSharp {typeof(DiscordClient).Assembly.GetName().Version.ToString()}"); }; if(client.SendLoginRequest() != null) { client.Connect(); } }, token); }
private void SetupCommands(CommandsManager manager) { BaseOwnerModule owner = new BaseOwnerModule(this); owner.Install(manager); FunModule fModule = new FunModule(); fModule.Install(manager); }
private void IntegrationSetup(string integrationKey, string integrationPath) { var theIntegration = GetIntegration(integrationPath); CommandManagers[integrationKey] = new CommandsManager(theIntegration); if(!RequiresVerification) { CommandManagers[integrationKey].AddPermission(Configuration.Owners[integrationKey], PermissionType.Owner); } SetupCommands(CommandManagers[integrationKey]); theIntegration.MessageReceived += (sender, e) => { var formatted = $"Message received from {e.Member.Name} in #{e.Channel.Name}: {e.Text}"; IO.Log(theIntegration.IntegrationName, theIntegration.LogColor, formatted); if (e.Text.Length > 0 && e.Text[0] == Configuration.Prefixes[integrationKey]) { try { CommandManagers[integrationKey].ExecuteOnMessageCommand(e.Text.Substring(1), e.Channel, e.Member); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.BackgroundColor = ConsoleColor.White; Console.WriteLine($"Error in commands for integration {integrationKey}: {ex.Message}\n\t{ex.StackTrace}"); Console.ForegroundColor = ConsoleColor.White; Console.BackgroundColor = ConsoleColor.Black; theIntegration.SendMessage($"Error: `{ex.Message}`", e.Channel); } } if(RequiresVerification) { if(e.Text.Length > 0 && e.Text.StartsWith("?authenticate")) { if (Verification(e.Text, e.Member, integrationKey)) theIntegration.SendMessage("Verified!", e.Channel); } } }; theIntegration.Connected += (sender, e) => { IO.Log(theIntegration.IntegrationName, theIntegration.LogColor, "Connected!"); }; theIntegration.ConnectionClosed += (sender, e) => { var formatted = $""; IO.Log(theIntegration.IntegrationName, ConsoleColor.Red, formatted); }; IntegrationProcesses[integrationKey] = theIntegration; IntegrationProcesses[integrationKey].StartIntegration(); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { mainEntry.Exit(); }), this); manager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); manager.AddPermission(id, type); e.Channel.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!"); } }), this); manager.AddCommand(new CommandStub("disablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs=> { if(cmdArgs.Args[0].Length > 0) { if (!manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessage("Module already disabled!"); return; } try { manager.DisableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessage($"Disabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessage($"Couldn't disable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessage("What module?"); } }), this); manager.AddCommand(new CommandStub("enablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if(manager.ModuleEnabled(cmdArgs.Args[0])) { cmdArgs.Channel.SendMessage("Module already enabled!"); return; } try { manager.EnableModule(cmdArgs.Args[0]); cmdArgs.Channel.SendMessage($"Enabled {cmdArgs.Args[0]}."); } catch (Exception ex) { cmdArgs.Channel.SendMessage($"Couldn't enable module! {ex.Message}"); } } else { cmdArgs.Channel.SendMessage("What module?"); } }), this); manager.AddCommand(new CommandStub("modules", "Lists all the modules and whether or not they're enabled.", "", PermissionType.Owner, cmdArgs => { string msg = $"**Modules**"; foreach(var kvp in manager.Modules) { msg += $"\n`{kvp.Key.Name}` - {kvp.Value.ToString()}"; } cmdArgs.Channel.SendMessage(msg); })); manager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { char oldPrefix = mainEntry.config.CommandPrefix; try { char newPrefix = cmdArgs.Args[0][0]; mainEntry.config.CommandPrefix = newPrefix; cmdArgs.Channel.SendMessage($"Command prefix changed to **{mainEntry.config.CommandPrefix}** successfully!"); } catch (Exception) { cmdArgs.Channel.SendMessage($"Unable to change prefix to `{cmdArgs.Args[0][0]}`. Falling back to `{oldPrefix}`."); mainEntry.config.CommandPrefix = oldPrefix; } } else cmdArgs.Channel.SendMessage("What prefix?"); })); manager.AddCommand(new CommandStub("prune", "Prunes the specified amount of messages.", "If the bot has the role `ManagerMessages`, he will prune other messages in chat.", PermissionType.Owner, 1, cmdArgs => { int messageCount = 0; if (int.TryParse(cmdArgs.Args[0], out messageCount)) { var messagesToPrune = manager.Client.GetMessageHistory(cmdArgs.Channel, messageCount); DiscordMember selfInServer = cmdArgs.Channel.Parent.GetMemberByKey(manager.Client.Me.ID); bool pruneAll = false; if (selfInServer != null) { foreach (var roll in selfInServer.Roles) { if (roll.Permissions.HasPermission(DiscordSpecialPermissions.ManageMessages)) { pruneAll = true; break; } } foreach(var roll in cmdArgs.Channel.PermissionOverrides) { if(roll.id == manager.Client.Me.ID) { if(roll.AllowedPermission(DiscordSpecialPermissions.ManageMessages)) { pruneAll = true; break; } } } } foreach (var msg in messagesToPrune) { if (!pruneAll) { if (msg.Author.ID == manager.Client.Me.ID) { manager.Client.DeleteMessage(msg); Thread.Sleep(100); } } else { manager.Client.DeleteMessage(msg); Thread.Sleep(100); } } cmdArgs.Channel.SendMessage($"Attempted pruning of {messageCount} messages."); } })); manager.AddCommand(new CommandStub("flush", "Flushes various internal DiscordSharp caches.", "Flushes either `offline` or `messages`. \n `offline` as parameter will flush offline users from the current server.\n `messages` will flush the internal message log.", PermissionType.Owner, 1, cmdArgs => { if(cmdArgs.Args.Count > 0) { if(cmdArgs.Args[0].ToLower().Trim() == "offline") { int flushedCount = manager.Client.ClearOfflineUsersFromServer(cmdArgs.Channel.Parent); cmdArgs.Channel.SendMessage($"Flushed {flushedCount} offliners from {cmdArgs.Channel.Parent.Name}."); } else if(cmdArgs.Args[0].ToLower().Trim() == "messages") { int flushedCount = manager.Client.ClearInternalMessageLog(); cmdArgs.Channel.SendMessage($"Flushed {flushedCount} messages from the internal message log."); } } else { cmdArgs.Channel.SendMessage("Flush what? The toilet?"); } }), this); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("yt", "Streams a YouTube Video. Lewd.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { string url = cmdArgs.Args[0]; var youtube = YouTube.Default; var video = youtube.GetVideo(url); if (video.AudioFormat == AudioFormat.Mp3 || video.AudioFormat == AudioFormat.Vorbis) { SendVoice("", manager.Client, video); } else cmdArgs.Channel.SendMessage($"Tell Axiom not to get lazy and support other audio codecs besides MP3! (This was in {video.AudioFormat})"); } else cmdArgs.Channel.SendMessage($"wrong"); }), this); manager.AddCommand(new CommandStub("disconnect", "Disconnects from voice", "", PermissionType.Owner, 1, cmdArgs => { manager.Client.DisconnectFromVoice(); }), this); manager.AddCommand(new CommandStub("testvoice", "Broadcasts specified file over voice.", "", PermissionType.Owner, 1, cmdArgs => { if (File.Exists(cmdArgs.Args[0])) { if (manager.Client.ConnectedToVoice()) SendVoice(cmdArgs.Args[0], manager.Client); else cmdArgs.Channel.SendMessage("Not connected to voice!"); } else cmdArgs.Channel.SendMessage("Couldn't broadcast specified file! It doesn't exist!"); }), this); manager.AddCommand(new CommandStub("joinvoice", "Joins a specified voice channel", "Arg is case insensitive voice channel name to join.", PermissionType.Owner, 1, cmdArgs => { DiscordChannel channelToJoin = cmdArgs.Channel.Parent.Channels.Find(x => x.Name.ToLower() == cmdArgs.Args[0].ToLower() && x.Type == ChannelType.Voice); if (channelToJoin != null) { DiscordVoiceConfig config = new DiscordVoiceConfig { FrameLengthMs = 60, Channels = 1, OpusMode = DiscordSharp.Voice.OpusApplication.MusicOrMixed, SendOnly = true }; //waveFormat = new WaveFormat(48000, 16, config.Channels); //if (!config.SendOnly) //{ // waveCallbackInfo = WaveCallbackInfo.FunctionCallback(); // outputDevice = new WaveOut(); //} manager.Client.ConnectToVoiceChannel(channelToJoin, config); } else cmdArgs.Channel.SendMessage("Couldn't find the specified channel as a voice channel!"); }), this); manager.AddCommand(new CommandStub("stop", "Stops current voice without disconnecting.", "", PermissionType.Owner, cmdArgs => { if (manager.Client.GetVoiceClient() != null) { manager.Client.GetVoiceClient().ClearVoiceQueue(); } }), this); }
/// <summary> /// Installs the module's commands into the commands manager /// </summary> /// <param name="manager"></param> public abstract void Install(CommandsManager manager);
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("selfdestruct", "Shuts the bot down.", "", PermissionType.Owner, cmdArgs => { //mainEntry.Exit(); }), this); manager.AddCommand(new CommandStub("stopintegration", "Stops an integrations.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { if (cmdArgs.FromIntegration.ToLower().Trim() == cmdArgs.Args[0].ToLower().Trim()) { manager.Integration.SendMessage("You can't stop the integration you're running me from, silly!", cmdArgs.Channel); return; } mainEntry.StopIntegration(cmdArgs.Args[0]); } else manager.Integration.SendMessage("Stop what?", cmdArgs.Channel); })); manager.AddCommand(new CommandStub("startintegration", "Starts an integrations.", "", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args.Count > 0) { if (cmdArgs.FromIntegration.ToLower().Trim() == cmdArgs.Args[0].ToLower().Trim()) { manager.Integration.SendMessage("what kind of paradox are you trying to create", cmdArgs.Channel); return; } mainEntry.StartIntegration(cmdArgs.Args[0]); } else manager.Integration.SendMessage("Start what?", cmdArgs.Channel); })); manager.AddCommand(new CommandStub("giveperm", "Gives the perm to the specified user (bot scope)", "", PermissionType.Owner, 2, e => { //giveperm Admin <@2309208509852> if (e.Args.Count > 1) { string permString = e.Args[0]; PermissionType type = PermissionType.User; switch (permString.ToLower()) { case "admin": type = PermissionType.Admin; break; case "mod": type = PermissionType.Mod; break; case "none": type = PermissionType.None; break; case "user": type = PermissionType.User; break; } string id = e.Args[1].Trim(new char[] { '<', '@', '>' }); manager.AddPermission(id, type); manager.Integration.SendMessage($"Given permission {type.ToString().Substring(type.ToString().IndexOf('.') + 1)} to <@{id}>!", e.Channel); } }), this); manager.AddCommand(new CommandStub("disablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (!manager.ModuleEnabled(cmdArgs.Args[0])) { manager.Integration.SendMessage("Module already disabled!", cmdArgs.Channel); return; } try { manager.DisableModule(cmdArgs.Args[0]); manager.Integration.SendMessage($"Disabled {cmdArgs.Args[0]}.", cmdArgs.Channel); } catch (Exception ex) { manager.Integration.SendMessage($"Couldn't disable module! {ex.Message}", cmdArgs.Channel); } } else { manager.Integration.SendMessage("What module?", cmdArgs.Channel); } }), this); manager.AddCommand(new CommandStub("enablemodule", "Disables a module by name", "The module name is case insensitive.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.Args[0].Length > 0) { if (manager.ModuleEnabled(cmdArgs.Args[0])) { manager.Integration.SendMessage("Module already enabled!", cmdArgs.Channel); return; } try { manager.EnableModule(cmdArgs.Args[0]); manager.Integration.SendMessage($"Enabled {cmdArgs.Args[0]}.", cmdArgs.Channel); } catch (Exception ex) { manager.Integration.SendMessage($"Couldn't enable module! {ex.Message}", cmdArgs.Channel); } } else { manager.Integration.SendMessage("What module?", cmdArgs.Channel); } }), this); manager.AddCommand(new CommandStub("modules", "Lists all the modules and whether or not they're enabled.", "", PermissionType.Owner, cmdArgs => { string msg = $"**Modules**"; foreach (var kvp in manager.Modules) { msg += $"\n`{kvp.Key.Name}` - {kvp.Value.ToString()}"; } manager.Integration.SendMessage(msg, cmdArgs.Channel); })); manager.AddCommand(new CommandStub("changeprefix", "Changes the command prefix to a specified character.", "", PermissionType.Owner, 1, cmdArgs => { //if (cmdArgs.Args.Count > 0) //{ // char oldPrefix = mainEntry.config.CommandPrefix; // try // { // char newPrefix = cmdArgs.Args[0][0]; // mainEntry.config.CommandPrefix = newPrefix; // manager.Client.SendMessage($"Command prefix changed to **{mainEntry.config.CommandPrefix}** successfully!"); // } // catch (Exception) // { // manager.Client.SendMessage($"Unable to change prefix to `{cmdArgs.Args[0][0]}`. Falling back to `{oldPrefix}`."); // mainEntry.config.CommandPrefix = oldPrefix; // } //} //else // manager.Client.SendMessage("What prefix?"); })); manager.AddCommand(new CommandStub("flush", "Flushes various internal DiscordSharp caches.", "Flushes either `offline` or `messages`. \n `offline` as parameter will flush offline users from the current server.\n `messages` will flush the internal message log.", PermissionType.Owner, 1, cmdArgs => { if (cmdArgs.FromIntegration.ToLower().Trim() == "discord") { manager.Integration.SendMessage($"Coming soon!", cmdArgs.Channel); //if (cmdArgs.Args.Count > 0) //{ // if (cmdArgs.Args[0].ToLower().Trim() == "offline") // { // int flushedCount = manager.Client.ClearOfflineUsersFromServer(cmdArgs.Channel.Parent); // cmdArgs.Channel.SendMessage($"Flushed {flushedCount} offliners from {cmdArgs.Channel.Parent.Name}."); // } // else if (cmdArgs.Args[0].ToLower().Trim() == "messages") // { // int flushedCount = manager.Client.ClearInternalMessageLog(); // cmdArgs.Channel.SendMessage($"Flushed {flushedCount} messages from the internal message log."); // } //} //else //{ // cmdArgs.Channel.SendMessage("Flush what? The toilet?"); //} } }), this); manager.AddCommand(new CommandStub("about", "Shows bot information", "", cmdArgs => { string message = manager.Integration.BoldText("About Luigibot"); message += $"\nOwner: Mike Santiago\n"; message += $"Libraries: DiscordSharp {typeof(DiscordSharp.DiscordClient).Assembly.GetName().Version.ToString()}\n"; message += $" SlackAPI w/ WebSocketSharp {typeof(SlackAPI.SlackClient).Assembly.GetName().Version.ToString()}\n"; var uptime = (DateTime.Now - InitializeTime); message += $"Uptime: {uptime.Days} days, {uptime.Hours} hours, {uptime.Minutes} minutes\n"; message += $"Runtime: "; if (Type.GetType("Mono.Runtime") != null) message += "Mono\n"; else message += ".Net\n"; message += $"OS: {OperatingSystemDetermination.GetUnixName()}\n"; message += $"Current Integration: {manager.Integration.IntegrationName} ({manager.Integration.IntegrationDescription})\n"; message += "Commands: " + manager.Commands.Count + "\n"; manager.Integration.SendMessage(message, cmdArgs.Channel); })); }
public override void Install(CommandsManager manager) { manager.AddCommand(new CommandStub("eval", "Evaluates real-time C# code. Be careful with this", "Evaluates C# code that is dynamically compiled.\n\nThe following namespaces are available for use:\n * DiscordSharp\n * System.Threading\n * DiscordSharp.Objects\n\n\nMake sure your function returns a string value.\nYou can reference the DiscordSharp client by using `discordClient`.", PermissionType.User, 1, e => { bool canExec = false; if (manager.HasPermission(e.Author, PermissionType.Admin)) canExec = true; if (!canExec) { e.Channel.SendMessage("kek"); return; } string whatToEval = e.Args[0]; if (whatToEval.StartsWith("`") && whatToEval.EndsWith("`")) whatToEval = whatToEval.Trim('`'); try { var eval = EvalProvider.CreateEvalMethod<DiscordClient, string>(whatToEval, EvalNamespaces, new string[] { "DiscordSharp.dll", "System.Data.Linq.dll" }); string res = ""; Thread.Sleep(1000); Thread executionThread = null; Task evalTask = new Task(() => { executionThread = Thread.CurrentThread; if (eval != null) { try { res = eval(manager.Client); } catch (Exception ex) { res = "Exception occurred while running: " + ex.Message; } } else { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } e.Channel.SendMessage($"```\n{errors}\n```"); } else e.Channel.SendMessage("Errors!"); } }); evalTask.Start(); evalTask.Wait(10 * 1000); if (!runningOnMono) //causes exceptions apparently >.> if (executionThread != null) executionThread.Abort(); if (res == null || res == "") e.Channel.SendMessage("Terminated after 10 second timeout."); else e.Channel.SendMessage($"**Result**\n```\n{res}\n```"); } catch (Exception ex) { string errors = "Errors While Compiling: \n"; if (EvalProvider.errors != null) { if (EvalProvider.errors.Count > 0) { foreach (var error in EvalProvider.errors) { errors += $"{error.ToString()}\n\n"; } } else errors += ex.Message; e.Channel.SendMessage($"```\n{errors}\n```"); } else e.Channel.SendMessage($"Errors! {ex.Message}"); } }), this); manager.AddCommand(new CommandStub("lua", "Evals Lua code.", "WIP.", PermissionType.Admin, 1, cmdArgs => { string whatToEval = cmdArgs.Args[0]; if (whatToEval.StartsWith("`") && whatToEval.EndsWith("`")) { whatToEval = whatToEval.Trim('`'); if (whatToEval.StartsWith("\n")) whatToEval = whatToEval.Trim('\n'); } Lua state = new Lua(); bool isAdmin = false; if (manager.HasPermission(cmdArgs.Author, PermissionType.Admin)) { state["discordClient"] = manager.Client; state.LoadCLRPackage(); string importStatements = ""; foreach (var use in EvalNamespaces) importStatements += $"import('{use}')\n"; state.DoString(importStatements); isAdmin = true; } else { //state.DoString("import = function () end"); } state.DoString(CustomLuaFunctions); string prefix = isAdmin ? $"{whatToEval}" : $"return run({whatToEval});"; var res = state.DoString(prefix); string resultMessage = $"**Result: {res.Length}**\n```"; foreach (var obj in res) { resultMessage += $"\n{obj.ToString()}"; } resultMessage += "\n```"; if (res != null) cmdArgs.Channel.SendMessage($"{resultMessage}"); else cmdArgs.Channel.SendMessage($"No result given."); }), this); }