Esempio n. 1
0
        private async Task Marry(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            Family m;

            if ((m = GetFamily(e.User)) != null)
            {
                await e.Channel.SendMessage("You are currently married to **" + m.so(e.User).Name + "**!");
            }

            if (e.Message.MentionedUsers.Count() <= 0)
            {
                await e.Channel.SendMessage("You are currently a lonely single!");

                return;
            }
            User other = e.Message.MentionedUsers.ElementAt(0);

            if (e.User == other)
            {
                await e.Channel.SendMessage("So it seems like nobody wants you?");

                return;
            }
            if ((m = GetFamily(other)) != null)
            {
                await e.Channel.SendMessage("The person you are trying to marry is currently married to **" + m.so(other) + "**!");

                return;
            }
            // Get married
            proposals.Add(new Proposal(other, e.User, e.Channel));
            await e.Channel.SendMessage(other.Mention + ", do you want to marry " + e.User.Name + "?\nSay \"I do\" to accept!");
        }
Esempio n. 2
0
 public ClashWar(string enemyClan, int size, CommandEventArgs e)
 {
     this.EnemyClan = enemyClan;
     this.Size = size;
     this.bases = new Caller[size];
     this.baseCancelTokens = new CancellationTokenSource[size];
 }
Esempio n. 3
0
        private async Task AddFile(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (playing && e.User.VoiceChannel != voiceChannel)
            {
                await e.Channel.SendMessage("Join vc NOW :angry:");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("I cannot add nothing to the queue");

                return;
            }
            var path = @"C:\Users\dejon\Music\" + param + ".mp3";
            var name = param.Split('\\')[param.Split('\\').Length - 1];

            if (!File.Exists(path))
            {
                await e.Channel.SendMessage("Could not find file: " + param);

                return;
            }
            queue.Add(new Song(path, name, e.User.Name));
            await e.Channel.SendMessage("**" + name + "** has been added to the queue by *" + e.User.Name + "*!");

            await Play(e);
        }
Esempio n. 4
0
        private async Task Farm(Discord.Commands.CommandEventArgs e)
        {
            var player = GetPlayerData(e.User);

            if (farmers.Contains(player))
            {
                await e.Channel.SendMessage("You are already farming! " + player.farmingLeft + " minutes left!");

                return;
            }
            var param   = e.GetArg("param");
            int minutes = 5;

            if (param.Length > 0)
            {
                Int32.TryParse(param, out minutes);
            }
            if (player.SetFarming(minutes))
            {
                farmers.Add(player);
                await e.Channel.SendMessage("You are now farming for " + minutes + " minutes!");

                return;
            }
            await e.Channel.SendMessage("Maybe check your parameters again?");
        }
Esempio n. 5
0
        public async Task Shop(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Count() <= 0)
            {
                await e.Channel.SendMessage("What do you want to do in the shop?   (>rpghelp for more info!)");

                return;
            }
            switch (param.ElementAt(0))
            {
            case "buy":
                await Buy(e, param);

                break;

            case "items":
                await e.Channel.SendMessage("**Todays shopitems:**"
                                            + "\n0)\tHealth potions      \t(hp/health)"
                                            + "\n1)\tMuscle training     \t(maxhp/maxhealth)"
                                            + "\n2)\tArmor enhancements  \t(armor/armour)"
                                            + "\n3)\tWeapon training     \t(weaponskill/ws)");

                break;

            default:
                await e.Channel.SendMessage("Shopcommand " + param.ElementAt(0) + " not recognized");

                return;
            }
        }
Esempio n. 6
0
		internal Task Run(CommandEventArgs args)
		{
			var task = _runFunc(args);
			if (task != null)
				return task;
			else
				return TaskHelper.CompletedTask;
		}
Esempio n. 7
0
        private async Task Queue(Discord.Commands.CommandEventArgs e)
        {
            var msg = "The awesome music queue: (" + queue.Count + " songs in the queue)";

            for (int i = 0; i < queue.Count && i < 10; i++)
            {
                msg += "\n" + (i + 1) + "\t" + queue[i].title + ", requested by: *" + queue[i].user + "*";
            }
            await e.Channel.SendMessage(msg);
        }
Esempio n. 8
0
 public void SaveRequest(CommandEventArgs e, string text) {
     Classes.DBHandler.Instance.InsertData(new Classes._DataModels.Request {
         RequestText = text,
         UserName = e.User.Name,
         UserId = (long)e.User.Id,
         ServerId = (long)e.Server.Id,
         ServerName = e.Server.Name,
         DateAdded = DateTime.Now
     });
 }
Esempio n. 9
0
        private async Task Help(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var mess = "**All you need to know about this game!**\n"
                       + ">rpgstats\n\tShow your stats (health and level and more)\n"
                       + ">rpgtop <amount>\n\tShow the top <amount> players of this game (max 9)\n"
                       + ">rpgjbf\n\tJoin the next bossfight (Bossfights are every hour, on the hour!)\n"
                       + ">rpgshop items\n\tShows a list of items availeble in the shop\n"
                       + ">rpgshop buy <item> <amount>\n\tBuy the specified item, amount times (if you can afford it)";
            await e.Channel.SendMessage(mess);
        }
Esempio n. 10
0
        public void SaveRequest(CommandEventArgs e, string text) {

            var obj = new ParseObject("Requests");

            obj["ServerId"] = e.Server.Id;
            obj["ServerName"] = e.Server.Name;
            obj["UserId"] = e.User.Id;
            obj["UserName"] = e.User.Name;
            obj["Request"] = text;

            obj.SaveAsync();
        }
Esempio n. 11
0
        private async Task ReceiveAnswer(CommandEventArgs e, Answers userAnswer)
        {
            var response = userAnswer == Answers.Betray
                ? ":no_entry: `You betrayed nadeko` - you monster."
                : ":ok: `You cooperated with nadeko.` ";
            var currentAnswer = NextAnswer;
            var nadekoResponse = currentAnswer == Answers.Betray
                ? ":no_entry: `aww Nadeko betrayed you` - she is so cute"
                : ":ok: `Nadeko cooperated.`";
            NextAnswer = userAnswer;
            if (userAnswer == Answers.Betray && currentAnswer == Answers.Betray)
            {
                NadekoPoints--;
                UserPoints--;
            }
            else if (userAnswer == Answers.Cooperate && currentAnswer == Answers.Cooperate)
            {
                NadekoPoints += 2;
                UserPoints += 2;
            }
            else if (userAnswer == Answers.Betray && currentAnswer == Answers.Cooperate)
            {
                NadekoPoints -= 3;
                UserPoints += 3;
            }
            else if (userAnswer == Answers.Cooperate && currentAnswer == Answers.Betray)
            {
                NadekoPoints += 3;
                UserPoints -= 3;
            }

            await e.Channel.SendMessage($"**ROUND {++round}**\n" +
                                        $"{response}\n" +
                                        $"{nadekoResponse}\n" +
                                        $"--------------------------------\n" +
                                        $"Nadeko has {NadekoPoints} points." +
                                        $"You have {UserPoints} points." +
                                        $"--------------------------------\n")
                                            .ConfigureAwait(false);
            if (round < 10) return;
            if (nadekoPoints == userPoints)
                await e.Channel.SendMessage("Its a draw").ConfigureAwait(false);
            else if (nadekoPoints > userPoints)
                await e.Channel.SendMessage("Nadeko won.").ConfigureAwait(false);
            else
                await e.Channel.SendMessage("You won.").ConfigureAwait(false);
            nadekoPoints = 0;
            userPoints = 0;
            round = 0;
        }
Esempio n. 12
0
        private async Task Divorce(Discord.Commands.CommandEventArgs e)
        {
            Family f;

            if ((f = GetFamily(e.User)) == null)
            {
                await e.Channel.SendMessage("It appears you are not loved enough to get married in the first place");

                return;
            }
            families.Remove(f);
            await e.Channel.SendMessage("You are now officially single");

            await f.so(e.User).SendMessage("Your partner has divorced you, get REKT");
        }
Esempio n. 13
0
        private async Task Skip(Discord.Commands.CommandEventArgs e)
        {
            if (!playing)
            {
                await e.Channel.SendMessage("Im not singing baka!");

                return;
            }
            if (e.User.Name != queue[0].user && e.User.Id != Constants.NYAid)
            {
                await e.Channel.SendMessage("Who are you to skip this beautifull song??");
            }
            skipped = true;
            await e.Channel.SendMessage("Skipping this song!");
        }
Esempio n. 14
0
        private async Task Add(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (playing && e.User.VoiceChannel != voiceChannel)
            {
                await e.Channel.SendMessage("Join vc NOW :angry:");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("I cannot add nothing to the queue");

                return;
            }
            try
            {
                var youTube = Client.For(YouTube.Default);         // starting point for YouTube actions
                var video   = youTube.GetVideo(e.GetArg("param")); // gets a Video object with info about the video
                var vidfile = Path.Combine(Environment.CurrentDirectory, "Music", video.FullName);
                Console.WriteLine(vidfile);
                var mp3file = Path.Combine(Environment.CurrentDirectory, "Music", video.Title + ".mp3");
                if (!File.Exists(mp3file))
                {
                    byte[] bytes = await video.GetBytesAsync();

                    File.WriteAllBytes(vidfile, bytes);
                    songcounter++;
                    videoconverter.ConvertMedia(vidfile, mp3file, "mp3");
                    File.Delete(vidfile);
                }
                queue.Add(new Song(mp3file, video.Title, e.User.Name));
                await e.Channel.SendMessage("**" + video.Title + "** has been added to the queue by *" + e.User.Name + "*!");

                MyBot.Log(DateTime.Now.ToUniversalTime().ToShortTimeString() + " - " + e.Channel.Name + ") Song added: " + video.FullName, e.Channel.Name + "_log");
            }
            catch (Exception ex)
            {
                await e.Channel.SendMessage("I could not download that...");

                Console.WriteLine(ex.StackTrace);
                return;
            }
            await Play(e);
        }
Esempio n. 15
0
        private async Task Silence(Discord.Commands.CommandEventArgs e)
        {
            if (e.User.VoiceChannel != voiceChannel)
            {
                await e.Channel.SendMessage("You are not even listening to me!");

                return;
            }
            if (discordAudio == null || discordAudio.State != ConnectionState.Connected)
            {
                await e.Channel.SendMessage("Im not singing right now though...");

                return;
            }
            await discordAudio.Disconnect();
        }
Esempio n. 16
0
        private async Task JoinBossFight(Discord.Commands.CommandEventArgs e)
        {
            var player = GetPlayerData(e.User);

            bossFightPlayers.Add(player);
            var a = bossFightPlayers.Count();

            if (a == 1)
            {
                await e.Channel.SendMessage("Player **" + e.User.Name + "** added to bossfight\n1 player joined so far!");
            }
            else
            {
                await e.Channel.SendMessage("Player **" + e.User.Name + "** added to bossfight\n" + a + " players joined so far!");
            }
        }
Esempio n. 17
0
        private async Task Summon(Discord.Commands.CommandEventArgs e)
        {
            try { await e.Message.Delete(); } catch { /* NO ERROR HANDLING OMG!!! o_o */ }
            if (e.User.VoiceChannel == null)
            {
                await e.Channel.SendMessage("Join a voicechannel first, you dummy");

                return;
            }
            try
            {
                voiceChannel = e.User.VoiceChannel;
                discordAudio = await discordClient.GetService <AudioService>() // We use GetService to find the AudioService that we installed earlier. In previous versions, this was equivelent to _client.Audio()
                               .Join(voiceChannel);                            // Join the Voice Channel, and return the IAudioClient.
            } catch
            {
                await e.Channel.SendMessage("Cannot join voicechannel cuz discord is being a bitch :D");
            }
        }
Esempio n. 18
0
        private async Task BasicRPG(Discord.Commands.CommandEventArgs e)
        {
            var param = e.GetArg("param").Split(' ');

            if (param.Count() <= 0)
            {
                await Help(e);

                return;
            }
            switch (param[0])
            {
            case "help":
                await Help(e);

                break;

            case "class":
                bool success;
                if (param.Count() <= 1)
                {
                    success = GetPlayerData(e.User).SetClass("Peasant");
                }
                else
                {
                    success = GetPlayerData(e.User).SetClass(param[1]);
                }
                if (success)
                {
                    await e.Channel.SendMessage("You now have a new class! Good luck fighting!");
                }
                else
                {
                    await e.Channel.SendMessage("Hmm, do not go making up classes pls...");
                }
                break;

            default:
                await Help(e);

                break;
            }
        }
Esempio n. 19
0
        private async Task PlayerBattle(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var player = GetPlayerData(e.User);

            if (player.IsFarming())
            {
                await e.Channel.SendMessage("You are really busy with farming at the moment... (" + player.farmingLeft + " minutes left)");

                return;
            }
            if (player.health <= 0)
            {
                await e.Channel.SendMessage("Lol, you are dead! How would you even fight in that state??");

                return;
            }
            if (e.Message.MentionedUsers.Count() <= 0 || e.Message.MentionedUsers.ElementAt(0).Name == e.User.Name)
            {
                await e.Channel.SendMessage("Sooo, who are you gonna battle??");

                return;
            }
            var enemy = GetPlayerData(e.Message.MentionedUsers.ElementAt(0));

            if (enemy.health <= 0)
            {
                await e.Channel.SendMessage("Your enemy is currently busy with being dead, try again later");

                return;
            }
            if (enemy.IsFarming())
            {
                await e.Channel.SendMessage("Your enemy is really busy with farming at the moment... (" + player.farmingLeft + " minutes left)");

                return;
            }
            Battle(e.Channel, player, enemy);
        }
Esempio n. 20
0
        private async Task Stats(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            RPGPlayer player;
            var       param = e.GetArg("param");

            if (e.Message.MentionedUsers.Count() > 0)
            {
                player = GetPlayerData(e.Message.MentionedUsers.ElementAt(0));
            }
            else if (param.Length > 0)
            {
                player = GetPlayerData(e.User);
                foreach (RPGPlayer p in players)
                {
                    if (p.name.ToLower() == param.ToLower())
                    {
                        player = p;
                        break;
                    }
                }
            }
            else
            {
                player = GetPlayerData(e.User);
            }
            var mess = "Stats for **" + player.name + "**\n```"
                       + "Level:      \t" + player.GetLevel()
                       + "\nExp:        \t" + player.exp
                       + "\nClass:      \t" + player.playerclass
                       + "\nMoney:      \t" + player.money
                       + "\nHealth:     \t" + player.health + " / " + player.maxHealth
                       + "\nArmor:      \t" + player.armor
                       + "\nDamage:     \t" + player.damage
                       + "\nWeaponskill:\t" + player.weaponskill
                       + "```";
            await e.Channel.SendMessage(mess);
        }
Esempio n. 21
0
        private async Task Top(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            List <RPGPlayer> sortedplayers = players.OrderBy(o => o.exp).Reverse().ToList();
            var mess = "**RPG Top 5 players**\n```";
            var num  = 5;

            if (e.GetArg("param").Length > 0)
            {
                Int32.TryParse(e.GetArg("param"), out num);
                if (num > 9)
                {
                    num = 9;
                }
            }
            for (int i = 0; i < num && i < sortedplayers.Count(); i++)
            {
                mess += "\n" + (i + 1) + ".\t" + sortedplayers[i].name + " : " + sortedplayers[i].exp + "xp (lvl: " + sortedplayers[i].GetLevel() + ")";
            }
            mess += "```";
            await e.Channel.SendMessage(mess);
        }
Esempio n. 22
0
        private async Task Reset(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            if (e.User.Id != Constants.NYAid)
            {
                await e.Channel.SendMessage("Hahahaha, no.");

                return;
            }
            var param = e.GetArg("param");

            if (param.Length <= 0)
            {
                return;
            }
            switch (param)
            {
            case "all":
                players = new List <RPGPlayer>();
                break;
            }
        }
Esempio n. 23
0
        private async Task Play(Discord.Commands.CommandEventArgs e)
        {
            if (playing)
            {
                return;
            }
            if (discordAudio == null || discordAudio.Channel != e.User.VoiceChannel)
            {
                await Summon(e);
            }
            playing = true;
            Console.WriteLine(queue.Count);
            while (queue.Count > 0)
            {
                await SendAudio(e.Channel, queue[0]);

                queue.RemoveAt(0);
            }
            await discordAudio.Disconnect();

            queue   = new List <Song>();
            playing = false;
            await e.Channel.SendMessage("Queue empty!");
        }
Esempio n. 24
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            if (running && e.Channel != channel)
            {
                await e.Channel.SendMessage("A game is already being played in another channel :/");

                return;
            }
            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop | truth | dare | next | add> おねがいします");

                return;
            }

            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("The gamehost has stopped the ToD game!");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int num;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out num))
                {
                    await e.Channel.SendMessage("Specify <create> <amount of games (max 15)> <list of players (mentioned)> to create a new game please!");

                    return;
                }
                gamesLeft = num;
                if (gamesLeft > 15)
                {
                    gamesLeft = 15;
                }
                players = e.Message.MentionedUsers.ToList <User>();
                await e.Channel.SendMessage("We will play " + gamesLeft + " times, with " + players.Count() + " players!");

                channel = e.Channel;
                host    = e.User;
                playedD = new List <int>();
                playedT = new List <int>();
                running = true;
                await NextRound();

                return;
            }

            if (param[0].ToLower() == "truth" || param[0].ToLower() == "dare" || param[0].ToLower() == "next")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("There is no game being played right now, sweetheart");

                    return;
                }
                if (e.User != lastPlayer && e.User != host)
                {
                    await e.Channel.SendMessage("You are not the chosen one, baka");

                    return;
                }
                if (param[0].ToLower() == "next")
                {
                    await NextRound();

                    return;
                }
                if (e.User == host && e.User != lastPlayer)
                {
                    return;
                }
                int i;
                if (param[0].ToLower() == "truth")
                {
                    do
                    {
                        i = MyBot.rng.Next(Constants.truth.Count());
                        if (playedT.Count() >= Constants.truth.Count())
                        {
                            playedT = new List <int>();
                        }
                    } while (playedT.Contains(i));
                    await channel.SendMessage(Constants.truth.ElementAt(i));

                    playedT.Add(i);
                    return;
                }
                do
                {
                    i = MyBot.rng.Next(Constants.dare.Count());
                    if (playedD.Count() >= Constants.dare.Count())
                    {
                        playedD = new List <int>();
                    }
                } while (playedD.Contains(i));
                playedD.Add(i);
                await channel.SendMessage(Constants.dare.ElementAt(i));

                return;
            }

            if (param[0].ToLower() == "add")
            {
                if (e.Message.MentionedUsers.Count() <= 0)
                {
                    await e.Channel.SendMessage("You will have to mention the players you want to add!!");

                    return;
                }
                players.AddRange(e.Message.MentionedUsers);
                await channel.SendMessage("The game now has " + players.Count() + " players!\n" + gamesLeft + " rounds to go!");

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
Esempio n. 25
0
 private void OnAfterCommand(CommandEventArgs args)
     => CommandFinished(this, args);
Esempio n. 26
0
        private async Task FinishClaim(CommandEventArgs e, int stars = 3)
        {
            var warInfo = GetInfo(e);
            if (warInfo == null || warInfo.Item1.Count == 0)
            {
                await e.Channel.SendMessage("💢🔰 **That war does not exist.**").ConfigureAwait(false);
                return;
            }
            var usr =
                string.IsNullOrWhiteSpace(e.GetArg("other_name")) ?
                e.User.Name :
                e.GetArg("other_name");

            var war = warInfo.Item1[warInfo.Item2];
            try
            {
                var baseNum = war.FinishClaim(usr, stars);
                await e.Channel.SendMessage($"❗🔰{e.User.Mention} **DESTROYED** a base #{baseNum + 1} in a war against {war.ShortPrint()}").ConfigureAwait(false);
                Save();
            }
            catch (Exception ex)
            {
                await e.Channel.SendMessage($"💢🔰 {ex.Message}").ConfigureAwait(false);
            }
        }
Esempio n. 27
0
        private async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }
            if (options.Contains(param[0].ToLower()))
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one play a game that is not running?");

                    return;
                }
                if (e.User.Id == host.Id)
                {
                    hostChoice = param[0];
                    await FinishGame();

                    return;
                }
                if (e.User.Id == opponent.Id)
                {
                    opponentChoice = param[0];
                    await FinishGame();

                    return;
                }
                await e.User.SendMessage("Shhhh, people are playing");

                return;
            }
            if (param[0].ToLower() == "stop" || param[0].ToLower() == "quit")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User != opponent && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("One of the players left the rps game!");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                if (e.Message.MentionedUsers.Count() <= 0)
                {
                    await e.Channel.SendMessage("Mention a user to play against!");

                    return;
                }
                host     = e.User;
                opponent = e.Message.MentionedUsers.ElementAt(0);
                await e.Channel.SendMessage("Rock-paper-scissors game succesfully created between " + host.Name + " and " + opponent.Name + "-desu");

                channel = e.Channel;
                await StartGame();

                return;
            }
            await e.Channel.SendMessage("Specify <create | stop> おねがいします");
        }
 public CommandErrorEventArgs(CommandErrorType errorType, CommandEventArgs baseArgs, Exception ex)
     : base(baseArgs.Message, baseArgs.Command, baseArgs.Args)
 {
     Exception = ex;
     ErrorType = errorType;
 }
Esempio n. 29
0
		public CommandsPlugin(DiscordClient client, Func<User, int> getPermissions = null)
		{
			_client = client;
			_getPermissions = getPermissions;
			_commands = new List<Command>();

			CommandChar = '/';
			UseCommandChar = false;
			RequireCommandCharInPublic = true;
			RequireCommandCharInPrivate = true;

			client.MessageReceived += async (s, e) =>
			{
				//If commands aren't being used, don't bother processing them
				if (_commands.Count == 0)
					return;

				//Ignore messages from ourselves
				if (e.Message.User == client.CurrentUser)
					return;

				//Check for the command character
				string msg = e.Message.Text;
				if (UseCommandChar)
				{
					if (msg.Length == 0)
						return;
					bool isPrivate = e.Message.Channel.IsPrivate;
					bool hasCommandChar = msg[0] == CommandChar;
					if (hasCommandChar)
						msg = msg.Substring(1);
					if (!isPrivate && RequireCommandCharInPublic && !hasCommandChar)
						return;
					if (isPrivate && RequireCommandCharInPrivate && !hasCommandChar)
						return;
				}

				CommandPart[] args;
				if (!CommandParser.ParseArgs(msg, out args))
					return;

				for (int i = 0; i < _commands.Count; i++)
				{
					Command cmd = _commands[i];

					//Check Command Parts
					if (args.Length < cmd.Parts.Length)
						continue;

                    bool isValid = true;
					for (int j = 0; j < cmd.Parts.Length; j++)
					{
						if (!string.Equals(args[j].Value, cmd.Parts[j], StringComparison.OrdinalIgnoreCase))
						{
							isValid = false;
							break;
						}
					}
					if (!isValid)
						continue;

					//Check Arg Count
					int argCount = args.Length - cmd.Parts.Length;
					if (argCount < cmd.MinArgs || argCount > cmd.MaxArgs)
						continue;

					//Clean Args
					string[] newArgs = new string[argCount];
					for (int j = 0; j < newArgs.Length; j++)
						newArgs[j] = args[j + cmd.Parts.Length].Value;

					//Get ArgText
					string argText;
					if (argCount == 0)
						argText = "";
					else
						argText = msg.Substring(args[cmd.Parts.Length].Index);

					//Check Permissions
					int permissions = _getPermissions != null ? _getPermissions(e.Message.User) : 0;
					var eventArgs = new CommandEventArgs(e.Message, cmd, msg, argText, permissions, newArgs);
					if (permissions < cmd.MinPerms)
					{
						RaiseCommandError(eventArgs, new PermissionException());
						return;
					}

					//Run Command					
                    RaiseRanCommand(eventArgs);
					try
					{
						var task = cmd.Handler(eventArgs);
						if (task != null)
							await task.ConfigureAwait(false);
					}
					catch (Exception ex)
					{
						RaiseCommandError(eventArgs, ex);
					}
					break;
				}
			};
		}
Esempio n. 30
0
		void IService.Install(DiscordClient client)
		{
            Client = client;

			if (Config.HelpMode != HelpMode.Disabled)
            {
				CreateCommand("help")
					.Parameter("command", ParameterType.Multiple)
                    .Hide()
                    .Description("Returns information about commands.")
                    .Do(async e =>
                    {
						Channel replyChannel = Config.HelpMode == HelpMode.Public ? e.Channel : await e.User.CreatePMChannel().ConfigureAwait(false);
						if (e.Args.Length > 0) //Show command help
						{
							var map = _map.GetItem(string.Join(" ", e.Args));
							if (map != null)
								await ShowCommandHelp(map, e.User, e.Channel, replyChannel).ConfigureAwait(false);
							else
								await replyChannel.SendMessage("Unable to display help: Unknown command.").ConfigureAwait(false);
						}
                        else //Show general help							
							await ShowGeneralHelp(e.User, e.Channel, replyChannel).ConfigureAwait(false);
                    });
            }

            client.MessageReceived += async (s, e) =>
            {
                if (_allCommands.Count == 0)  return;

                if (Config.IsSelfBot)
                {
                    if (e.Message.User == null || e.Message.User.Id != Client.CurrentUser.Id) return; // Will only listen to Self
                }
                else
                    if (e.Message.User == null || e.Message.User.Id == Client.CurrentUser.Id) return; // Normal expected behavior for bots

                string msg = e.Message.RawText;
                if (msg.Length == 0) return;

                string cmdMsg = null;

                //Check for command char
                if (Config.PrefixChar.HasValue)
                {
                    if (msg[0] == Config.PrefixChar.Value)
                        cmdMsg = msg.Substring(1);
                }

                //Check for mention
                if (cmdMsg == null && Config.AllowMentionPrefix)
                {
                    string mention = client.CurrentUser.Mention;
                    if (msg.StartsWith(mention) && msg.Length > mention.Length)
                        cmdMsg = msg.Substring(mention.Length + 1);
                    else
                    {
                        mention = $"@{client.CurrentUser.Name}";
                        if (msg.StartsWith(mention) && msg.Length > mention.Length)
                            cmdMsg = msg.Substring(mention.Length + 1);
                    }

                    string mention2 = client.CurrentUser.NicknameMention;
                    if (mention2 != null)
                    {
                        if (msg.StartsWith(mention2) && msg.Length > mention2.Length)
                            cmdMsg = msg.Substring(mention2.Length + 1);
                        else
                        {
                            mention2 = $"@{client.CurrentUser.Name}";
                            if (msg.StartsWith(mention2) && msg.Length > mention2.Length)
                                cmdMsg = msg.Substring(mention2.Length + 1);
                        }
                    }
                }
                
                //Check using custom activator
                if (cmdMsg == null && Config.CustomPrefixHandler != null)
                {
                    int index = Config.CustomPrefixHandler(e.Message);
                    if (index >= 0)
                        cmdMsg = msg.Substring(index);
                }
                
                if (cmdMsg == null) return;

                //Parse command
                IEnumerable<Command> commands;
				int argPos;
				CommandParser.ParseCommand(cmdMsg, _map, out commands, out argPos);				
				if (commands == null)
				{
					CommandEventArgs errorArgs = new CommandEventArgs(e.Message, null, null);
					OnCommandError(CommandErrorType.UnknownCommand, errorArgs);
					return;
				}
				else
				{
					foreach (var command in commands)
					{
						//Parse arguments
						string[] args;
						var error = CommandParser.ParseArgs(cmdMsg, argPos, command, out args);
						if (error != null)
						{
							if (error == CommandErrorType.BadArgCount)
								continue;
							else
							{
								var errorArgs = new CommandEventArgs(e.Message, command, null);
								OnCommandError(error.Value, errorArgs);
								return;
							}
						}

						var eventArgs = new CommandEventArgs(e.Message, command, args);

						// Check permissions
						string errorText;
						if (!command.CanRun(eventArgs.User, eventArgs.Channel, out errorText))
						{
							OnCommandError(CommandErrorType.BadPermissions, eventArgs, errorText != null ? new Exception(errorText) : null);
							return;
						}

						// Run the command
						try
						{
							OnCommand(eventArgs);
							await command.Run(eventArgs).ConfigureAwait(false);
						}
						catch (Exception ex)
						{
							OnCommandError(CommandErrorType.Exception, eventArgs, ex);
						}
						return;
					}
					var errorArgs2 = new CommandEventArgs(e.Message, null, null);
					OnCommandError(CommandErrorType.BadArgCount, errorArgs2);
				}
            };
        }
Esempio n. 31
0
 public string GetRandomLoreSnippet(CommandEventArgs e)
 {
     var rnd = new Random().Next(0, _loreSnippets.Count());
     return _loreSnippets.ElementAt(rnd).ToDiscordMessage();
 }
Esempio n. 32
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }
            if (param[0].ToLower() == "setbotchannel")
            {
                if (param.Length <= 1)
                {
                    await channel.SendMessage("Channel not specified");

                    return;
                }
                botChannelName = param[1];
                await channel.SendMessage("Botchannel is now '" + botChannelName + "'");

                return;
            }
            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                await e.Channel.SendMessage("Stop command used");

                running = false;
                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int num;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out num))
                {
                    await e.Channel.SendMessage("Specify <create> <amount of songs (max 10)> to create a new game please!");

                    return;
                }
                songsLeft = num;
                if (songsLeft > 10)
                {
                    songsLeft = 10;
                }
                await e.Channel.SendMessage("Game with " + songsLeft + " songs created!");

                channel = e.Channel;
                host    = e.User;
                for (int i = 0; i < channel.Server.AllChannels.Count(); i++)
                {
                    if (channel.Server.AllChannels.ElementAt(i).Name.ToLower() == botChannelName)
                    {
                        botChannel = channel.Server.AllChannels.ElementAt(i);
                    }
                }
                if (botChannel == null)
                {
                    await channel.SendMessage("Textchannel " + botChannelName + " not found :/");

                    return;
                }
                running = true;
                await PlaySong();

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
		private void RaiseRanCommand(CommandEventArgs args)
		{
			if (RanCommand != null)
				RanCommand(this, args);
		}
Esempio n. 34
0
        public async Task InitGame(Discord.Commands.CommandEventArgs e)
        {
            await e.Message.Delete();

            var param = e.GetArg("param").Split(' ');

            if (param.Length <= 0)
            {
                await e.Channel.SendMessage("Specify <create | stop> おねがいします");

                return;
            }

            if (param[0].ToLower() == "stop")
            {
                if (!running)
                {
                    await e.Channel.SendMessage("How does one stop a game that is not running?");

                    return;
                }
                if (e.User != host && e.User.Id != Constants.NYAid)
                {
                    await e.Channel.SendMessage("Shhh, only the game creator can stop the game!");

                    return;
                }
                running = false;
                await NextQuestion();

                return;
            }

            if (param[0].ToLower() == "create")
            {
                if (running)
                {
                    await e.Channel.SendMessage("There is already a game running somewhere, sowwy");

                    return;
                }
                int amount;
                if (param.Length <= 1 || !Int32.TryParse(param[1], out amount))
                {
                    await e.Channel.SendMessage("Specify how many questions I should ask, my darlin'");

                    return;
                }
                if (param.Length <= 2)
                {
                    questions = new List <QuizQuestion>();
                    questions.AddRange(Constants.animeQuestions);
                    questions.AddRange(Constants.musicQuestions);
                }
                else
                {
                    switch (param[2])
                    {
                    case "anime":
                        questions = Constants.animeQuestions;
                        break;

                    case "songs":
                        questions = Constants.musicQuestions;
                        break;

                    default:
                        await e.Channel.SendMessage("Genre not know to this electromaster :/");

                        return;
                    }
                }
                questionsLeft = Math.Min(amount, 10);
                running       = true;
                channel       = e.Channel;
                await channel.SendMessage("Quiz start! Get ready for " + questionsLeft + " questions!");
                await NextQuestion();

                return;
            }
            await e.Channel.SendMessage("Something went wrong with your arguments XD");
        }
		private void RaiseCommandError(CommandEventArgs args, Exception ex)
		{
			if (CommandError != null)
				CommandError(this, new CommandErrorEventArgs(args, ex));
		}
Esempio n. 36
0
        public string GetUrlFromCommand(CommandEventArgs e)
        {
            try
            {
                switch (e.Command.Text)
                {
                    case "gear":
                        if (e.Args.Count() != 1 || string.IsNullOrEmpty(e.Args[0]))
                        {
                            return string.Format("Hi {0}, if you would like to see information about gear for a specific job from Ariyala's Toolkit, please say: !ariyala [WHM/ DRK, e.t.c.]", e.Message.User);
                        }

                        var ariyalaUrl = string.Format("{0}/{1}", ConfigurationHelper.GetValue("AriyalaURL"), _jobService.GetJob(e.Args[0]).LongName);

                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ariyalaUrl),
                            Message = string.Format("{0} Gear/ Food/ BiS information coutesy of Ariyala's Toolkit", e.Args[0])
                        }.ToDiscordMessage();

                    case "garland":
                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ConfigurationHelper.GetValue("GarlandUrl")),
                            Message = "Gatherer node information courtesy of Garland Tools"
                        }.ToDiscordMessage();

                    case "chocobo":
                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ConfigurationHelper.GetValue("ChocoboColourCalculator")),
                            Message = "Use this website to help you figure out how to get your Chocobo the colour you want"
                        }.ToDiscordMessage();

                    case "tripletriad":
                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ConfigurationHelper.GetValue("TTDeckManagerUrl")),
                            Message = "Triple Triad deck manager"
                        }.ToDiscordMessage();

                    case "minions":
                        if (e.Args.Count() < 3 || string.IsNullOrEmpty(e.Args[0]) || string.IsNullOrEmpty(e.Args[1]) || string.IsNullOrEmpty(e.Args[2]))
                        {
                            return string.Format("Hi {0}, if you would like to see information about someone's minions, please say: `!minions [Forename] [Lastname] [Server]`", e.Message.User);
                        }

                        var minionsUrl = ConfigurationHelper.GetValue("MinionsURL");
                        var url = string.Format(minionsUrl, e.Args[0], e.Args[1], e.Args[2]);

                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(url),
                            Message = string.Format("Here are {0} {1}'s minions", e.Args[0], e.Args[1])
                        }.ToDiscordMessage();

                    case "minicactpot":
                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ConfigurationHelper.GetValue("MiniCactpotUrl")),
                            Message = "Mini Cactpot solver"
                        }.ToDiscordMessage();

                    case "sightseeing":
                        return new DiscordUrl
                        {
                            Url = _bitlyService.Shorten(ConfigurationHelper.GetValue("SightSeeingHelperUrl")),
                            Message = "Sight-seeing log helper"
                        }.ToDiscordMessage();

                }

                return null;
            }
            catch (Exception ex)
            {
                _loggingService.LogError(string.Format("Could not get Url for key: '{0}'.", e.Command.Text), ex);
                return null;
            }
        }
Esempio n. 37
0
 private void OnCommand(CommandEventArgs args)
     => CommandExecuted(this, args);
		public CommandErrorEventArgs(CommandEventArgs baseArgs, Exception ex)
			: base(baseArgs.Message, baseArgs.Command, baseArgs.CommandText, baseArgs.ArgText, baseArgs.Permissions, baseArgs.Args)
		{
			Exception = ex;
		}
Esempio n. 39
0
 private void OnCommandError(CommandErrorType errorType, CommandEventArgs args, Exception ex = null)
     => CommandErrored(this, new CommandErrorEventArgs(errorType, args, ex));
		private void RaiseUnknownCommand(CommandEventArgs args)
		{
			if (UnknownCommand != null)
				UnknownCommand(this, args);
		}
Esempio n. 41
0
		void IService.Install(DiscordClient client)
		{
            Client = client;
            Config.Lock();

			if (Config.HelpMode != HelpMode.Disable)
            {
				CreateCommand("help")
					.Parameter("command", ParameterType.Multiple)
                    .Hide()
                    .Description("Returns information about commands.")
                    .Do(async e =>
                    {
						Channel replyChannel = Config.HelpMode == HelpMode.Public ? e.Channel : await e.User.CreatePMChannel().ConfigureAwait(false);
						if (e.Args.Length > 0) //Show command help
						{
							var map = _map.GetItem(string.Join(" ", e.Args));
							if (map != null)
								await ShowCommandHelp(map, e.User, e.Channel, replyChannel).ConfigureAwait(false);
							else
								await replyChannel.SendMessage("Unable to display help: Unknown command.").ConfigureAwait(false);
						}
                        else //Show general help							
							await ShowGeneralHelp(e.User, e.Channel, replyChannel).ConfigureAwait(false);
                    });
            }

            client.MessageReceived += async (s, e) =>
            {
                if (_allCommands.Count == 0)  return;
                if (e.Message.User == null || e.Message.User.Id == Client.CurrentUser.Id) return;

                string msg = e.Message.RawText;
                if (msg.Length == 0) return;

				//Check for command char if one is provided
				var chars = Config.CommandChars;
                if (chars.Length > 0)
                {
					if (!chars.Contains(msg[0]))
						return;
                    msg = msg.Substring(1);
                }

				//Parse command
				IEnumerable<Command> commands;
				int argPos;
				CommandParser.ParseCommand(msg, _map, out commands, out argPos);				
				if (commands == null)
				{
					CommandEventArgs errorArgs = new CommandEventArgs(e.Message, null, null);
					OnCommandError(CommandErrorType.UnknownCommand, errorArgs);
					return;
				}
				else
				{
					foreach (var command in commands)
					{
						//Parse arguments
						string[] args;
						var error = CommandParser.ParseArgs(msg, argPos, command, out args);
						if (error != null)
						{
							if (error == CommandErrorType.BadArgCount)
								continue;
							else
							{
								var errorArgs = new CommandEventArgs(e.Message, command, null);
								OnCommandError(error.Value, errorArgs);
								return;
							}
						}

						var eventArgs = new CommandEventArgs(e.Message, command, args);

						// Check permissions
						string errorText;
						if (!command.CanRun(eventArgs.User, eventArgs.Channel, out errorText))
						{
							OnCommandError(CommandErrorType.BadPermissions, eventArgs, errorText != null ? new Exception(errorText) : null);
							return;
						}

						// Run the command
						try
						{
							OnCommand(eventArgs);
							await command.Run(eventArgs).ConfigureAwait(false);
						}
						catch (Exception ex)
						{
							OnCommandError(CommandErrorType.Exception, eventArgs, ex);
						}
						return;
					}
					var errorArgs2 = new CommandEventArgs(e.Message, null, null);
					OnCommandError(CommandErrorType.BadArgCount, errorArgs2);
				}
            };
        }
 private static Tuple<List<ClashWar>, int> GetInfo(CommandEventArgs e)
 {
     //check if there are any wars
     List<ClashWar> wars = null;
     ClashWars.TryGetValue(e.Server.Id, out wars);
     if (wars == null || wars.Count == 0)
     {
         return null;
     }
     // get the number of the war
     int num;
     if (string.IsNullOrWhiteSpace(e.GetArg("number")))
         num = 0;
     else if (!int.TryParse(e.GetArg("number"), out num) || num > wars.Count)
     {
         return null;
     }
     num -= 1;
     //get the actual war
     return new Tuple<List<ClashWar>, int>(wars, num);
 }
Esempio n. 43
0
        private async Task Buy(Discord.Commands.CommandEventArgs e, string[] param)
        {
            if (param.Count() <= 1)
            {
                await e.Channel.SendMessage("Just going to watch the merchendise? Oh ok");

                return;
            }
            var amount = 1;         // Amount of (the same) items player wants to buy

            if (param.Count() > 2)
            {
                Int32.TryParse(param.ElementAt(2), out amount);
            }
            var player = rpgmain.GetPlayerData(e.User);

            switch (param.ElementAt(1))
            {
            case "0":
            case "hp":
            case "health":
                var cost = amount * 25;
                if (cost > player.money)
                {
                    var mess = "You cant buy something without money";
                    if (player.money > 25)
                    {
                        cost = player.money / 25;
                        var cost2 = Math.Ceiling((player.maxHealth - player.health) / 10);
                        if (cost < cost2)
                        {
                            mess += "\nYou can only buy a maximum of " + cost;
                        }
                        else
                        {
                            mess += "\nYou only need to buy a maximum of " + cost2;
                        }
                    }
                    await e.Channel.SendMessage(mess);

                    return;
                }
                player.AddMoney(-cost);
                player.AddHealth(amount * 10);
                await e.Channel.SendMessage("You succesfully bought " + amount + " healthpotions, healing you to + " + player.health);

                MyBot.Log(DateTime.Now.ToUniversalTime().ToShortTimeString() + ") " + player.name + " bought " + amount + " healthpotions, healing to + " + player.health, RPGMain.filename);
                break;

            case "1":
            case "maxhealth":
            case "maxhp":
            case "2":
            case "armor":
            case "armour":
            case "3":
            case "weaponskill":
            case "ws":
            case "4":
            case "damage":
            case "dam":
            default:
                await e.Channel.SendMessage("Ehhmm, we don't have that in stock right now...");

                return;
            }
        }