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);
                }
            }
Exemple #2
0
 private void UpdateCache(ulong guildId, StreamRoleSettings setting)
 {
     guildSettings.AddOrUpdate(guildId, (key) => setting, (key, old) => setting);
 }
Exemple #3
0
        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();
                    }
                }
            }
        }