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);
                    }
                }
            };
        }
示例#3
0
 /// <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);
         }
     }
 }
示例#4
0
 /// <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);
         }
     }
 }
示例#5
0
 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");
             }
         }
     };
 }
示例#6
0
 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);
 }
示例#10
0
        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]);
                        }
                    }
                }
            }));
        }
示例#11
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);
        }
示例#15
0
        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);
        }
示例#16
0
 /// <summary>
 /// Installs the module's commands into the commands manager
 /// </summary>
 /// <param name="manager"></param>
 public abstract void Install(CommandsManager manager);
示例#17
0
        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);
            }));
        }
示例#18
0
        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);
        }