Exemplo n.º 1
0
        public async Task Reset(CommandContext ctx)
        {
            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                data.ResetDatabase();

                await ctx.Message.RespondAsync("Reset complete.");
            }
        }
Exemplo n.º 2
0
        public async Task CheckActive(CommandContext ctx)
        {
            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                var active = data.GetActive();

                await ctx.Message.RespondAsync(string.Join('\n', active.Select(x => x.Username + ", last activity " + ((data.GetLastActivity(x) > 0) ? FromUnixTimeStamp(data.GetLastActivity(x)).ToShortDateString() : " ALWAYSACTIVE"))));
            }
        }
Exemplo n.º 3
0
 public async Task PingInactive(CommandContext ctx, string message)
 {
     using (var data = new SqliteDataConnector(ctx.Guild))
     {
         foreach (var member in data.GetInactive())
         {
             await member.SendMessageAsync(message);
         }
     }
 }
Exemplo n.º 4
0
        public async Task SetInactive(CommandContext ctx, string mention)
        {
            var user = ctx.Guild.Members.First(x => x.Mention.Equals(mention));

            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                data.SetInactive(user);
                await ctx.Message.RespondAsync(user.DisplayName + " is not an active member anymore");
            }
        }
Exemplo n.º 5
0
        public async Task SetAlwaysActive(CommandContext ctx, string mention)
        {
            var user = ctx.Guild.Members.First(x => mention.Contains(x.Id.ToString()));

            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                if (!data.IsInDatabase(user))
                {
                    data.SetActive(user);
                    await ctx.Message.RespondAsync(user.Mention + " added to active members");
                }

                data.SetAlwaysActive(user, true);
            }
        }
Exemplo n.º 6
0
        public async Task SetActive(CommandContext ctx, string mention)
        {
            var user = ctx.Guild.Members.First(x => x.Mention.Equals(mention));

            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                if (!data.IsInDatabase(user))
                {
                    data.SetActive(user);
                    await ctx.Message.RespondAsync(user.Mention + " added to active members");
                }
                else
                {
                    await ctx.Message.RespondAsync(user.DisplayName + " is already an active member");
                }
            }
        }
Exemplo n.º 7
0
        public async Task Reset(CommandContext ctx, string roleName)
        {
            var role = ctx.Guild.Roles.FirstOrDefault(x => x.Name.ToLower() == roleName.ToLower());

            using (var data = new SqliteDataConnector(ctx.Guild))
            {
                data.ResetDatabase();

                var result = data.AddRoleAsActive(ctx.Guild, role);

                await ctx.Channel.SendMessageAsync("Reset complete.");

                await ctx.Channel.SendMessageAsync("Following members set as active:");

                await ctx.Channel.SendMessageAsync(string.Join('\n', result.Select(x => x.DisplayName)));
            }
        }
Exemplo n.º 8
0
        private static async Task MainAsync(string[] args)
        {
            discord = new DiscordClient(new DiscordConfiguration
            {
                Token     = "SUPERSECRET",
                TokenType = TokenType.Bot
            });
            var commandConfig = new CommandsNextConfiguration();

            commandConfig.StringPrefixes = new List <string>()
            {
                "!!"
            };
            commands = discord.UseCommandsNext(commandConfig);

            discord.MessageCreated += (messageCreateEventArgs) =>
            {
                if (messageCreateEventArgs.Guild == null && !messageCreateEventArgs.Author.IsBot)
                {
                    lock (fileLock)
                    {
                        using (StreamWriter sw = new StreamWriter(logFile, true))
                        {
                            if (messageCreateEventArgs.Message.Content.StartsWith("!!"))
                            {
                                sw.WriteLine("[" + DateTime.UtcNow.ToShortTimeString() + "]" + "[CMD]" + "(" + messageCreateEventArgs.Author.Mention + " aka " + messageCreateEventArgs.Author.Username + ")" + messageCreateEventArgs.Message.Content);
                            }
                            else
                            {
                                sw.WriteLine("[" + DateTime.UtcNow.ToShortTimeString() + "]" + "[MSG]" + "(" + messageCreateEventArgs.Author.Mention + " aka " + messageCreateEventArgs.Author.Username + ")" + messageCreateEventArgs.Message.Content);
                            }
                        }
                    }
                }
                return(null);
            };

            discord.MessageCreated += (messageCreateEventArgs) =>
            {
                if (messageCreateEventArgs.Message.Content.ToLower().EndsWith("stop"))
                {
                    messageCreateEventArgs.Message.RespondAsync("**HAMMERTIME**");
                }
                return(null);
            };

            discord.MessageCreated += async(messageCreateEventArgs) =>
            {
                Regex pr0grammLinkRegex = new Regex("pr0gramm\\.com\\/[newtopuser]+\\/[\\/a-zA-Z]*([0-9]+)");
                var   msg            = messageCreateEventArgs.Message.Content;
                var   mention        = messageCreateEventArgs.Message.Author.Mention;
                var   apiUrl         = @"http://pr0gramm.com/api/items/get?id=";
                var   apiUrlComments = @"http://pr0gramm.com/api/items/info?itemId=";

                var matches = pr0grammLinkRegex.Matches(msg);
                if (matches.Count > 0 && !msg.Contains("\n") && !messageCreateEventArgs.Author.IsBot)
                {
                    var    id      = matches.FirstOrDefault().Groups[1].ToString();
                    string thumb   = "";
                    string comment = "";
                    string link    = "";

                    using (HttpClient client = new HttpClient())
                        using (HttpResponseMessage response = await client.GetAsync(apiUrl + id))
                            using (HttpContent content = response.Content)
                            {
                                string jsonString = await content.ReadAsStringAsync();

                                var    json = JObject.Parse(jsonString);
                                JToken pr0Result;
                                json.TryGetValue("items", out pr0Result);

                                var item = pr0Result.FirstOrDefault();

                                var image = item["image"].ToString();
                                if (image.EndsWith("jpg") || image.EndsWith("png") || image.EndsWith("gif"))
                                {
                                    thumb = @"http://img.pr0gramm.com/" + image;
                                }
                                else
                                {
                                    thumb = @"http://thumb.pr0gramm.com/" + item["thumb"];
                                }
                                id   = item["id"].ToString();
                                link = @"http://pr0gramm.com/new/" + id;
                            }

                    using (HttpClient client = new HttpClient())
                        using (HttpResponseMessage response = await client.GetAsync(apiUrlComments + id))
                            using (HttpContent content = response.Content)
                            {
                                string jsonString = await content.ReadAsStringAsync();

                                var    json = JObject.Parse(jsonString);
                                JToken pr0Result;
                                json.TryGetValue("comments", out pr0Result);
                                int upvotes = 0;
                                foreach (var item in pr0Result)
                                {
                                    if (int.Parse(item["up"].ToString()) > upvotes)
                                    {
                                        upvotes = int.Parse(item["up"].ToString());
                                        comment = item["content"].ToString();
                                    }
                                }
                            }

                    await messageCreateEventArgs.Message.RespondAsync(mention);

                    await messageCreateEventArgs.Message.RespondAsync(thumb);

                    await messageCreateEventArgs.Message.RespondAsync(link + "\nComment: *" + comment + "*");

                    await messageCreateEventArgs.Message.DeleteAsync();
                }
            };

            discord.MessageCreated += async(messageCreateEventArgs) =>
            {
                try
                {
                    var data = new SqliteDataConnector(messageCreateEventArgs.Guild);
                    if (data.IsInDatabase(messageCreateEventArgs.Author))
                    {
                        data.UpdateActivity(messageCreateEventArgs.Author);
                    }
                }
                catch (Exception)
                {
                }
            };

            commands.CommandExecuted += (commandExecutionEventArgs) =>
            {
                var ctx = commandExecutionEventArgs.Context;
                ctx.Message.DeleteAsync();
                return(null);
            };

            commands.RegisterCommands <PublicCommands>();
            commands.RegisterCommands <Commands.Information>();
            commands.RegisterCommands <Commands.Administration>();
            commands.RegisterCommands <Commands.Pr0gramm>();

            await discord.ConnectAsync();

            await Task.Delay(-1);
        }
Exemplo n.º 9
0
        public static Image DrawActiveMemberStructure(DiscordGuild guild, string fontFamilyString = null, int offsetX = 0, int offsetY = 0)
        {
            // Organize the GuildStructure to get the Size right
            FontFamily fontFamily;

            if (fontFamilyString == null)
            {
                fontFamily = new FontFamily("Arial");
            }
            else
            {
                fontFamily = new FontFamily(fontFamilyString);
            }

            var smallFont = new Font(
                fontFamily,
                10,
                FontStyle.Regular,
                GraphicsUnit.Point);

            var bigFont = new Font(
                fontFamily,
                14,
                FontStyle.Bold,
                GraphicsUnit.Point);

            var   data          = new SqliteDataConnector(guild);
            var   activeMembers = data.GetActive();
            var   grouped       = new Dictionary <DiscordRole, HashSet <DiscordMember> >();
            float neededWidth   = 0;
            float neededHeight  = 0;

            Image    img     = new Bitmap(1, 1);
            Graphics drawing = Graphics.FromImage(img);

            foreach (var member in activeMembers)
            {
                foreach (var role in member.Roles)
                {
                    if (!grouped.ContainsKey(role))
                    {
                        grouped.Add(role, new HashSet <DiscordMember>());
                    }
                    grouped[role].Add(member);
                }
            }

            var actualTexts = new Dictionary <DiscordRole, string>();

            foreach (var item in grouped)
            {
                actualTexts.Add(item.Key, string.Join("\n", item.Value.Select(x => x.DisplayName)));
                var roleMemberTextSize = drawing.MeasureString(actualTexts[item.Key], smallFont);
                var roleTextSize       = drawing.MeasureString(item.Key.Name, bigFont);
                neededHeight += roleMemberTextSize.Height;
                neededWidth  += (roleMemberTextSize.Width > roleTextSize.Width ? roleMemberTextSize.Width : roleTextSize.Width) + 5;
            }
            var roleNameTextHeight = drawing.MeasureString("X", bigFont).Height + 5;;

            neededHeight += roleNameTextHeight;

            //free up the dummy image and old graphics object
            img.Dispose();
            drawing.Dispose();

            //create a new image of the right size
            img = new Bitmap((int)neededWidth + 11, (int)neededHeight + 11);

            drawing = Graphics.FromImage(img);

            //paint the background
            drawing.Clear(Color.DarkGray);

            //create a brush for the text
            Brush textBrush       = new SolidBrush(Color.White);
            int   currentPosition = 5;

            foreach (var item in actualTexts)
            {
                var color = item.Key.Color;
                drawing.DrawString(item.Key.Name, bigFont, new SolidBrush(Color.FromArgb(255, color.R, color.G, color.B)), currentPosition, 0);
                drawing.DrawString(item.Value, smallFont, textBrush, currentPosition, roleNameTextHeight);
                currentPosition += (int)drawing.MeasureString(actualTexts[item.Key], smallFont).Width + 5;
            }

            drawing.Save();

            textBrush.Dispose();
            drawing.Dispose();

            return(img);
        }