public async Task DisableAdvancedCommand(AdaCommandContext ctx,
                                                 [AdaArgumentParameter("Commands to disable. Consult adahelp for list of commands that can be disabled.", true)] params string[] commands)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var cmds = commands;

            if (cmds.Length == 0)
            {
                throw new ArgumentException("You need to list commands you want to disable.");
            }
            AdvancedCommandsPlugin.Instance.SetEnabled(cmds.ToArray(), gld.Id, false);

            var embed = this.PrepareEmbed(EmbedType.Success);

            embed.AddField(x =>
            {
                x.IsInline = false;
                x.Name     = "Following commands were disabled";
                x.Value    = string.Join(", ", cmds);
            });
            await chn.SendMessageAsync("", false, embed);
        }
示例#2
0
        public async Task RemoveRss(AdaCommandContext ctx,
                                    [AdaArgumentParameter("Mention of the channel to remove the feed from.", true)] ITextChannel channel,
                                    [AdaArgumentParameter("URL of the RSS feed.", true)] string url,
                                    [AdaArgumentParameter("Tag of the feed to use as title prefix.", false)] string tag)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;

            var chf = channel as SocketTextChannel;

            if (chf == null)
            {
                throw new ArgumentException("Invalid channel specified.");
            }

            FeedlePlugin.Instance.RemoveFeed(new Uri(url), chf.Id, tag);
            var embed = this.PrepareEmbed("Success", "Feed was removed successfully.", EmbedType.Success);

            embed.AddField(x =>
            {
                x.IsInline = false;
                x.Name     = "Details";
                x.Value    = string.Concat("Feed pointing to <", url, ">", tag != null ? string.Concat(" and **", tag, "** tag") : "", " was removed from ", chf.Mention, ".");
            });
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task SetColor(AdaCommandContext ctx,
                                   [AdaArgumentParameter("Color in RRGGBB format.", true)] string color)
        {
            var gld = ctx.Guild as SocketGuild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var clr = Convert.ToUInt32(color, 16);
            var url = gld.Roles.FirstOrDefault(xr => xr.Name == usr.Id.ToString()) as IRole;

            if (url == null)
            {
                url = await gld.CreateRoleAsync(usr.Id.ToString(), gld.EveryoneRole.Permissions, null, false);

                await usr.AddRolesAsync(url);
            }
            await url.ModifyAsync(x =>
            {
                x.Color = new s.Color(clr);
            });

            var embed = this.PrepareEmbed("Success", string.Format(usr.Mention, "'s color is now ", clr.ToString("X6")), EmbedType.Success);
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task ColorSquare(AdaCommandContext ctx,
                                      [AdaArgumentParameter("Color in AARRGGBB format.", true)] string color)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            using (var ms = new MemoryStream())
                using (var bmp = new Bitmap(64, 64, PixelFormat.Format32bppPArgb))
                    using (var g = Graphics.FromImage(bmp))
                    {
                        g.CompositingMode    = CompositingMode.SourceOver;
                        g.CompositingQuality = CompositingQuality.HighSpeed;

                        var cli = Convert.ToInt32(color, 16);
                        var clr = d.Color.FromArgb(cli);
                        var csb = new SolidBrush(clr);

                        g.Clear(d.Color.Transparent);
                        g.FillRectangle(csb, new Rectangle(Point.Empty, bmp.Size));
                        g.Flush();

                        bmp.Save(ms, ImageFormat.Png);
                        ms.Seek(0, SeekOrigin.Begin);

                        await chn.SendFileAsync(ms, "color_square.png", string.Concat(usr.Mention, ", here's a ", cli.ToString("X8"), " square."));
                    }
        }
示例#5
0
        public async Task ListRss(AdaCommandContext ctx)
        {
            var gld = ctx.Guild as SocketGuild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var feeds = FeedlePlugin.Instance.GetFeeds(gld.Channels.Select(xch => xch.Id).ToArray());

            var sb = new StringBuilder();

            foreach (var feed in feeds)
            {
                var xch = gld.GetChannel(feed.ChannelId) as SocketTextChannel;
                sb.AppendFormat("**URL**: <{0}>", feed.FeedUri).AppendLine();
                sb.AppendFormat("**Tag**: {0}", feed.Tag).AppendLine();
                sb.AppendFormat("**Channel**: {0}", xch.Mention).AppendLine();
                sb.AppendLine("---------");
            }

            var embed = this.PrepareEmbed("RSS Feeds", "Listing of all RSS feeds on this server.", EmbedType.Info);

            embed.AddField(x =>
            {
                x.IsInline = false;
                x.Name     = "RSS Feeds";
                x.Value    = sb.Length > 0 ? sb.ToString() : "No feeds are configured.";
            });
            await chn.SendMessageAsync("", false, embed);
        }
示例#6
0
        public async Task EditTag(AdaCommandContext ctx,
                                  [AdaArgumentParameter("Name of tag to edit.", true)] string name,
                                  [AdaArgumentParameter("New contents of the tag.", true)] params string[] contents)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;

            var nam = name;
            var tag = string.Join(" ", contents);

            if (string.IsNullOrWhiteSpace(nam) || string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException("Tag needs to have a name and contents.");
            }
            var wrk = TagPlugin.Instance.EditTag(chn.Id, nam, tag);

            if (!wrk)
            {
                throw new ArgumentException("Failed to edit the tag, a tag with given name does not exist for this channel.");
            }

            var embed = this.PrepareEmbed("Success", string.Concat("Edited tag **", nam, "** for this channel."), EmbedType.Success);
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task DisableStallman(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;

            StallmanPlugin.Instance.Disable(gld.Id);

            var embed = this.PrepareEmbed("Success", "GNU/Stallman plugin was disabled for this guild.", EmbedType.Success);
            await ctx.Channel.SendMessageAsync("", false, embed);
        }
        public async Task CreateUuid(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var n1 = Guid.NewGuid().ToString();

            var embed = this.PrepareEmbed("Generated UUID", string.Concat(usr.Mention, ", the UUID you requested is ", n1), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task AsciiToBase64(AdaCommandContext ctx,
                                        [AdaArgumentParameter("ASCII text to convert to Base64.", true)] params string[] ascii_text)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var utf8 = new UTF8Encoding(false);
            var dat  = utf8.GetBytes(string.Join(" ", ascii_text));
            var b64  = Convert.ToBase64String(dat);

            var embed = this.PrepareEmbed("ASCII to Base64", string.Concat(usr.Mention, ": ", b64), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task CreateId(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var rng = new Random();
            var n3  = rng.Next();
            var n2  = BitConverter.GetBytes(n3);
            var n1  = BitConverter.ToString(n2).Replace("-", "").ToLower().Insert(4, "-");

            var embed = this.PrepareEmbed("Generated ID", string.Concat(usr.Mention, ", the ID you requested is ", n1), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }
        public async Task Base64ToAscii(AdaCommandContext ctx,
                                        [AdaArgumentParameter("Base64 text to convert to ASCII.", true)] params string[] base64_text)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var utf8  = new UTF8Encoding(false);
            var dat   = Convert.FromBase64String(string.Join(" ", base64_text));
            var ascii = utf8.GetString(dat);

            var embed = this.PrepareEmbed("Base64 to ASCII", string.Concat(usr.Mention, ": ", ascii), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }
示例#12
0
        public async Task ShowTag(AdaCommandContext ctx,
                                  [AdaArgumentParameter("Name of tag to display.", true)] params string[] name)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;

            var nam = string.Join(" ", name);

            if (string.IsNullOrWhiteSpace(nam))
            {
                throw new ArgumentException("Need to specify a tag to display.");
            }
            var tag = TagPlugin.Instance.GetTag(chn.Id, nam);

            if (tag == null)
            {
                throw new ArgumentException("Invalid tag specified.");
            }

            await chn.SendMessageAsync(tag.Contents);
        }
示例#13
0
        public async Task RemoveTag(AdaCommandContext ctx,
                                    [AdaArgumentParameter("Name of tag to delete.", true)] params string[] name)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;

            var nam = string.Join(" ", name);

            if (string.IsNullOrWhiteSpace(nam))
            {
                throw new ArgumentException("Need to specify a tag to remove.");
            }
            var wrk = TagPlugin.Instance.DeleteTag(chn.Id, nam);

            if (!wrk)
            {
                throw new ArgumentException("Invalid tag specified.");
            }

            var embed = this.PrepareEmbed("Success", string.Concat("Removed tag **", nam, "** for this channel."), EmbedType.Success);
            await chn.SendMessageAsync("", false, embed);
        }
示例#14
0
        public async Task ShowTags(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel as SocketTextChannel;
            var msg = ctx.Message;

            var tags = TagPlugin.Instance.GetTags(chn.Id);

            if (tags.Count() > 0)
            {
                var embed = this.PrepareEmbed("Tag Plugin", string.Concat("List of tags defined for ", chn.Mention, "."), EmbedType.Info);
                embed.AddField(x =>
                {
                    x.IsInline = false;
                    x.Name     = "Defined tags";
                    x.Value    = string.Join(", ", tags.Select(xtag => string.Concat("**", xtag.Id, "**")));
                });
                await chn.SendMessageAsync("", false, embed);
            }
            else
            {
                throw new InvalidOperationException("There are no tags defined for this channel.");
            }
        }
        public async Task Markov(AdaCommandContext ctx)
        {
            var gld = ctx.Guild;
            var chn = ctx.Channel;
            var msg = ctx.Message;
            var usr = ctx.User;

            var chain = new MarkovChain <string>(1);
            var rnd   = new Random();
            var mnt   = (string)null;

            var xmu = msg.MentionedUserIds.Select(xid => gld.GetUserAsync(xid).GetAwaiter().GetResult());
            var xmr = msg.MentionedRoleIds.Select(xid => gld.GetRole(xid));
            var xmc = msg.MentionedChannelIds.Select(xid => gld.GetChannelAsync(xid).GetAwaiter().GetResult());

            if (xmu.Count() == 0 && xmr.Count() == 0 && xmc.Count() == 0)
            {
                throw new ArgumentException("Missing mention.");
            }
            else if (xmu.Count() > 0)
            {
                var mus = xmu.First();
                mnt = mus.Mention;
                var chs  = xmc;
                var maxm = 100;
                var lstm = -1;
                var msgs = new List <IMessage>(maxm);
                var msgt = (IEnumerable <IMessage>)null;
                while (msgs.Count < maxm && lstm != 0)
                {
                    foreach (var xch in chs)
                    {
                        var xcn = xch as SocketTextChannel;
                        if (msgs.Count == 0)
                        {
                            msgt = await xcn.GetMessagesAsync(100).Flatten();

                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id));
                        }
                        if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0)
                        {
                            lstm = Math.Max(msgt.Count(), lstm);
                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author != null && xmsg.Author.Id == mus.Id));
                        }
                    }
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }
            else if (xmr.Count() > 0)
            {
                var mrl = xmr.First();
                mnt = mrl.Mention;
                var chs  = xmc;
                var maxm = 100;
                var lstm = -1;
                var msgs = new List <IMessage>(maxm);
                var msgt = (IEnumerable <IMessage>)null;
                while (msgs.Count < maxm && lstm != 0)
                {
                    foreach (var xch in chs)
                    {
                        var xcn = xch as SocketTextChannel;
                        if (msgs.Count == 0)
                        {
                            msgt = await xcn.GetMessagesAsync(100).Flatten();

                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id)));
                        }
                        if ((await xcn.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgs.Count)).Flatten()).Count() > 0)
                        {
                            lstm = Math.Max(msgt.Count(), lstm);
                            msgs.AddRange(msgt.Where(xmsg => xmsg.Author as SocketGuildUser != null && (xmsg.Author as SocketGuildUser).RoleIds.Contains(mrl.Id)));
                        }
                    }
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }
            else if (xmc.Count() > 0)
            {
                var mch = xmc.First() as SocketTextChannel;
                mnt = mch.Mention;
                var maxm = 500;
                var msgs = new IMessage[maxm];
                var msgi = 0;
                var msgt = (IEnumerable <IMessage>)null;
                msgt = await mch.GetMessagesAsync(100).Flatten();

                Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count());
                while (msgi < maxm && (msgt = await mch.GetMessagesAsync(msgs.OrderByDescending(xm => xm != null ? xm.Timestamp : DateTimeOffset.MinValue).FirstOrDefault(), Direction.Before, Math.Min(100, maxm - msgi)).Flatten()).Count() > 0)
                {
                    Array.Copy(msgt.ToArray(), 0, msgs, msgi, msgt.Count());
                    msgi += msgt.Count();
                }
                foreach (var xmsg in msgs)
                {
                    chain.Add(xmsg.Content.Split(' '), 1);
                }
            }

            var sentence = string.Join(" ", chain.Chain(rnd));
            var embed    = this.PrepareEmbed("Markov Chain", string.Concat("Markov chain of ", mnt, ": ", sentence), EmbedType.Info);
            await chn.SendMessageAsync("", false, embed);
        }