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); } }
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; })); }
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 /// } }