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!"); }
public ClashWar(string enemyClan, int size, CommandEventArgs e) { this.EnemyClan = enemyClan; this.Size = size; this.bases = new Caller[size]; this.baseCancelTokens = new CancellationTokenSource[size]; }
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); }
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?"); }
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; } }
internal Task Run(CommandEventArgs args) { var task = _runFunc(args); if (task != null) return task; else return TaskHelper.CompletedTask; }
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); }
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 }); }
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); }
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(); }
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; }
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"); }
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!"); }
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); }
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(); }
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!"); } }
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"); } }
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; } }
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); }
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); }
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); }
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; } }
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!"); }
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"); }
private void OnAfterCommand(CommandEventArgs args) => CommandFinished(this, args);
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); } }
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; }
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; } }; }
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); } }; }
public string GetRandomLoreSnippet(CommandEventArgs e) { var rnd = new Random().Next(0, _loreSnippets.Count()); return _loreSnippets.ElementAt(rnd).ToDiscordMessage(); }
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); }
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)); }
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; } }
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; }
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); }
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); }
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; } }