Пожелания zxc

Started by sхс on 2024-08-29 04:42 — 26 replies, 7076 views

#11
Еще одна идея по языкам. Допустим, если на сайт заходят помимо русскоязычных пользователей, немало англоязычных, то им русское оформление раздачи бесполезно (особенно если в релизе файлы исключительно на иностранном языке).

При оформлении раздачи я определяю какой язык раздачи установлен ( по name="msg[lang][]) и тогда подкидываю соответсвующие переменные.

Либо определяю какой язык преобладает в тексте с помощью GitHub - patrickschur/language-detection: A language detection library for PHP. Detects the language from a given text string.
А текст раздачи и её описание - переводите как-то на язык пользователя который зашёл? Или как?
#12
А текст раздачи и её описание - переводите как-то на язык пользователя который зашёл? Или как?
Если эта либа определяет, что большая часть текста description на русском, но при этом у раздачи Язык: Английский, то оставляю как есть на русском.
Если всё на забугорном, то подставляю языковые переменные на английском
#13
Если эта либа определяет, что большая часть текста на русском, но при этом у раздачи Язык: Английский, то оставляю как есть на русском.
Если всё на забугорном, то подставляю языковые переменные на английском
А, вот оно как. Ну достаточно умно вы придумали) возьму на заметку.
#14
Ну это для гугла больше придумано. Если забугорный товарищ приходит из поиска за книгой, то русские кракозябры ну совсем ему ни к чему. Еще в SEO есть такая тема, что если в тексте присутсвуtn криллица, то у страницы меньше шансов попасть в англоязычную выдачу
#15
Продолжим тему языков 😆



Делается это очень просто. Добавляется класс .selectpicker (нужно подключать jquery selectpicker js) в <select и меняется msg[lang] на msg[lang][]

<tr>
    <td><b>{L_LANG}</b> <sup><i class="fa fa-asterisk red" aria-hidden="true"></i></sup></td>
    <td colspan="2"><select required multiple="multiple" data-live-search="true" class="form-control selectpicker" name="msg[lang][]" title="{L_NOT_SELECTED}"><script type="text/javascript">document.writeln(make_format_list(lang));</script></select></td>
</tr>

includes/topic_templates/....php меняем на
$msg[$item] = (is_array(@$_POST['msg'][$item])) ? implode(', ',@$_POST['msg'][$item]) : @$_POST['msg'][$item];

Увы, старая ревизия, пути уже давно не те, кто не поймет - тот не поймет
#16
Последняя тема по языкам -> Выбор языка в углу сайта
#17
Немного про систему банов. Если мы забанили пользователя, что ему мешает зарегистрироваться снова?

usercp_register.php
после
$tp_data = array(); // данные для tpl
добавляем
// НЕ ДАЕМ СНОВА РЕГИСТРИРОВАТЬСЯ ТЕМ, КТО ЗАБАНЕН

    $result = DB()->fetch_rowset("SELECT ban_userid FROM ". BB_BANLIST ." WHERE 1");

    if(!empty($result)){
        foreach($result AS $k=>$v){
            $ids[]=$v['ban_userid'];
        }

        if(!empty($ids)){
            $result = DB()->fetch_rowset("SELECT user_last_ip, user_reg_ip FROM ". BB_USERS ." WHERE user_id IN(".implode(',',$ids).")");


            foreach($result AS $k=>$v){
                $ips[]=$v['user_last_ip'];
                $ips[]=$v['user_reg_ip'];
            }

            if (in_array(USER_IP,array_unique($ips)) AND !IS_AM){

                message_die(GENERAL_ERROR, $lang['REGISTER_DISABLED'].
                    '<!--br><br>
                    <form method="post" action="/profile.php?mode=register" class="form-group" style="max-width:25%">
                        <div class="input-group input-group-sm">
                            <input class="post form-control" type="text" size="16" maxlength="25" name="invite" value="" placeholder="'.$lang['INVITE_CODE'].'">
                            <span class="input-group-btn">
                                <button type="submit" class="btn btn-default " title="Send">'.$lang['SUBMIT'].'</button>
                            </span>
                        </div>
                    </form-->');
            }
        }
    }

// НЕ ДАЕМ СНОВА РЕГИСТРИРОВАТЬСЯ ТЕМ, КТО ЗАБАНЕН
Этот код выдает забаненым, что регистрация временно недоступна.

Можно конечно банить последний ip пользователя вместе с его аккаунтом, но это неправильно. Сейчас у провайдеров дефицит айпишников и они сажают сотни, а то и тысячи юзеров на один айпи.

Как вариант, можно добавить условие: если айпи пользователя встречается единожды в базе всех пользователей, то запрещаем ему регистрацию.

Либо можно уже реализовать как отдельный мод с помощью GitHub - fingerprintjs/fingerprintjs: The most advanced browser fingerprinting library. - получаем набор параметров браузера пользователя + ip и формируем уникальный хэш из этого и так отлавиливаем мультиаккаунты кроном или в момент авторизации
#18
Сейчас у провайдеров дефицит айпишников и они сажают сотни, а то и тысячи юзеров на один айпи.
Да, всё верно. Такая тенденция у провайдеров уже лет так 10, поэтому способ бана по айпи сразу отметаем.

Насчёт использования отпечатка браузера - как вариант, вполне хороший. Так можно и авторизацию в движке сделать, вполне эффективно будет.

Спасибо за идею!
#19
Отпечаток тоже не всегда идеален. Были случаи, когда владельцы одних и тех же айфонов на одном айпи жаловались на бан.
Есть еще вариант с библиотекой вечных кукис GitHub - samyk/evercookie но к ним уже негативно относятся поисковики и adguard банит
#20
Обязательно переносите анонсер /announce.php на отдельный домен + абузоустойчивый хостинг. Сейчас копирастеры (особенно зарубежные) умеют отслеживать p2p трафик и шлют жалобы на автомате.

Варианты:
создать домен на своем сервере, скопировать на него папку /bt/ и в announce.php и scrape.php прописать строку
define('TR_ROOT', str_ireplace('bt-site.ru','site.ru',$_SERVER['DOCUMENT_ROOT']).'/bt/');

Тоже самое можно реализовать через /etc/fstab прописав относительные пути. Пример:
/var/www/site/data/www/site.ru/bt /var/www/site/data/www/site/bt-site.ru/bt none bind 0 0

Либо админы подскажите как это правильнее сделать