示例#1
0
        private void _client_OnConnected(object sender, OnConnectedArgs e)
        {
            string[] channels     = _info.ChannelName.Split(new char[] { ',' });
            string[] accessTokens = _info.AccessToken.Split(new char[] { ',' });

            for (int i = 0; i < channels.Length; i++)
            {
                string channel = channels[i].ToLower();
                var    task    = Service.Helix.Users.GetUsersAsync(null, new List <string>(new[] { channel }));
                task.Wait();
                string id = task.Result.Users[0].Id;
                _channelBroadcaster.Add(channel, new BroadcasterInfo(this, id, accessTokens[i]));

                using (DragonBotContext db = new DragonBotContext())
                {
                    if (db.Ranks.Find(_info.DefaultRank, id) == null)
                    {
                        db.Ranks.Add(new Rank()
                        {
                            Channel      = id,
                            Id           = _info.DefaultRank,
                            RankName     = "Default",
                            RankPriority = _info.DefaultRank,
                        });
                        db.SaveChanges();
                    }
                    if (db.Ranks.Find(_info.DefaultVIPRank, id) == null)
                    {
                        db.Ranks.Add(new Rank()
                        {
                            Channel      = id,
                            Id           = _info.DefaultVIPRank,
                            RankName     = "Default",
                            RankPriority = _info.DefaultVIPRank,
                        });
                        db.SaveChanges();
                    }

                    if (db.Ranks.Find(_info.DefaultModRank, id) == null)
                    {
                        db.Ranks.Add(new Rank()
                        {
                            Channel      = id,
                            Id           = _info.DefaultModRank,
                            RankName     = "Default",
                            RankPriority = _info.DefaultModRank,
                        });
                        db.SaveChanges();
                    }
                }

                _client.JoinChannel(channel);
            }
        }
示例#2
0
        public bool HasPermission(string userid, string channel, string permission)
        {
            Rank rank = null;

            using (DragonBotContext db = new DragonBotContext())
            {
                User user = db.Users.Find(userid, channel);
                if (user != null)
                {
                    rank = user.Rank;
                }
                else
                {
                    rank = db.Ranks.Find(_info.DefaultRank, _channelBroadcaster[channel].ID);
                }
            }
            return(true);

            return(rank.RankPerms.Any((perm) => { return perm.RankPerm == permission; }));
        }
示例#3
0
        private void AddUser(TwitchLib.Api.Helix.Models.Users.User userData, TwitchLib.Api.Core.Enums.UserType userType, string channel)
        {
            using (DragonBotContext db = new DragonBotContext())
            {
                BroadcasterInfo broadcaster = _channelBroadcaster[channel];

                List <string> userID = new List <string>(new[] { userData.Id });

                var Sub = Service.Helix.Subscriptions.GetUserSubscriptionsAsync(broadcaster.ID, userID, broadcaster.AccessToken);
                var ban = Service.Helix.Moderation.GetBannedUsersAsync(broadcaster.ID, userID, null, null, broadcaster.AccessToken);
                if (db.Users.Find(userData.Id, broadcaster.ID) != null)
                {
                    return;
                }

                User user = new User();

                if (userType == TwitchLib.Api.Core.Enums.UserType.Viewer)
                {
                    var Follows = Service.Helix.Users.GetUsersFollowsAsync(null, null, 20, userData.Id, broadcaster.ID);

                    bool finished = false;
                    while (!finished)
                    {
                        try
                        {
                            Follows.Wait();
                            finished = true;
                        }
                        catch
                        {
                            Thread.Sleep(30000);
                        }
                    }
                    if (Follows.Result.Follows.Length == 0)
                    {
                        return;
                    }

                    user.Moderator = false;
                    user.Vip       = false;
                    user.Rank      = db.Ranks.Find(Info.DefaultRank, broadcaster.ID);
                }
                else if (userType == TwitchLib.Api.Core.Enums.UserType.VIP)
                {
                    user.Moderator = false;
                    user.Vip       = true;
                    user.Rank      = db.Ranks.Find(Info.DefaultVIPRank, broadcaster.ID);
                }
                else
                {
                    user.Moderator = true;
                    user.Rank      = db.Ranks.Find(Info.DefaultModRank, broadcaster.ID);
                    user.Vip       = true;
                }

                user.Username  = userData.DisplayName;
                user.Id        = userData.Id;
                user.Points    = 0;
                user.Channel   = broadcaster.ID;
                user.Banned    = false;
                user.BitsTotal = 0;
                user.SubStreak = 0;
                user.SubTotal  = 0;

                try
                {
                    Sub.Wait();
                    user.Subbed = Sub.Result.Data.Length == 0;

                    if (user.Subbed)
                    {
                        user.SubTier = int.Parse(Sub.Result.Data[0].Tier);
                    }
                    else
                    {
                        user.SubTier = 0;
                    }
                }
                catch
                {
                    user.Subbed  = false;
                    user.SubTier = 0;
                }

                ban.Wait();
                user.Banned = ban.Result.Data == null;

                ///
                /// Save
                ///
            }
        }