/// <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);
 }
Exemple #2
0
        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);
            }
        }