Пример #1
0
        static void Main(string[] args)
        {
            var systemsCollection = new SystemsCollection();

            systemsCollection.Add(new MoveSystem());

            var world  = new World();
            var player = new Entity();

            player.AddComponent(new PositionComponent());
            world.AddEntity(player);

            while (true)
            {
                systemsCollection.Update(world, 0);
            }
        }
Пример #2
0
        public override void Install(CommandsManager manager)
        {
            LoadSystemsDictionary();

            // Setup the one time listener for adding systems.
            manager.Client.MessageCreated += async(
                e) =>
            {
                if (WaitingOnInput)
                {
                    if (WaitingOnInputFrom.Id == e.Author.Id && WaitingChannel.Id == e.Channel.Id)
                    {
                        if (!e.Message.Content.Contains("addsystem")) //skip because this has already been handled.
                        {
                            Console.WriteLine($"[SystemsModule] Got input from correct person in correct channel {WaitingOnInputFrom.Id} == {e.Author.Id}");
                            try
                            {
                                if (SystemsDatabase.ContainsKey(e.Author.Id)) //we already have a systems collection for this user.
                                {
                                    Console.WriteLine("[SystemsModule] Already had one, added");
                                    SystemsDatabase[e.Author.Id].Add("System " + (SystemsDatabase[e.Author.Id].Count + 1), e.Message.Content);
                                }
                                else
                                {
                                    Console.WriteLine("[SystemsModule] Created one");
                                    SystemsCollection <string, string> collection = new SystemsCollection <string, string>();
                                    collection.UserSnowflake = e.Author.Id;

                                    string systemName = "System 1";
                                    if (!String.IsNullOrEmpty(PotentialSystemName))
                                    {
                                        systemName          = PotentialSystemName.Trim();
                                        PotentialSystemName = null;
                                    }
                                    collection.Add(systemName, e.Message.Content);
                                    SystemsDatabase.Add(e.Author.Id, collection);
                                }
                                //SystemsDatabase[e.Author.Id] = collection;
                                WaitingOnInput     = false;
                                WaitingOnInputFrom = null;
                                Console.WriteLine("[SystemsModule] Flushing");
                                //Might as well save after write, I don't pay for the SSD on the VPS...
                                FlushSystemsModule();

                                await e.Channel.SendMessageAsync("👌");
                            }
                            catch (Exception ex)
                            {
                                await e.Channel.SendMessageAsync("bro something is royally f****d: " + ex.Message);

                                Console.WriteLine("[SystemsModule] Exception details\n\n" + ex.Message + "\n\n" + ex.StackTrace + "\n\n");
                                WaitingOnInput     = false;
                                WaitingOnInputFrom = null;
                            }
                        }
                    }
                }
            };

            manager.AddCommand(new CommandStub("addsystem", "Adds your system to the database, simply follow the prompts. ", "addsystem", cmdArgs =>
            {
                if (cmdArgs.Args.Count > 1)
                {
                    PotentialSystemName = cmdArgs.Args[1];
                }
                else
                {
                    PotentialSystemName = null;
                }

                var m = cmdArgs.Channel.SendMessageAsync($"Please enter system specs");
                Console.WriteLine($"[SystemsModule] Waiting on input from {cmdArgs.Message.Author.Username}");
                WaitingOnInput     = true;
                WaitingOnInputFrom = cmdArgs.Message.Author;
                WaitingChannel     = cmdArgs.Message.Channel;
            }, argCount: 1), this);

            manager.AddCommand(new CommandStub("system", "get someone's specs (mention is optional)", "system <user>", cmdArgs =>
            {
                if (cmdArgs.Args.Count == 1)
                {
                    // Check if it's a mention and handle nicely
                    if (cmdArgs.Args[0].StartsWith("<@") && (cmdArgs.Args[0].EndsWith(">")))
                    {
                        ulong ID = ulong.Parse(cmdArgs.Args[0].Trim(new char[] { '<', '>', '@', '!' }));
                        List <DiscordMember> membersListAsList = new List <DiscordMember>(cmdArgs.Channel.Guild.Members);
                        DiscordMember member = membersListAsList.Find(x => x.Id == ID);

                        if (SystemsDatabase.ContainsKey(ID))
                        {
                            SystemsCollection <string, string> collection = SystemsDatabase[ID];
                            var first     = collection.First();
                            string system = first.Value;
                            // TODO come back in a sec
                            DiscordEmbedBuilder b = new DiscordEmbedBuilder();
                            b.WithAuthor(member.DisplayName, icon_url: member.AvatarUrl);
                            b.WithColor(DiscordColor.Purple);
                            b.AddField("System", system);

                            cmdArgs.Channel.SendMessageAsync(embed: b.Build());
                        }
                        else
                        {
                            cmdArgs.Channel.SendMessageAsync("Sorry! You're not in the database :c");
                        }
                    }
                    else
                    {
                        IReadOnlyList <DiscordMember> membersList = cmdArgs.Channel.Guild.Members;
                        if (membersList != null)
                        {
                            List <DiscordMember> membersListAsList = new List <DiscordMember>(membersList);
                            DiscordMember member = membersListAsList.Find(x => x.Username.Trim('@') == cmdArgs.Args[0].Trim());

                            if (member != null)
                            {
                                if (SystemsDatabase.ContainsKey(member.Id))
                                {
                                    SystemsCollection <string, string> collection = SystemsDatabase[member.Id];
                                    var first     = collection.First();
                                    string system = first.Value;
                                    //cmdArgs.Channel.SendMessageAsync($"**System for {member.DisplayName}**:\n\n{system}");

                                    DiscordEmbedBuilder b = new DiscordEmbedBuilder();
                                    b.WithAuthor(member.DisplayName, icon_url: member.AvatarUrl);
                                    b.WithColor(DiscordColor.Purple);
                                    b.AddField(first.Key, system);

                                    cmdArgs.Channel.SendMessageAsync(embed: b.Build());
                                }
                                else
                                {
                                    cmdArgs.Channel.SendMessageAsync("Sorry! Not in the database :c");
                                }
                            }
                        }
                    }
                }
                else //do it for self
                {
                    ulong ID = cmdArgs.Author.Id;
                    List <DiscordMember> membersListAsList = new List <DiscordMember>(cmdArgs.Channel.Guild.Members);
                    DiscordMember member = membersListAsList.Find(x => x.Id == ID);

                    if (SystemsDatabase.ContainsKey(ID))
                    {
                        SystemsCollection <string, string> collection = SystemsDatabase[ID];
                        var first     = collection.First();
                        string system = first.Value;
                        // TODO come back in a sec
                        DiscordEmbedBuilder b = new DiscordEmbedBuilder();
                        b.WithAuthor(member.DisplayName, icon_url: member.AvatarUrl);
                        b.WithColor(DiscordColor.Purple);
                        b.AddField(first.Key, system);

                        cmdArgs.Channel.SendMessageAsync(embed: b.Build());
                    }
                    else
                    {
                        cmdArgs.Channel.SendMessageAsync("Sorry! You're not in the database :c");
                    }
                }
            }, PermissionType.User, 1), this);

            manager.AddCommand(new CommandStub("removesystem", "remove your system", "removesystem", cmdArgs =>
            {
                ulong userID = cmdArgs.Message.Author.Id;

                try
                {
                    SystemsDatabase.Remove(userID);
                    cmdArgs.Channel.SendMessageAsync("👌");
                }
                catch (Exception ex)
                {
                    cmdArgs.Channel.SendMessageAsync("Unable to remove your system. Please tell an admin immediately, something is royally borked.\n\n```\n" +
                                                     ex.Message + "\n```");
                }
            }, PermissionType.User, 0), this);
        }