Ejemplo n.º 1
0
      static void Main(string[] args)
      {
        var client = new DiscordClient();

        //Display all log messages in the console
        client.LogMessage += (s, e) => Console.WriteLine($"[{e.Severity}] {e.Source}: {e.Message}");

        //Echo back any message received, provided it didn't come from the bot itself
        client.MessageReceived += async (s, e) =>
        {
          if (!e.Message.IsAuthor)
            await client.SendMessage(e.Channel, e.Message.Text);
        };

        //Convert our sync method to an async one and block the Main function until the bot disconnects
        client.Run(async () =>
        {
          //Connect to the Discord server using our email and password
          await client.Connect("*****@*****.**", "Password123");

          //If we are not a member of any server, use our invite code (made beforehand in the official Discord Client)
          if (!client.AllServers.Any())
            await client.AcceptInvite(client.GetInvite("aaabbbcccdddeee"));
        });
      }
Ejemplo n.º 2
0
        public void Install(ModuleManager manager)
        {
            _client = manager.Client;

            manager.CreateCommands("", group =>
            {
                //group.MinPermissions((int)PermissionLevel.User);

                group.CreateCommand("who")
                    .Description("picks a random online member")
                    .Do(async e =>
                    {
                        var onlineMembers = e.Channel.Members.Where(m => m.Status != UserStatus.Offline);
                        var random = new Random().Next(0, onlineMembers.Count());
                        var randomUser = onlineMembers.ElementAt(random);
                        var message = string.Format("{0}!", Mention.User(randomUser));

                        await _client.SendMessage(e.Message.Channel, message);
                    });

                group.CreateCommand("help")
                    .Description("sends a list of commands")
                    .Do(async e =>
                    {
                        await _client.SendMessage(e.Message.Channel, _client.Commands().AllCommands.ToDiscordMessage());
                    });

                group.CreateCommand("uptime")
                    .Description("shows how long the bot has been online for")
                    .Do(async e =>
                    {
                        var difference = DateTime.Now.Subtract(_botServices.Ticker.ConnectedOn);
                        var message = string.Format("I've been online for **{0}** days, **{1}** hours & **{2}** minutes.", difference.Days, difference.Hours, difference.Minutes);

                        await _client.SendMessage(e.Message.Channel, message);
                    });

                // https://discordapp.com/invite/0LOWyaMvOUdtZuYL VK
                group.CreateCommand("join")
                    .Description("requests the bot to join another server.")
                    .Parameter("invite url")
                    .Do(async e =>
                    {
                        var invite = await _client.GetInvite(e.Args[0]);
                        if (invite.IsRevoked)
                        {
                            return;
                        }

                        await _client.AcceptInvite(invite);
                    });

                group.CreateCommand("leave")
                    .Description("instructs the bot to leave this server.")
                    .Do(async e =>
                    {
                        await _client.SendMessage(e.Channel, $"Leaving~");
                        //await _client.LeaveServer(e.Server);
                    });
            });

            _client.MessageReceived += (s, e) =>
            { 
                if (e.Message.IsAuthor)
                    return;

                if (!e.Message.Text.StartsWith("!"))
                {
                    _botServices.Events.AddEvent(e.Message.Server, e.Message.Channel, e.Message.User, EventType.Message);
                }

                if (e.Message.MentionedUsers.Any())
                {
                    foreach(var mentionedUser in e.Message.MentionedUsers)
                    {
                        if (!Equals(mentionedUser, e.Message.User))
                        {
                            _botServices.Events.AddEvent(e.Message.Server, e.Message.Channel, mentionedUser, EventType.Mention);
                        }
                    }
                }
            };
        }
Ejemplo n.º 3
0
        private static void Start()
        {
            SettingsManager.Load();
            _client = new DiscordClient();
            _client.LogMessage += (s, e) =>
            {
                Console.WriteLine($"[{e.Severity}] {e.Source} => {e.Message}");
            };

            //Set up permissions
            _client.AddService(new BlacklistService());
            _client.AddService(new WhitelistService());
            _client.AddService(new PermissionLevelService((u, c) =>
            {
                if (u.Id == long.Parse(SettingsManager.OwnerID))
                    return (int)PermissionLevel.BotOwner;
                if (!u.IsPrivate)
                {
                    if (u == c.Server.Owner)
                        return (int)PermissionLevel.ServerOwner;

                    var serverPerms = u.GetServerPermissions();
                    if (serverPerms.ManageRoles)
                        return (int)PermissionLevel.ServerAdmin;
                    if (serverPerms.ManageMessages && serverPerms.KickMembers && serverPerms.BanMembers)
                        return (int)PermissionLevel.ServerMod;

                    var channelPerms = u.GetPermissions(c);
                    if (channelPerms.ManagePermissions)
                        return (int)PermissionLevel.ChannelAdmin;
                    if (channelPerms.ManageMessages)
                        return (int)PermissionLevel.ChannelMod;
                }
                return (int)PermissionLevel.User;
            }));

            //Set up commands
            var commands = _client.AddService(new CommandService(new CommandServiceConfig
            {
                CommandChar = '!',
                HelpMode = HelpMode.Private
            }));
            commands.RanCommand += (s, e) => Console.WriteLine($"[Command] {(e.Server == null ? "[Private]" : e.Server.ToString())  + "/" + e.Channel} => {e.Message}");
            commands.CommandError += (s, e) =>
            {
                string msg = e.Exception?.GetBaseException().Message;
                if (msg == null)
                {
                    {
                        switch (e.ErrorType)
                        {
                            case CommandErrorType.Exception:
                                msg = "Unknown error.";
                                break;
                            case CommandErrorType.BadPermissions:
                                msg = "You do not have permission to run this command.";
                                break;
                            case CommandErrorType.BadArgCount:
                                msg = "You provided the incorrect number of arguments for this command.";
                                break;
                            case CommandErrorType.InvalidInput:
                                msg = "Unable to parse your command, please check your input.";
                                break;
                            case CommandErrorType.UnknownCommand:
                                msg = "Unknown command.";
                                break;
                        }
                    }
                }
                if (msg != null)
                {
                    _client.SendMessage(e.Channel, $"Failed to complete command: {msg}");
                    Console.WriteLine($"[Error] Failed to complete command: {e.Command?.Text} for {e.User?.Name}");
                    Console.WriteLine($"Command failure: {msg}");
                }
                
            };
            //Set up modules
            var modules = _client.AddService(new ModuleService());
            



            //Boot up
            _client.Run(async () =>
            {
                while (true)
                {
                    try
                    {
                        await _client.Connect(SettingsManager.Email, SettingsManager.Password);
                        if (!_client.AllServers.Any())
                            await _client.AcceptInvite(_client.GetInvite("0nwaapOqh2LPqDL9").Result);
                        modules.Install(new Modules.SimpleCommands(), "Simple Commands", FilterType.Unrestricted);
                        modules.Install(new Modules.Chance(), "Dice Rolling", FilterType.Unrestricted);
                        break;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Login failed" + ex.ToString());
                    }
                }
            });
        }
Ejemplo n.º 4
0
        void IModule.Install(ModuleManager manager)
        {
            _manager = manager;
            _client = manager.Client;

            manager.CreateCommands("", group =>
            {
                group.MinPermissions((int)PermissionLevel.User);

                group.CreateCommand("join")
                    .Description("Requests the bot to join another server.")
                    .Parameter("invite url")
                    .MinPermissions((int)PermissionLevel.BotOwner)
                    .Do(async e =>
                    {
                        var invite = await _client.GetInvite(e.Args[0]);
                        if (invite == null)
                        {
                            await _client.Reply(e, $"Invite not found.");
                            return;
                        }
                        else if (invite.IsRevoked)
                        {
                            await _client.Reply(e, $"This invite has expired or the bot is banned from that server.");
                            return;
                        }

                        await invite.Accept();
                        await _client.Reply(e, $"Joined server.");
                    });
                group.CreateCommand("leave")
                    .Description("Instructs the bot to leave this server.")
                    .MinPermissions((int)PermissionLevel.ServerModerator)
                    .Do(async e =>
                    {
                        await _client.Reply(e, $"Leaving~");
                        await e.Server.Leave();
                    });

                group.CreateCommand("say")
                    .Parameter("Text", ParameterType.Unparsed)
                    .MinPermissions((int)PermissionLevel.BotOwner)
                    .Do(async e =>
                    {
                        await e.Channel.SendMessage(e.Message.Resolve(Format.Escape(e.Args[0])));
                    });
                group.CreateCommand("sayraw")
                    .Parameter("Text", ParameterType.Unparsed)
                    .MinPermissions((int)PermissionLevel.BotOwner)
                    .Do(async e =>
                    {
                        await e.Channel.SendMessage(e.Args[0]);
                    });

                group.CreateCommand("info")
                    .Alias("about")
                    .MinPermissions((int)PermissionLevel.BotOwner)
                    .Do(async e =>
                    {
                        await e.Channel.SendMessage(
                            $"{Format.Bold("Info")}\n" +
                            $"- Author: Voltana (ID 53905483156684800)\n" +
                            $"- Library: {DiscordConfig.LibName} ({DiscordConfig.LibVersion})\n" +
                            $"- Runtime: {GetRuntime()} {GetBitness()}\n" +
                            $"- Uptime: {GetUptime()}\n\n" +

                            $"{Format.Bold("Stats")}\n" +
                            $"- Heap Size: {GetHeapSize()} MB\n" +
                            $"- Servers: {_client.Servers.Count()}\n" +
                            $"- Channels: {_client.Servers.Sum(x => x.AllChannels.Count())}\n" +
                            $"- Users: {_client.Servers.Sum(x => x.Users.Count())}"
                        );
                    });
            });
        }
Ejemplo n.º 5
0
        void IModule.Install(ModuleManager manager)
        {
            _manager = manager;
            _client = manager.Client;

            manager.CreateCommands("", group =>
            {
                group.CreateCommand("whoami")
                .Description("Returns the user's ID")
                .Do(async e =>
                {
                    await WhoIs(e, e.User);
                });

                group.CreateCommand("whereami")
                .Description("Returns the channel and server's ID")
                .Do(async e =>
                {
                    await _client.SendMessage(e.Channel, $"You are currently in: {e.Server.Id}/{e.Channel.Id}");
                });

                group.CreateCommand("whois")
                .Description("Returns the user's ID")
                .Parameter("The user's Name")
                .Do(async e =>
                {
                    List<User> user = e.Channel.Members.Where(m => m.Name == e.Args[0]).ToList();
                    if (user.Any())
                        await WhoIs(e, user.First());

                });

                group.CreateCommand("join")
                .Description("Requests the bot to join a channel.")
                .Parameter("Instant Invite")
                .Do(async e =>
                {
                    var invite = await _client.GetInvite(e.Args[0]);
                    if (invite == null)
                    {
                        await _client.SendMessage(e.Channel, $"Invite not found.");
                        return;
                    }
                    else if (invite.IsRevoked)
                    {
                        await _client.SendMessage(e.Channel, $"The invite has expired or the bot is banned.");
                        return;
                    }

                    await _client.AcceptInvite(invite);
                    await _client.SendMessage(e.Channel, $"Joined the server.");
                });

                group.CreateCommand("leave")
                .Description("Requests the bot to get the f**k out.")
                .MinPermissions((int)PermissionLevel.ServerMod)
                .Do(async e =>
                {
                    await _client.SendMessage(e.Channel, $"Leaving channel.");
                    await _client.LeaveServer(e.Server);
                });

                group.CreateCommand("Clean up")
                .Description("Requests the bot to purge all his messages since the last reboot in the channel.")
                .MinPermissions((int)PermissionLevel.ServerAdmin)
                .Do(async e =>
                {
                    List<Message> myMessages = e.Channel.Messages.Where(m => m.User.Id == _client.CurrentUser.Id).ToList();
                    await _client.DeleteMessages(myMessages);
                });

                group.CreateCommand("Undo")
                .Description("Requests the bot to remove his last message.")
                .Do(async e =>
                {
                    Message lastMessage = e.Channel.Messages.Where(m => m.User.Id == _client.CurrentUser.Id).OrderByDescending(m => m.Timestamp).First();
                    await _client.DeleteMessage(lastMessage);
                });
            });
        }
Ejemplo n.º 6
0
        static void Main(string[] args)
        {
            // Load up the DB, or create it if it doesn't exist
            SQL.LoadDB();
            // Load up the config file
            LoadConfig();

            Console.Title = $"Nekobot v{version}";
            // Load the stream channels
            Music.LoadStreams();
            // Initialize rest client
            RCInit();

            client = new DiscordClient(new DiscordClientConfig
            {
                AckMessages = true,
                LogLevel = LogMessageSeverity.Verbose,
                TrackActivity = true,
                UseMessageQueue = false,
                UseLargeThreshold = true,
                EnableVoiceMultiserver = true,
                VoiceMode = DiscordVoiceMode.Outgoing,
            });

            // Set up the events and enforce use of the command prefix
            commands.CommandError += CommandError;
            client.Connected += Connected;
            client.Disconnected += Disconnected;
            client.UserJoined += UserJoined;
            client.LogMessage += LogMessage;
            client.AddService(commands);
            client.AddService(new PermissionLevelService(GetPermissions));
            commands.CreateGroup("", group => GenerateCommands(group));
            commands.NonCommands += Chatbot.Do;
            // Load the chatbots
            Chatbot.Load();
            // Keep the window open in case of crashes elsewhere... (hopefully)
            Thread input = new Thread(InputThread);
            input.Start();
            // Connection, join server if there is one in config, and start music streams
            try
            {
                client.Run(async() =>
                {
                    await client.Connect(config["email"].ToString(), config["password"].ToString());
                    if (config["server"].ToString() != "")
                    {
                        await client.AcceptInvite(client.GetInvite(config["server"].ToString()).Result);
                    }
                    await Music.StartStreams();
                });
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error: {e.GetBaseException().Message}");
            }
        }