Конструкция
- Код: Выделить всё
AND g.group_single_user = 0;
, как я понимаю, имеет единственное предназначения - ограничить область просмотра, чтобы "отсечь" группы, где в таблице
(префикс)_groups стоит group_single_user = 1 (а связанных с ними записей в таблице (префикс)_user_group, как правило, подавляющее большинство, так как для каждого пользователя создаётся "своя" группа). Но стоит ли овчинка выделки ?

Запрос к связанным таблицам выполняется дольше, чем к одной. Кроме того,
в таблице (префикс)_user_group атрибуты group_id и user_id - это составляющие первичного ключа, то есть поиск должен происходить быстро. Поэтому, скорее всего, в этой последней части переменной sql нет необходимости.
А вот что, полагаю, нужно было бы сделать, "чтобы соблюсти все формальности", - так это дополнительную проверку на корректность получения результатов запроса к таблице (префикс)_user_group. Поэтому предлагаю:
$sql = "SELECT * FROM " . USER_GROUP_TABLE ."
WHERE group_id IN (##, ##, ##) AND user_id = ".$userdata['user_id'].";";
$result = $db->sql_query($sql);
if ($result <> false)
{
if ($db->sql_numrows($result) > 0) $link_count=0;
}
Хотя, может быть, это уже буквоедство
И ещё. Полагаю, что внесение администратором пользователей вручную в "элитные" группы, члены которых имеют право размещать ссылки, - гораздо более предпочтительно, чем автоматическое предоставление права размещать ссылки, начиная с энного сообщения на форуме, как предлагается в данном моде.
Дело в том, что боты рано или поздно "научатся", что надо сначала отправлять какое-то количество сообщений без ссылок, а потом уже начинать размещать ссылки. Кстати, я встречал на форумах такие многократные сообщения без ссылок, явно разосланные роботами с какой-то конкретной целью, типа "всем привет !!!" и т.д.
В итоге может получиться так, что массовое внедрение администраторами форумов Detector Bots в его нынешнем виде может спровоцировать поток флуда на форумы с целью переведения участников-роботов из категории новичков в категорию имеющих право размещать ссылки.