/// <summary> /// Discord Event Handler for when a Guild is updated from <paramref name="beforeGuild"/> to /// <paramref name="afterGuild"/> /// </summary> /// <param name="beforeGuild"></param> /// <param name="afterGuild"></param> /// <returns></returns> public async Task GuildUpdated(SocketGuild beforeGuild, SocketGuild afterGuild) { if (beforeGuild.Name == afterGuild.Name) { return; } var context = new DiscordGuildUpdate { GuildId = afterGuild.Id, GuildName = afterGuild.Name, IconUrl = afterGuild.IconUrl }; await _bus.Publish(context); }
public async Task UpdateSubs() { var subs = new List <Sub>(); var limit = 100; var offset = 0; var total = 1000; var token = RefreshToken(); for (var count = 0; count <= total; count += 100) { //create client var restClient = new RestClient(@"https://api.twitch.tv/"); //create request var request = new RestRequest(Method.GET); request.Resource = "kraken/channels/223836682/subscriptions"; request.AddQueryParameter("limit", limit.ToString()); request.AddQueryParameter("offset", offset.ToString()); request.AddHeader("Authorization", $"OAuth {token}"); request.AddHeader("Accept", "application/vnd.twitchtv.v5+json"); request.AddHeader("Client-ID", _config.GetSection("Config").GetSection("TwitchClientIdSub").Value); //make request var response = restClient.Execute(request); var data = JsonConvert.DeserializeObject <TwitchSubData>(response.Content); foreach (var subscription in data.subscriptions) { subs.Add(new Sub() { Tier = subscription.sub_plan, TwitchId = subscription.user._id }); } total = data._total; offset += 100; } await UpdateSubTiers(subs.ToArray()); var updateEndpoint = _config["Config:SubTierDiscordUpdate"]; if (!string.IsNullOrEmpty(updateEndpoint)) { var mttvSubs = await _dbContext.UserIdentity. Where(u => u.DiscordId != null). Join(_dbContext.User, identity => identity.UserId, us => us.UserId, (id, u) => new SubTierDiscord(id.DiscordId, u.SubTier)). ToArrayAsync(); var discordUpdateData = new List <DiscordGuildUpdate>(); discordUpdateData.Add(new DiscordGuildUpdate() { GuildId = "446556386076393473", Roles = new List <DiscordUserRoleUpdate> { new DiscordUserRoleUpdate() { RoleId = "522152365374046210", Users = mttvSubs.Where(u => u.SubTier == 3).Select(u => u.DiscordId).ToList() } } }); var fullInfo = await(from userSubscription in _dbContext.UserSubscription join subscription in _dbContext.Subscription on userSubscription.SubscriptionId equals subscription.SubscriptionId join subscriptionTier in _dbContext.SubscriptionTier on userSubscription.SubscriptionTierId equals subscriptionTier.SubscriptionTierId join userIdentity in _dbContext.UserIdentity on userSubscription.UserId equals userIdentity.UserId join user in _dbContext.User on userSubscription.UserId equals user.UserId select new { userSubscription, subscription, subscriptionTier, userIdentity, isBanned = user.IsBanned }).Where(sub => !sub.isBanned && sub.subscription.DiscordGuildId != null && sub.userSubscription.LastSubDate.Value.AddDays(sub.subscription.Duration) > DateTime.Now).ToArrayAsync(); var subInfo = await(from subscription in _dbContext.Subscription join subscriptionTier in _dbContext.SubscriptionTier on subscription.SubscriptionId equals subscriptionTier.SubscriptionId select new { subscription, subscriptionTier }).Where(sub => sub.subscription.DiscordGuildId != null).ToArrayAsync(); foreach (var sub in subInfo) { if (string.IsNullOrEmpty(sub.subscriptionTier.Data)) { continue; } string roleId = string.Empty; try { roleId = JObject.Parse(sub.subscriptionTier.Data)["DiscordRoleId"].ToString(); } catch { continue; } var update = discordUpdateData.FirstOrDefault(d => d.GuildId == sub.subscription.DiscordGuildId); if (update == null) { update = new DiscordGuildUpdate() { GuildId = sub.subscription.DiscordGuildId }; discordUpdateData.Add(update); } var role = update.Roles.FirstOrDefault(r => r.RoleId == roleId); if (role == null) { role = new DiscordUserRoleUpdate() { RoleId = roleId }; update.Roles.Add(role); } } foreach (var sub in fullInfo) { if (string.IsNullOrEmpty(sub.subscriptionTier.Data)) { continue; } string roleId = string.Empty; try { roleId = JObject.Parse(sub.subscriptionTier.Data)["DiscordRoleId"].ToString(); } catch { continue; } var update = discordUpdateData.FirstOrDefault(d => d.GuildId == sub.subscription.DiscordGuildId); if (update != null) { var role = update.Roles.FirstOrDefault(r => r.RoleId == roleId); role.Users.Add(sub.userIdentity.DiscordId); } } var client = new RestClient(updateEndpoint); //create request var req = new RestRequest(Method.POST); req.Resource = "discord"; req.AddJsonBody(discordUpdateData); var r = client.Execute(req); } }