public async Task CheckForLeavers(CommandContext ctx, string clanTag) { var roles = ctx.Member.Roles.ToList(); var verification = await IsVerifiedAsync(ctx, true); var clan = await GetClanFromTagOrNameAsync(ctx, clanTag); clanTag = clanTag.ToLower(); if (clan != null && verification == ErrorCode.Qualify && !string.IsNullOrEmpty(clan.details.Tag)) { var discordEmbed = Core.Discord.CreateFancyMessage(DiscordColor.Turquoise, "Checking for leavers..."); DiscordMessage msg = await ctx.RespondAsync(discordEmbed); var leavers = await BungieTools.CheckForLeaves(clan, true); if (leavers.Count > 0) { await msg.DeleteAsync(); var fields = new List <Field>(); Core.Discord.SendFancyListMessage(ctx.Channel, clan, leavers, "Users found leaving " + clan.details.Name + ":"); } else { discordEmbed = Core.Discord.CreateFancyMessage(DiscordColor.SpringGreen, "No leavers found", "No one to remove from sheet <:unipeepo:601277029459034112>"); await msg.ModifyAsync(discordEmbed); } await ThankUsage(ctx, clan, 100); } }
public async Task CheckForInactives(CommandContext ctx, string clanTag, string threshold = "-1") { var roles = ctx.Member.Roles.ToList(); var verification = await IsVerifiedAsync(ctx, true); var clan = await GetClanFromTagOrNameAsync(ctx, clanTag); clanTag = clanTag.ToLower(); List <BungieSharper.Schema.GroupsV2.GroupMember> inactives = new (); List <TimeSpan> inactiveTimes = new (); int inactivityLimit = ConfigValues.InactivityThreshold; if (clan != null && verification == ErrorCode.Qualify && !string.IsNullOrEmpty(clan.details.Tag)) { if (threshold == "-1") { threshold = ConfigValues.InactivityThreshold.ToString(); } var clanMembers = await BungieTools.GetClanMembers(clan); foreach (var member in clanMembers) { var lastLogon = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(member.lastOnlineStatusChange)); var inactivityDuration = DateTime.UtcNow - lastLogon; int.TryParse(threshold, out inactivityLimit); if (inactivityLimit < 0) { inactivityLimit = ConfigValues.InactivityThreshold; } if (inactivityDuration.TotalDays > inactivityLimit && member.lastOnlineStatusChange != 0 && member.memberType != RuntimeGroupMemberType.Founder) { inactives.Add(member); inactiveTimes.Add(inactivityDuration); } } if (inactives.Count > 0) { Core.Discord.SendInactivityListMessage(ctx.Channel, clan, inactives, inactiveTimes, "Here's all the " + clan.details.Name + " users above " + threshold + " days of inactivity:"); await ThankUsage(ctx, clan, 100); } else { DiscordEmbed message; if (inactivityLimit == ConfigValues.InactivityThreshold) { message = Core.Discord.CreateFancyMessage(clan.details.DiscordColour, "I found no " + clan.details.Name + " members above " + threshold + "days of inactivity!", "Try a lower threshold to see if there's users creeping up to " + ConfigValues.InactivityThreshold + " days!"); } else { message = Core.Discord.CreateFancyMessage(clan.details.DiscordColour, "I found no " + clan.details.Name + " members above " + threshold + "days of inactivity!", null); } await Core.Discord.SendFancyMessage(ctx.Channel, message); } } }
public static async Task CheckForLeavers(Clan clan) { Log.Information("Checking for leavers for " + clan.details.Name); var Leavers = await BungieTools.CheckForLeaves(clan); foreach (var channel in Core.Discord.alertsChannels) { Core.Discord.SendFancyListMessage(channel, clan, Leavers, "Users found leaving " + clan.details.Name + ":"); } //Core.Discord.alertsChannels.ForEach(async channel => //{ // Core.Discord.SendFancyListMessage(channel, clan, Leavers, "Users found leaving " + clan.details.BungieNetName + ":"); //}); //Core.Discord.SendFancyListMessage(Core.Discord.alertsChannel ,clan, Leavers, "Users found leaving " + clan.details.BungieNetName + ":"); }
public static async Task Discord_GuildMemberRemoved(DiscordClient client, GuildMemberRemoveEventArgs e) { new Thread(async() => { var member = SpreadsheetTools.CheckUserAgainstSpreadsheet(e.Member.Id.ToString()); if (member != null) { var clan = BungieTools.GetClanFromTag(member.ClanTag); var discordEmbed = Core.Discord.CreateFancyMessage(clan.details.DiscordColour, clan.details.Name + " Member left Discord server!", "User was found on spreadsheet.", new List <Field>(2) { new Field("Username", e.Member.Username + '#' + e.Member.Discriminator), new Field("ID", e.Member.Id.ToString()) }); Log.Information("Detected " + clan.details.Name + " member leaving discord"); List <DiscordMessage> messages = new List <DiscordMessage>(); foreach (var channel in Core.Discord.alertsChannels) { messages.Add(await Core.Discord.SendFancyMessage(channel, discordEmbed)); } } }).Start(); }
static async Task <Clan> GetClanFromTagOrNameAsync(CommandContext ctx, string clanNameOrTag) { var clanByTag = BungieTools.GetClanFromTag(clanNameOrTag); var clanByName = BungieTools.GetClanFromName(clanNameOrTag); if (clanByTag != null) { return(clanByTag); } else if (clanByName != null) { return(clanByName); } else { var discordEmbed = Core.Discord.CreateFancyMessage(DiscordColor.IndianRed, "Sorry!", "The clan you provided is invalid!"); await ctx.RespondAsync(discordEmbed); return(null); } }