コード例 #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);
        }
コード例 #2
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!");
        }
コード例 #3
0
        public async Task MDRApply(string house = null, string division = null, string team = null, string roster = null)
        {
            DIUnit unit = _mdr.GetUnit(house, division, team, roster);

            try
            {
                var response = "Following members were found:\n\n" + unit.Members
                               .Select(x => x.Name + (x.DiscordId > 0 ? $" - ({Context.Guild.GetUser(x.DiscordId)?.Mention ?? ""})" : ""))
                               .Aggregate((a, b) => a + "\n" + b);

                await ReplyMultiMessageAsync(response);
            }
            catch (Exception e)
            {
                e.ToString();
            }
        }