Exemple #1
0
        public async Task EventRsvpCheck(int eventId, string house = null, string division = null, string team = null, string roster = null, bool mention = false)
        {
            var client = DIHttpClient.CreateWithAuthCookies(ConfigUtil.Config.AuthConfig.Cookies);

            var evt = _calendar.Calendars.SelectMany(x => x.Events).FirstOrDefault(x => x.EventID == eventId);

            if (evt == null)
            {
                await ReplyAsync("No event with that ID could be found!");

                return;
            }

            var rsvpMembers = await client.GetEventRsvpAsync(evt.TitleUrl);

            DIUnit unit = _mdr.GetUnit(house, division, team, roster);

            var members = unit.Members.Where(x => x.Rank != DIRank.Associate && x.Rank != DIRank.AwayST && x.Rank != DIRank.AwayLT);

            var memberCount     = members.Count();
            var memberRsvpCount = members.Select(x => x.Name).Intersect(rsvpMembers).Count();

            var response = $"RSVP Rate: {memberRsvpCount}/{memberCount} ({((memberRsvpCount / (float)memberCount) * 100).ToString("0.00")}%). People missing:\n\n" +
                           members
                           .Select(x => x.Name)
                           .Except(rsvpMembers)
                           .Select(x => mention && members.First(y => y.Name == x)?.DiscordId > 0 ? Context.Guild.GetUser(members.First(y => y.Name == x).DiscordId)?.Mention ?? x : x)
                           .Aggregate((a, b) => a + "\n" + b);

            await ReplyAsync("", false, evt.GetEmbed());

            await ReplyMultiMessageAsync(response);
        }
Exemple #2
0
        public void Update()
        {
            var oldUsers = Members.ToList();

            SubUnits.Clear();

            try
            {
                var handler = new HttpClientHandler();

                handler.CookieContainer = new CookieContainer();

                ConfigUtil.Config.AuthConfig.Cookies
                .Select(x => new System.Net.Cookie(x.Name, x.Value, x.Path, x.Domain))
                .ToList()
                .ForEach(x => handler.CookieContainer.Add(x));

                var result = new DIHttpClient(handler).GetStringAsync("mdr/").GetAwaiter().GetResult();

                var doc = new HtmlDocument();
                doc.LoadHtml(result);

                foreach (var node in doc.DocumentNode.SelectNodes("//a"))
                {
                    var user = new DIUser();

                    if (!Enum.TryParse(node.Attributes["class"]?.Value.Replace("-", "") ?? "", true, out user.Rank))
                    {
                        continue;
                    }

                    user.Name = node.InnerText.Split(' ')[0].Trim();
                    user.Id   = Convert.ToInt32(ProfileUrlRegex.Match(node.Attributes["href"].Value).Groups[2].Value);

                    AddDIUnitInformation(user, node);

                    DIUser oldUser = null;

                    if ((oldUser = oldUsers.FirstOrDefault(x => x.Id == user.Id)) != null)
                    {
                        user.DiscordId = oldUser.DiscordId;
                        user.ImageUrl  = oldUser.ImageUrl;
                    }

                    AddUser(user);
                }
            }
            catch (Exception e)
            {
                e.ToString();
            }
        }
Exemple #3
0
        public async Task EventRsvpRemind(int eventId, string house, string division, string team, string roster)
        {
            var client = DIHttpClient.CreateWithAuthCookies(ConfigUtil.Config.AuthConfig.Cookies);

            var evt = _calendar.Calendars.SelectMany(x => x.Events).FirstOrDefault(x => x.EventID == eventId);

            if (evt == null)
            {
                await ReplyAsync("No event with that ID could be found!");

                return;
            }

            var rsvpMembers = await client.GetEventRsvpAsync(evt.TitleUrl);

            DIUnit unit = _mdr.GetUnit(house, division, team, roster);

            var members = unit.Members.Where(x => x.Rank != DIRank.Associate && x.Rank != DIRank.AwayST && x.Rank != DIRank.AwayLT);

            var guildUsers = members
                             .Where(x => !rsvpMembers.Contains(x.Name) && x.DiscordId > 0)
                             .Select(x => Context.Guild.GetUser(x.DiscordId))
                             .Where(x => x != null);

            foreach (var guildUser in guildUsers)
            {
                await guildUser.SendMessageAsync($"Hello {guildUser.Username}!\n" +
                                                 $"\n" +
                                                 $"This is a reminder message from {Context.User.Username} to" +
                                                 $"RSVP to the shown event.\n" +
                                                 $"\n" +
                                                 $"What is RSVP? - Open the event and you will find 3 buttons" +
                                                 $"on the left to click: \"Going\", \"Maybe\" and \"Decline\"." +
                                                 $"RSVP means literally \"Respond please\" meaning you should" +
                                                 $"click any of those buttons to inform the event host about" +
                                                 $"whether you will attend or not.\n" +
                                                 $"\n" +
                                                 $"Why do I get reminders for this? - Some events are mandatory" +
                                                 $"to RSVP too and you might end up getting a strike for it.\n" +
                                                 $"\n" +
                                                 $"Any questions left? Feel free to ask @Amryu#1337 about it!",
                                                 false,
                                                 evt.GetEmbed("Open event in browser"));
            }

            await ReplyAsync($"{guildUsers.Count()} users were successfully notified!");
        }
Exemple #4
0
        private void CalendarLoop(object sender, ElapsedEventArgs evt)
        {
            _timer.Enabled  = false;
            _timer.Interval = 300000;

            if (_diCals == null)
            {
                _diCals = new Dictionary <string, DICalendar>();

                foreach (var cal in ConfigUtil.Config.Calendars)
                {
                    _diCals.Add(cal, File.Exists("calendars/" + cal) ? DICalendar.LoadCalendar(cal) : new DICalendar(cal));
                }
            }

            var handler = new HttpClientHandler();

            handler.CookieContainer = new CookieContainer();

            ConfigUtil.Config.AuthConfig.Cookies
            .Select(x => new System.Net.Cookie(x.Name, x.Value, x.Path, x.Domain))
            .ToList()
            .ForEach(x => handler.CookieContainer.Add(x));

            var client = new DIHttpClient(handler);

            foreach (var cal in ConfigUtil.Config.Calendars)
            {
                var vCal = Calendar.Load(client
                                         .GetCalendarAsync(cal)
                                         .GetAwaiter().GetResult());

                lock (_diCals[cal])
                {
                    _diCals[cal].ProcessEvents(vCal, _discord, _mdr);

                    DICalendar.SaveCalendar(_diCals[cal]);
                }
            }

            _timer.Enabled = true;
        }