public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("$draw") .Description("Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck.\n**Usage**: $draw [x]") .Parameter("count", ParameterType.Optional) .Do(DoFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "voicenotif") .Description("Enables notifications on who joined/left the voice channel.\n**Usage**:.voicenotif Karaoke club") .Parameter("voice_name", ParameterType.Unparsed) .Do(DoFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "listincidents") .Alias(Prefix + "lin") .Description($"List all UNREAD incidents and flags them as read. **Needs Manage Server Permissions.**| `{Prefix}lin`") .AddCheck(SimpleCheckers.ManageServer()) .Do(async e => { var sid = (long)e.Server.Id; var incs = DbHandler.Instance.FindAll<Incident>(i => i.ServerId == sid && i.Read == false); DbHandler.Instance.Connection.UpdateAll(incs.Select(i => { i.Read = true; return i; })); await e.User.SendMessage(string.Join("\n----------------------", incs.Select(i => i.Text))); }); cgb.CreateCommand(Module.Prefix + "listallincidents") .Alias(Prefix + "lain") .Description($"Sends you a file containing all incidents and flags them as read. **Needs Manage Server Permissions.**| `{Prefix}lain`") .AddCheck(SimpleCheckers.ManageServer()) .Do(async e => { var sid = (long)e.Server.Id; var incs = DbHandler.Instance.FindAll<Incident>(i => i.ServerId == sid); DbHandler.Instance.Connection.UpdateAll(incs.Select(i => { i.Read = true; return i; })); var data = string.Join("\n----------------------\n", incs.Select(i => i.Text)); MemoryStream ms = new MemoryStream(); var sw = new StreamWriter(ms); sw.WriteLine(data); sw.Flush(); sw.BaseStream.Position = 0; await e.User.SendFile("incidents.txt", sw.BaseStream); }); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("-h") .Alias(new string[] { "-help", NadekoBot.botMention + " help", NadekoBot.botMention + " h", "~h" }) .Description("Help command") .Do(DoFunc()); cgb.CreateCommand("-hgit") .Description("Help command stylized for github readme") .Do(DoGitFunc()); cgb.CreateCommand("-readme") .Alias("-guide") .Description("Sends a readme and a guide links to the channel.") .Do(async e => await e.Send("**FULL README**: <https://github.com/Kwoth/NadekoBot/blob/master/readme.md>\n\n**GUIDE ONLY**: <https://github.com/Kwoth/NadekoBot/blob/master/ComprehensiveGuide.md>")); cgb.CreateCommand("-donate") .Description("Instructions for helping the project!") .Do(async e => { await e.Send( @"I've created a **paypal** email for nadeko, so if you wish to support the project, you can send your donations to `[email protected]` Don't forget to leave your discord name or id in the message, so that I can reward people who help out. You can join nadekobot server by simply private messaging NadekoBot, and you will get an invite. *If you want to support in some other way or on a different platform, please message me there*" ); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "translangs") .Description("List the valid languages for translation.") .Parameter("search", ParameterType.Optional) .Do(ListLanguagesFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "flip") .Description("Flips coin(s) - heads or tails, and shows an image.\n**Usage**: `$flip` or `$flip 3`") .Parameter("count", ParameterType.Optional) .Do(FlipCoinFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Prefix + "memelist") .Description($"Pulls a list of memes you can use with `~memegen` from http://memegen.link/templates/ | `{Prefix}memelist`") .Do(async e => { int i = 0; await e.Channel.SendMessage("`List Of Commands:`\n```xl\n" + string.Join("\n", JsonConvert.DeserializeObject<Dictionary<string, string>>(await SearchHelper.GetResponseStringAsync("http://memegen.link/templates/")) .Select(kvp => Path.GetFileName(kvp.Value)) .GroupBy(item => (i++) / 4) .Select(ig => string.Concat(ig.Select(el => $"{el,-17}")))) + $"\n```").ConfigureAwait(false); }); cgb.CreateCommand(Prefix + "memegen") .Description($"Generates a meme from memelist with top and bottom text. | `{Prefix}memegen biw \"gets iced coffee\" \"in the winter\"`") .Parameter("meme", ParameterType.Required) .Parameter("toptext", ParameterType.Required) .Parameter("bottext", ParameterType.Required) .Do(async e => { var meme = e.GetArg("meme"); var top = Uri.EscapeDataString(e.GetArg("toptext").Replace(' ', '-')); var bot = Uri.EscapeDataString(e.GetArg("bottext").Replace(' ', '-')); await e.Channel.SendMessage($"http://memegen.link/{meme}/{top}/{bot}.jpg"); }); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(">poll") .Description("Creates a poll, only person who has manage server permission can do it.\n**Usage**: >poll Question?;Answer1;Answ 2;A_3") .Parameter("allargs", ParameterType.Unparsed) .Do(e => { if (!e.User.ServerPermissions.ManageChannels) return; if (ActivePolls.ContainsKey(e.Server)) return; var arg = e.GetArg("allargs"); if (string.IsNullOrWhiteSpace(arg) || !arg.Contains(";")) return; var data = arg.Split(';'); if (data.Length < 3) return; new Poll(e, data[0], data.Skip(1)); }); cgb.CreateCommand(">pollend") .Description("Stops active poll on this server and prints the results in this channel.") .Do(async e => { if (!e.User.ServerPermissions.ManageChannels) return; if (!ActivePolls.ContainsKey(e.Server)) return; await ActivePolls[e.Server].StopPoll(e.Channel); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "cfi") .Alias(Module.Prefix + "channelfilterinvites") .Description("Enables or disables automatic deleting of invites on the channel." + "If no channel supplied, it will default to current one. Use ALL to apply to all existing channels at once." + "\n**Usage**: ;cfi enable #general-chat") .Parameter("bool") .Parameter("channel", ParameterType.Optional) .Do(async e => { try { var state = PermissionHelper.ValidateBool(e.GetArg("bool")); var chanStr = e.GetArg("channel"); if (chanStr?.ToLowerInvariant().Trim() != "all") { var chan = string.IsNullOrWhiteSpace(chanStr) ? e.Channel : PermissionHelper.ValidateChannel(e.Server, chanStr); PermissionsHandler.SetChannelFilterInvitesPermission(chan, state); await e.Channel.SendMessage($"Invite Filter has been **{(state ? "enabled" : "disabled")}** for **{chan.Name}** channel."); return; } //all channels foreach (var curChannel in e.Server.TextChannels) { PermissionsHandler.SetChannelFilterInvitesPermission(curChannel, state); } await e.Channel.SendMessage($"Invite Filter has been **{(state ? "enabled" : "disabled")}** for **ALL** channels."); } catch (Exception ex) { await e.Channel.SendMessage($"💢 Error: {ex.Message}"); } }); cgb.CreateCommand(Module.Prefix + "sfi") .Alias(Module.Prefix + "serverfilterinvites") .Description("Enables or disables automatic deleting of invites on the server.\n**Usage**: ;sfi disable") .Parameter("bool") .Do(async e => { try { var state = PermissionHelper.ValidateBool(e.GetArg("bool")); PermissionsHandler.SetServerFilterInvitesPermission(e.Server, state); await e.Channel.SendMessage($"Invite Filter has been **{(state ? "enabled" : "disabled")}** for this server."); } catch (Exception ex) { await e.Channel.SendMessage($"💢 Error: {ex.Message}"); } }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "slowmode") .Description("Toggles slow mode. When ON, users will be able to send only 1 message every 5 seconds.") .Parameter("minutes", ParameterType.Optional) .AddCheck(SimpleCheckers.ManageMessages()) .Do(async e => { //var minutesStr = e.GetArg("minutes"); //if (string.IsNullOrWhiteSpace(minutesStr)) { // RatelimitingChannels.Remove(e.Channel.Id); // return; //} ConcurrentDictionary<ulong, DateTime> throwaway; if (RatelimitingChannels.TryRemove(e.Channel.Id, out throwaway)) { await e.Channel.SendMessage("Slow mode disabled."); return; } if (RatelimitingChannels.TryAdd(e.Channel.Id, new ConcurrentDictionary<ulong, DateTime>())) { await e.Channel.SendMessage("Slow mode initiated. " + "Users can't send more than 1 message every 5 seconds."); } }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("rip") .Description("Shows a grave image of someone with a start year | `@NadekoBot rip @Someone 2000`") .Parameter("user", ParameterType.Required) .Parameter("year", ParameterType.Optional) .Do(async e => { if (string.IsNullOrWhiteSpace(e.GetArg("user"))) return; var usr = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault(); var text = ""; Stream file; if (usr == null) { text = e.GetArg("user"); file = RipName(text, string.IsNullOrWhiteSpace(e.GetArg("year")) ? null : e.GetArg("year")); } else { var avatar = await GetAvatar(usr.AvatarUrl); text = usr.Name; file = RipUser(text, avatar, string.IsNullOrWhiteSpace(e.GetArg("year")) ? null : e.GetArg("year")); } await e.Channel.SendFile("ripzor_m8.png", file); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "leave") .Description("Makes Nadeko leave the server. Either name or id required.\n**Usage**: `.leave 123123123331`") .Parameter("arg", ParameterType.Required) .AddCheck(SimpleCheckers.OwnerOnly()) .Do(async e => { var arg = e.GetArg("arg").Trim(); var server = NadekoBot.Client.Servers.FirstOrDefault(s => s.Id.ToString() == arg) ?? NadekoBot.Client.FindServers(arg).FirstOrDefault(); if (server == null) { await e.Channel.SendMessage("Cannot find that server").ConfigureAwait(false); return; } if (!server.IsOwner) { await server.Leave().ConfigureAwait(false); } else { await server.Delete().ConfigureAwait(false); } await NadekoBot.SendMessageToOwner("Left server " + server.Name).ConfigureAwait(false); }); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("t") .Description("Starts a game of trivia.") .Alias("-t") .Do(DoFunc()); cgb.CreateCommand("tl") .Description("Shows a current trivia leaderboard.") .Alias("-tl") .Alias("tlb") .Alias("-tlb") .Do(async e=> { if (runningTrivias.ContainsKey(e.Server)) await e.Send(runningTrivias[e.Server].GetLeaderboard()); else await e.Send("No trivia is running on this server."); }); cgb.CreateCommand("tq") .Description("Quits current trivia after current question.") .Alias("-tq") .Do(async e=> { if (runningTrivias.ContainsKey(e.Server)) { runningTrivias[e.Server].StopGame(); } else await e.Send("No trivia is running on this server."); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "calculate") .Alias(Module.Prefix + "calc") .Description("Evaluate a mathematical expression.\n**Usage**: ~calc 1+1") .Parameter("expression", ParameterType.Unparsed) .Do(EvalFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "trans") .Description("Translates from>to text. From the given language to the destiation language.") .Parameter("langs", ParameterType.Required) .Parameter("text", ParameterType.Unparsed) .Do(TranslateFunc()); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("-h") .Alias(new string[] { "-help", NadekoBot.botMention + " help", NadekoBot.botMention + " h" }) .Description("Help command") .Do(DoFunc()); }
public CommandService(CommandServiceConfig config) { Config = config; _allCommands = new List<Command>(); _map = new CommandMap(null, "", ""); _categories = new Dictionary<string, CommandMap>(); Root = new CommandGroupBuilder(this, "", null); }
public CommandService(CommandServiceConfig config) { Config = config; _allCommands = new List <Command>(); _map = new CommandMap(); _categories = new Dictionary <string, CommandMap>(); Root = new CommandGroupBuilder(this); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "t") .Description($"Starts a game of trivia. You can add nohint to prevent hints." + "First player to get to 10 points wins by default. You can specify a different number. 30 seconds per question." + $" |`{Module.Prefix}t nohint` or `{Module.Prefix}t 5 nohint`") .Parameter("args", ParameterType.Multiple) .Do(async e => { TriviaGame trivia; if (!RunningTrivias.TryGetValue(e.Server.Id, out trivia)) { var showHints = !e.Args.Contains("nohint"); var number = e.Args.Select(s => { int num; return new Tuple<bool, int>(int.TryParse(s, out num), num); }).Where(t => t.Item1).Select(t => t.Item2).FirstOrDefault(); if (number < 3) { await e.Channel.SendMessage("Number too small."); return; } var triviaGame = new TriviaGame(e, showHints, number == 0 ? 10 : number); if (RunningTrivias.TryAdd(e.Server.Id, triviaGame)) await e.Channel.SendMessage($"**Trivia game started! {triviaGame.WinRequirement} points needed to win.**").ConfigureAwait(false); else await triviaGame.StopGame().ConfigureAwait(false); } else await e.Channel.SendMessage("Trivia game is already running on this server.\n" + trivia.CurrentQuestion).ConfigureAwait(false); }); cgb.CreateCommand(Module.Prefix + "tl") .Description($"Shows a current trivia leaderboard. | `{Prefix}tl`") .Do(async e => { TriviaGame trivia; if (RunningTrivias.TryGetValue(e.Server.Id, out trivia)) await e.Channel.SendMessage(trivia.GetLeaderboard()).ConfigureAwait(false); else await e.Channel.SendMessage("No trivia is running on this server.").ConfigureAwait(false); }); cgb.CreateCommand(Module.Prefix + "tq") .Description($"Quits current trivia after current question. | `{Prefix}tq`") .Do(async e => { TriviaGame trivia; if (RunningTrivias.TryGetValue(e.Server.Id, out trivia)) { await trivia.StopGame().ConfigureAwait(false); } else await e.Channel.SendMessage("No trivia is running on this server.").ConfigureAwait(false); }); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("-h") .Alias(new string[] { "-help", NadekoBot.botMention + " help", NadekoBot.botMention + " h", "~h" }) .Description("Help command") .Do(DoFunc()); cgb.CreateCommand("-hgit") .Description("Help command stylized for github readme") .Do(DoGitFunc()); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("$roll") .Description("Rolls 2 dice from 0-10. If you supply a number [x] it rolls up to 30 normal dice.\n**Usage**: $roll [x]") .Parameter("num", ParameterType.Optional) .Do(DoFunc()); cgb.CreateCommand("$nroll") .Description("Rolls in a given range.\n**Usage**: `$nroll 5` (rolls 0-5) or `$nroll 5-15`") .Parameter("range", ParameterType.Required) .Do(NDoFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "convert") .Description("Convert quantities from>to. Like `~convert m>km 1000`") .Parameter("from-to", ParameterType.Required) .Parameter("quantity", ParameterType.Optional) .Do(ConvertFunc()); cgb.CreateCommand(Module.Prefix + "convertlist") .Description("List of the convertable dimensions and currencies.") .Do(ConvertListFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "pick") .Description("Picks a flower planted in this channel.") .Do(async e => { Message msg; await e.Message.Delete().ConfigureAwait(false); if (!plantedFlowerChannels.TryRemove(e.Channel.Id, out msg)) return; await msg.Delete().ConfigureAwait(false); await FlowersHandler.AddFlowersAsync(e.User, "Picked a flower.", 1, true).ConfigureAwait(false); msg = await e.Channel.SendMessage($"**{e.User.Name}** picked a {NadekoBot.Config.CurrencyName}!").ConfigureAwait(false); await Task.Delay(10000).ConfigureAwait(false); await msg.Delete().ConfigureAwait(false); }); cgb.CreateCommand(Module.Prefix + "plant") .Description("Spend a flower to plant it in this channel. (If bot is restarted or crashes, flower will be lost)") .Do(async e => { lock (locker) { if (plantedFlowerChannels.ContainsKey(e.Channel.Id)) { e.Channel.SendMessage($"There is already a {NadekoBot.Config.CurrencyName} in this channel."); return; } var removed = FlowersHandler.RemoveFlowers(e.User, "Planted a flower.", 1); if (!removed) { e.Channel.SendMessage($"You don't have any {NadekoBot.Config.CurrencyName}s.").Wait(); return; } var rng = new Random(); var file = Directory.GetFiles("data/currency_images").OrderBy(s => rng.Next()).FirstOrDefault(); Message msg; //todo send message after, not in lock if (file == null) msg = e.Channel.SendMessage(NadekoBot.Config.CurrencySign).GetAwaiter().GetResult(); else msg = e.Channel.SendFile(file).GetAwaiter().GetResult(); plantedFlowerChannels.TryAdd(e.Channel.Id, msg); } var vowelFirst = new[] { 'a', 'e', 'i', 'o', 'u' }.Contains(NadekoBot.Config.CurrencyName[0]); var msg2 = await e.Channel.SendMessage($"Oh how Nice! **{e.User.Name}** planted {(vowelFirst ? "an" : "a")} {NadekoBot.Config.CurrencyName}. Pick it using {Module.Prefix}pick"); await Task.Delay(20000).ConfigureAwait(false); await msg2.Delete().ConfigureAwait(false); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("copyme") .Alias("cm") .Description("Nadeko starts copying everything you say. Disable with cs") .Do(DoFunc()); cgb.CreateCommand("cs") .Alias("copystop") .Description("Nadeko stops copying you") .Do(StopCopy()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "roll") .Description("Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice." + " If you split 2 numbers with letter d (xdy) it will roll x dice from 1 to y.\n**Usage**: $roll or $roll 7 or $roll 3d5") .Parameter("num", ParameterType.Optional) .Do(RollFunc()); cgb.CreateCommand(Module.Prefix + "nroll") .Description("Rolls in a given range.\n**Usage**: `$nroll 5` (rolls 0-5) or `$nroll 5-15`") .Parameter("range", ParameterType.Required) .Do(NRollFunc()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "draw") .Description($"Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck. | `{Prefix}draw [x]`") .Parameter("count", ParameterType.Optional) .Do(DrawCardFunc()); cgb.CreateCommand(Module.Prefix + "shuffle") .Alias(Module.Prefix + "sh") .Description($"Reshuffles all cards back into the deck.|`{Prefix}shuffle`") .Do(ReshuffleTask()); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "repeat") .Description("Repeat a message every X minutes. If no parameters are specified, " + "repeat is disabled. Requires manage messages.") .Parameter("minutes", ParameterType.Optional) .Parameter("msg", ParameterType.Unparsed) .AddCheck(SimpleCheckers.ManageMessages()) .Do(async e => { var minutesStr = e.GetArg("minutes"); var msg = e.GetArg("msg"); // if both null, disable if (string.IsNullOrWhiteSpace(msg) && string.IsNullOrWhiteSpace(minutesStr)) { await e.Channel.SendMessage("Repeating disabled"); Repeater rep; if (repeaters.TryGetValue(e.Server, out rep)) rep.MessageTimer.Stop(); return; } int minutes; if (!int.TryParse(minutesStr, out minutes) || minutes < 1 || minutes > 720) { await e.Channel.SendMessage("Invalid value"); return; } var repeater = repeaters.GetOrAdd( e.Server, s => new Repeater { Interval = minutes * 60 * 1000, RepeatingChannel = e.Channel, RepeatingChannelId = e.Channel.Id, RepeatingServerId = e.Server.Id, }.Start() ); if (!string.IsNullOrWhiteSpace(msg)) repeater.RepeatingMessage = msg; repeater.MessageTimer.Stop(); repeater.MessageTimer.Start(); await e.Channel.SendMessage(String.Format("👌 Repeating `{0}` every " + "**{1}** minutes on {2} channel.", repeater.RepeatingMessage, minutes, repeater.RepeatingChannel)); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "wowjoke") .Description($"Get one of Kwoth's penultimate WoW jokes. | `{Prefix}wowjoke`") .Do(async e => { if (!jokes.Any()) { jokes = JsonConvert.DeserializeObject<List<WoWJoke>>(File.ReadAllText("data/wowjokes.json")); } await e.Channel.SendMessage(jokes[new Random().Next(0, jokes.Count)].ToString()); }); }
internal override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand(Module.Prefix + "flip") .Description($"Flips coin(s) - heads or tails, and shows an image. | `{Prefix}flip` or `{Prefix}flip 3`") .Parameter("count", ParameterType.Optional) .Do(FlipCoinFunc()); cgb.CreateCommand(Module.Prefix + "betflip") .Alias(Prefix+"bf") .Description($"Bet to guess will the result be heads or tails. Guessing award you double flowers you've bet. | `{Prefix}bf 5 heads` or `{Prefix}bf 3 t`") .Parameter("amount", ParameterType.Required) .Parameter("guess", ParameterType.Required) .Do(BetFlipCoinFunc()); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("-h") .Alias(new string[] { "-help", NadekoBot.botMention + " help", NadekoBot.botMention + " h", "~h" }) .Description("Help command") .Do(DoFunc()); cgb.CreateCommand("-hgit") .Description("Help command stylized for github readme") .Do(DoGitFunc()); cgb.CreateCommand("-readme") .Alias("-guide") .Description("Sends a readme and a guide links to the channel.") .Do(async e => await e.Send("**FULL README**: <https://github.com/Kwoth/NadekoBot/blob/master/readme.md>\n\n**GUIDE ONLY**: <https://github.com/Kwoth/NadekoBot/blob/master/ComprehensiveGuide.md>")); }
public override void Init(CommandGroupBuilder cgb) { cgb.CreateCommand("$draw") .Description("Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck.\n**Usage**: $draw [x]") .Parameter("count", ParameterType.Optional) .Do(DoFunc()); cgb.CreateCommand("$shuffle") .Alias("$reshuffle") .Description("Reshuffles all cards back into the deck.") .Do(async e => { if (!AllDecks.ContainsKey(e.Server)) AllDecks.TryAdd(e.Server, new Cards()); AllDecks[e.Server].Restart(); await e.Send("Deck reshuffled."); }); }