Ejemplo n.º 1
0
    static async Task Main()

    {
        Console.OutputEncoding = Encoding.UTF8;

        try
        {
            RestoreChain();
        }
        catch
        {
            Console.WriteLine("CAN'T READ FILE");
        }

        Console.WriteLine("Ready. \n" +
                          "start - Starts generation. Make sure that server is running \n" +
                          "save - Saves progress to file \n" +
                          "gen - Generates message \n" +
                          "exit - Saves progress to file and closes program \n" +
                          "logon - Turns on logs of server \n" +
                          "logoff - Turns off logs of server \n");
        while (true)
        {
            switch (Console.ReadLine())
            {
            case "start":
                StartGeneration();
                break;

            case "save":
                SerializeChain();
                Console.WriteLine("Saved!");
                break;

            case "gen":
                Console.BackgroundColor = ConsoleColor.White;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.WriteLine("GENERATED: " + _chain.GenerateSentence(new Random()));
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.White;
                break;

            case "exit":
                SerializeChain();
                Environment.Exit(0);
                break;

            case "logon":
                Console.WriteLine("Turned on!");
                log = true;
                break;

            case "logoff":
                Console.WriteLine("Turned off!");
                log = false;
                break;
            }
        }
    }
Ejemplo n.º 2
0
        public List <Command> Load()
        {
            List <Command> commands = new List <Command>();

            Command roll = new Command("roll");

            roll.Aliases.Add("dice");
            roll.Description = "Roll a specified number of dices. Defaults to 1d20 if no parameters";
            roll.Usage       = "roll [count]d[sides]";
            roll.WorksInDms  = true;
            roll.ToExecute  += async(context) =>
            {
                uint count = 1;
                uint sides = 20;
                int  add   = 0;
                if (!context.Parameters.IsEmpty()) // If there are any parameters
                {
                    string param = context.ParameterString.ToLower();
                    if (!param.Contains("d")) // it's just a number
                    {
                        if (!uint.TryParse(param, out count))
                        {
                            await context.Message.ReplyAsync("Input improperly formatted");

                            return;
                        }
                    }
                    else
                    {
                        if (!(param.Contains("+") || param.Contains("-"))) // There's no modifier
                        {
                            var list = param.Split('d');
                            if (!uint.TryParse(list[1], out sides))
                            {
                                await context.Message.ReplyAsync("Input improperly formatted");

                                return;
                            }
                            uint.TryParse(list[0], out count);
                            count = (count <= 1 ? 1 : count);
                        }
                        else
                        {
                            string c      = param.Split('d')[0];
                            string second = param.Split('d')[1];
                            string s      = "";
                            string a      = "";
                            if (param.Contains("+"))
                            {
                                s = second.Split('+')[0];
                                a = second.Split('+')[1];
                            }
                            else if (param.Contains("-"))
                            {
                                s = second.Split('-')[0];
                                a = second.Replace(s, "");
                            }

                            if (!(uint.TryParse(c, out count) && uint.TryParse(s, out sides) && int.TryParse(a, out add)))
                            {
                                await context.Message.ReplyAsync("Input improperly formatted");

                                return;
                            }
                        }
                    }
                }

                //if (count > 100)
                //{
                //    await context.Message.ReplyAsync("I don't think you can hold that many!");
                //    return;
                //}
                //if (sides < 2)
                //{
                //    await context.Message.ReplyAsync("You can't have a 1-sided dice!");
                //    return;
                //}
                //if (sides > 100)
                //{
                //    await context.Message.ReplyAsync("That's an awefully large dice, I can't hold that");
                //    return;
                //}
                RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
                List <int> results = new List <int>();
                while (results.Count < count)
                {
                    byte[] bytes = new byte[4];
                    crypto.GetNonZeroBytes(bytes);
                    long rand = Math.Abs(BitConverter.ToInt32(bytes, 0)) % sides;
                    results.Add((int)rand + 1 + add);
                }

                string res = $"{context.Author.Mention}, you rolled ";
                results.Sort();
                res += results.SumAnd();
                if (count > 1)
                {
                    res += $" with a total of {results.Sum()}";
                }
                await context.Message.ReplyAsync(res);
            };
            commands.Add(roll);



            Command say = new Command("say");

            say.Delete  = true;
            say.Aliases = new List <string> {
                "echo"
            };
            say.Description        = "Say something a contributor said";
            say.SendTyping         = false;
            say.RequiredPermission = Command.PermissionLevels.GlobalAdmin;
            say.Usage      = "say <phrase>";
            say.ToExecute += async(context) =>
            {
                ulong channelid = context.Channel.Id;
                if (ulong.TryParse(context.Parameters[0], out channelid))
                {
                    await((ITextChannel)Core.DiscordClient.GetChannel(channelid)).SendMessageAsync(context.ParameterString.Substring(context.ParameterString.IndexOf(' ')));
                    return;
                }
                else
                {
                    await context.Message.ReplyAsync(context.ParameterString.Substring(context.ParameterString.IndexOf(' ')));
                }
            };
            commands.Add(say);

            Command markov = new Command("markov");

            markov.Usage       = "markov";
            markov.Description = "generate a markov chain from the last 200 messages";
            markov.Delete      = true;
            markov.ToExecute  += async(context) =>
            {
                var messages = (context.Channel as SocketTextChannel).GetManyMessages(200);
                messages.AddRange(messages.Take(50));
                messages = messages.Where(m => m.Content.ToLower() != ">markov").ToList();

                var markovChain = new MarkovChain();
                markovChain.Train(messages.Select(m => m.Content).ToArray());

                await context.Message.ReplyAsync(markovChain.GenerateSentence());
            };
            commands.Add(markov);

            return(commands);
        }