private async Task RescanUser(IGuildUser user, StreamRoleSettings setting, IRole addRole = null) { if (user.Activity is StreamingGame g && g != null && setting.Enabled && !setting.Blacklist.Any(x => x.UserId == user.Id) && user.RoleIds.Contains(setting.FromRoleId) && (string.IsNullOrWhiteSpace(setting.Keyword) || g.Name.ToUpperInvariant().Contains(setting.Keyword.ToUpperInvariant()) || setting.Whitelist.Any(x => x.UserId == user.Id))) { try { addRole = addRole ?? user.Guild.GetRole(setting.AddRoleId); if (addRole == null) { await StopStreamRole(user.Guild).ConfigureAwait(false); _log.Warn("Stream role in server {0} no longer exists. Stopping.", setting.AddRoleId); return; } //check if he doesn't have addrole already, to avoid errors if (!user.RoleIds.Contains(setting.AddRoleId)) { await user.AddRoleAsync(addRole).ConfigureAwait(false); } _log.Info("Added stream role to user {0} in {1} server", user.ToString(), user.Guild.ToString()); } catch (HttpException ex) when(ex.HttpCode == System.Net.HttpStatusCode.Forbidden) { await StopStreamRole(user.Guild).ConfigureAwait(false); _log.Warn("Error adding stream role(s). Forcibly disabling stream role feature."); _log.Error(ex); throw new StreamRolePermissionException(); } catch (Exception ex) { _log.Warn("Failed adding stream role."); _log.Error(ex); } }
private void UpdateCache(ulong guildId, StreamRoleSettings setting) { guildSettings.AddOrUpdate(guildId, (key) => setting, (key, old) => setting); }
private async Task RescanUser(IGuildUser user, StreamRoleSettings setting, IRole addRole = null) { if (user.Game.HasValue && user.Game.Value.StreamType != StreamType.NotStreaming && setting.Enabled && !setting.Blacklist.Any(x => x.UserId == user.Id) && user.RoleIds.Contains(setting.FromRoleId) && (string.IsNullOrWhiteSpace(setting.Keyword) || user.Game.Value.Name.ToLowerInvariant().Contains(setting.Keyword.ToLowerInvariant()) || setting.Whitelist.Any(x => x.UserId == user.Id))) { try { addRole = addRole ?? user.Guild.GetRole(setting.AddRoleId); if (addRole == null) { throw new StreamRoleNotFoundException(); } //check if he doesn't have addrole already, to avoid errors if (!user.RoleIds.Contains(setting.AddRoleId)) { await user.AddRoleAsync(addRole).ConfigureAwait(false); } _log.Info("Added stream role to user {0} in {1} server", user.ToString(), user.Guild.ToString()); } catch (HttpException ex) when(ex.HttpCode == System.Net.HttpStatusCode.Forbidden) { await StopStreamRole(user.Guild).ConfigureAwait(false); _log.Warn("Error adding stream role(s). Forcibly disabling stream role feature."); _log.Error(ex); throw new StreamRolePermissionException(); } catch (Exception ex) { _log.Warn("Failed adding stream role."); _log.Error(ex); } } else { //check if user is in the addrole if (user.RoleIds.Contains(setting.AddRoleId)) { try { addRole = addRole ?? user.Guild.GetRole(setting.AddRoleId); if (addRole == null) { throw new StreamRoleNotFoundException(); } await user.RemoveRoleAsync(addRole).ConfigureAwait(false); _log.Info("Removed stream role from the user {0} in {1} server", user.ToString(), user.Guild.ToString()); } catch (HttpException ex) when(ex.HttpCode == System.Net.HttpStatusCode.Forbidden) { await StopStreamRole(user.Guild).ConfigureAwait(false); _log.Warn("Error removing stream role(s). Forcibly disabling stream role feature."); _log.Error(ex); throw new StreamRolePermissionException(); } } } }