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); }
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!"); }
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(); } }