internal static async Task ScanChannels(DiscordClient client) { while (bRunning) { var lastId = ulong.MinValue; var lastGuild = ulong.MinValue; Ttv.Logger.LogInformation("Start Cycle"); try { var streams = await da.GetStreamers(); foreach (DataRow stream in streams.Rows) { try { var discordId = ulong.Parse(stream["discordId"].ToString()); var guild = client.GetGuildAsync(ulong.Parse(stream["guildId"].ToString()), false).Result; Ttv.Logger.LogDebug($"Checking {stream["name"]} in {guild.Name}"); if (!IsMemberStillHere(discordId, client, guild)) { continue; } var streamId = twitch.GetChannelId(stream["name"].ToString()); if (string.IsNullOrEmpty(streamId) || !twitch.IsOnline(streamId)) { continue; } var message = string.Empty; switch (stream["approved"].ToString()) { case "1": { message = $"🔴 Hey @here! <@!{discordId}> Is Live!"; break; } default: { message = $"🔴 Hey All! <@!{discordId}> Is Live!"; break; } } try { var embed = twitch.BuildPromoEmbed(stream["name"].ToString()); if (embed == null) { throw new Exception("No Embed Created"); } var channel = GetChannelFromId(client, ulong.Parse(stream["channelId"].ToString())); if (channel.GuildId == lastGuild && discordId == lastId) { continue; } await channel.SendMessageAsync($"{message}", embed : embed); await LogAction($"{stream["name"]} has been promoted for <@!{discordId}> [{discordId}]", client); lastId = discordId; lastGuild = channel.GuildId.Value; } catch (Exception) { Ttv.Logger.LogInformation($"No Embed Created For {stream["name"]}, Will skip."); continue; } var now = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm"); da.UpdateStream(stream["id"].ToString(), now); } catch (Exception e) { if (e.Message.Contains("One or more errors occurred. (Not found: 404)")) { continue; } Ttv.Logger.LogCritical($"{e}"); await LogAction($"TwitchTV Module encountered an error while scanning channel {stream["name"]} \n {e.Message}\n```{e}```", client); } } } catch (Exception e) { Ttv.Logger.LogCritical($"{e}"); await LogAction($"TwitchTV Module encountered an error in task `ScanChannels() ` \n {e.Message}\n```{e}```", client); } Thread.Sleep(TimeSpan.FromSeconds(30)); } }