ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
83   •   Посмотреть все темы

Депортация пользователя в другую комнату

 

1007
BETEPAH @BETEPAH
Попросили сделать скрипт, выгоняющий пользователя в другую комнату и не дающий возможность вернуться из нее, но с возможностью админам вручную отменить депортацию.
Вот что получилось:
в Скрипты чата
/* [НАСТРОЙКИ] */
/* Ники перенаправляющих в комнаты чата */
var censor = [];
censor['ник'] = 1;

/* Проверка пользовательских команд для простого сообщения */
/* Вывод пользователя в другую комнату */
if(text.indexOf('/deportation') == 0 && censor[nick]) {
var term = 30; // время ссылки в минутах
if(loaded == 1 && mynick == tonick) {
window.setTimeout('setmyroom(3)', 2000);// 3 - это индекс комнаты для депортации
setcookie(chatlogin.replace('-','_') + '_deportation', '1', term);
}
text = '<span style="font-style: italic; color: red"> запирает в Темнице&nbsp;' + tonick + ' на ' + term + ' минут</span>';
}
if(text.indexOf('/amnesty') == 0 && censor[nick]) {
if(loaded == 1 && mynick == tonick) {
setcookie(chatlogin.replace('-','_') + '_deportation', '0', 1);
}
text = '<span style="font-style: italic; color: red"> амнистирует&nbsp;' + tonick + '. Можно вернуться в общую комнату.</span>';
}

В конец функции
/* Дозагрузка - выполняется после загрузки фрейма сообщений */
function onloaded() {

вставить
// проверка в ссылке ли пользователь
var isDeportation = getcookie(chatlogin.replace('-','_') + '_deportation');
if (isDeportation == 1 && myroom != 3) window.setTimeout('setmyroom(3)', 2000);// 3 - это индекс комнаты для депортации

В шаблон Чат внутри в селектор действий добавить команды:
if(censor[mynick]) document.write("<option value='/deportation '>посадить в Темницу");
if(censor[mynick]) document.write("<option value='/amnesty '>амнистировать");

Отредактировано BETEPAH - 28.06.2013
1163
Денис @Анатолич
сорри за дилетанский вопрос. А как всем модераторам разрешить депортацию?
чтобы не прописывать каждый раз вручную ники.
обстоятельтва разные бывают. модераторы меняются. Не очень удобно для каждой функции по новой прописывать.

И амнистия раньше срока у меня прочему то не срабатывает.
не особо критично. но неприятно.
это только у меня так? или в скрипте косяк?

Отредактировано Анатолич - 30.06.2013
7094
--- @Render
if(text.indexOf('/deportation') == 0 && censor[nick]) {
заменить на
if(text.indexOf('/deportation') == 0 && admin==1) {
не?

1007
BETEPAH @BETEPAH
Render пишет:

if(text.indexOf('/deportation') == 0 && censor[nick]) {
заменить на
if(text.indexOf('/deportation') == 0 && admin==1) {
не?

Да. И соответственно:
if(admin == 1) document.write("<option value='/deportation '>посадить в Темницу");
if(admin == 1) document.write("<option value='/amnesty '>амнистировать");

Анатолич пишет:

И амнистия раньше срока у меня прочему то не срабатывает.
не особо критично. но неприятно.
это только у меня так? или в скрипте косяк?

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

P.S. не хочу, чтоб вы питали иллюзии о том, что этот скрипт невозможно обойти. Обойти его можно, хотя для 95% пользователей чата это будет сложным делом.
Если нужно, чтоб можно было задавать срок депортации
var term = 30; // время ссылки в минутах
заменить на
var term = parseFloat(text.replace('/deportation ', '').replace(tonick + ': ', '')) || 30; // время ссылки в минутах
тогда цифра в сообщении о депортации будет означать срок в минутах. Если цифры в сообщении нет, будет стандартный, заданный в скрипте срок - 30 минут.

Отредактировано BETEPAH - 30.06.2013
1163
Денис @Анатолич
Render пишет:

if(text.indexOf('/deportation') == 0 && censor[nick]) {
заменить на
if(text.indexOf('/deportation') == 0 && admin==1) {
не?

так работает, а то прописывал через статусы parent.mystatus!=0||parent.mystatus!=2 и все висло. благодарю.


BETEPAH,
понятно. не знал, что амнистировать надо в той же комнате.
У меня еще один вопрос. При депортации селектор комнат не переключается.
Пользователь не видит где он оказался.
И даже если амнистировать, то надо перейти сперва в какую то другую комнату и только потом можно вернуться в главную.
Так и должно быть или я накосячил где то?
И если это не мой косяк, то можно сделать, чтобы и селектор переключался?

1007
BETEPAH @BETEPAH
Анатолич пишет:

У меня еще один вопрос. При депортации селектор комнат не переключается.
Пользователь не видит где он оказался.
И даже если амнистировать, то надо перейти сперва в какую то другую комнату и только потом можно вернуться в главную.
Так и должно быть или я накосячил где то?
И если это не мой косяк, то можно сделать, чтобы и селектор переключался?

Переходить сперва в другую комнату необходимости нет. Достаточно сначала выбрать ту комнату, в которой находишься, а затем нужную комнату.
Нет, это не ваш косяк. Это косяк стандартной функции смены комнаты, которая не рассчитана на изменение комнаты скриптом, а предполагает, что комната меняется исключительно вручную через селект.
Выход есть.
Когда у меня был селект комнат, я делал что-то вроде такого:
1) прописать ID для селекта в шаблоне "Чат внутри"
/* Форма для перехода по комнатам (видна если есть комнаты) */
if(rooms.length>1) {
document.write("<select id='selectroom' class=ok name=selectroom onchange=\"setmyroom(this.value);\">");

2) добавить скрипт для изменение селекта в onloaded()
// проверка в ссылке ли пользователь
var isDeportation = getcookie(chatlogin.replace('-','_') + '_deportation');
if (isDeportation == 1 && myroom != 3) window.setTimeout('setmyroom(3)', 2000);// 3 - это индекс комнаты для депортации
// изменение активного индекса селекта комнат
var select = document.getElementById('selectroom');
for (var i = 0; i < select.options.length; i++) {
if (select.options[i].value == myroom) {
select.options[i].selected = true;
break;
}
}

Не проверял!

Отредактировано BETEPAH - 30.06.2013
596
Сергей @Князь_Пипецкий
Селектор то переключается, но вот какая бяка получается:
Заперли злодея в Темницу, а селектор перехода по комнатам он видит, и может перейти в любую комнату.....правда его сразу же автоматом переносит снова в Темницу.

424
ishkiniaev @ishkiniaev
так нифига и не понял, конкретно что да как делать 🙁

596
Сергей @Князь_Пипецкий
edenhazz пишет:

так нифига и не понял, конкретно что да как делать 🙁

Ну вот же: https://vmeste.eu/forum?pid=308726#p308726 все очень подробно и понятно расписано.

424
ishkiniaev @ishkiniaev
скрипт вроде поставили, но тот кто кидает в темницу, уходит туда вместе с виновным + виновный выходит спокойно из темницы да и в темницу переходит кто хочет

Отредактировано ishkiniaev - 02.07.2013
2615
Сергей @Pegass
оффтоп... хотя...
**********

1163
Денис @Анатолич
Были проблемы с инетом. Никак не получалось потестить депортацию.
Спасибо Ветерану за полезные дополнения.

по поводу возможности депортировать для всех модераторов.
Render пишет:

if(text.indexOf('/deportation') == 0 && censor[nick]) {
заменить на
if(text.indexOf('/deportation') == 0 && admin==1) {
не?

Хочу обратить внимание, что в моем чате это не сработало.
Депортировать стало можно только самих модераторов.
заменил на
if(text.indexOf('/deportation') == 0 && admin)
все встало на свои места. работает как надо.

Отредактировано Анатолич - 05.07.2013
1007
BETEPAH @BETEPAH
Князь_Пипецкий пишет:

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

так и задумано. Пока у "злодея" стоит cookies депортации, его будет переносить в темницу. Скрывать селектор перехода можно, но не вижу в этом особого смысла, так как это усложнит скрипт, а выхлопа не будет. Злодей же может просто выйти из чата и зайти снова. А в указанном выше скрипте ему перезаход в чат не поможет.

1007
BETEPAH @BETEPAH
Анатолич пишет:

Были проблемы с инетом. Никак не получалось потестить депортацию.
Спасибо Ветерану за полезные дополнения.

по поводу возможности депортировать для всех модераторов.
Render пишет:

if(text.indexOf('/deportation') == 0 && censor[nick]) {
заменить на
if(text.indexOf('/deportation') == 0 && admin==1) {
не?

Хочу обратить внимание, что в моем чате это не сработало.
Депортировать стало можно только самих модераторов.
заменил на
if(text.indexOf('/deportation') == 0 && admin)
все встало на свои места. работает как надо.

Это странно. По идее эти строки должны работать одинаково:
if(text.indexOf('/deportation') == 0 && admin==1)
и
if(text.indexOf('/deportation') == 0 && admin)
Ну, главное, что получилось адаптировать 😉

83
Djoker @djoker
BETEPAH пишет:

Попросили сделать скрипт, выгоняющий пользователя в другую комнату и не дающий возможность вернуться из нее, но с возможностью админам вручную отменить депортацию.
Вот что получилось:
в Скрипты чата
/* [НАСТРОЙКИ] */
/* Ники перенаправляющих в комнаты чата */
var censor = [];
censor['ник'] = 1;

/* Проверка пользовательских команд для простого сообщения */
/* Вывод пользователя в другую комнату */
if(text.indexOf('/deportation') == 0 && censor[nick]) {
var term = 30; // время ссылки в минутах
if(loaded == 1 && mynick == tonick) {
window.setTimeout('setmyroom(3)', 2000);// 3 - это индекс комнаты для депортации
setcookie(chatlogin.replace('-','_') + '_deportation', '1', term);
}
text = '<span style="font-style: italic; color: red"> запирает в Темнице&nbsp;' + tonick + ' на ' + term + ' минут</span>';
}
if(text.indexOf('/amnesty') == 0 && censor[nick]) {
if(loaded == 1 && mynick == tonick) {
setcookie(chatlogin.replace('-','_') + '_deportation', '0', 1);
}
text = '<span style="font-style: italic; color: red"> амнистирует&nbsp;' + tonick + '. Можно вернуться в общую комнату.</span>';
}

В конец функции
/* Дозагрузка - выполняется после загрузки фрейма сообщений */
function onloaded() {

вставить
// проверка в ссылке ли пользователь
var isDeportation = getcookie(chatlogin.replace('-','_') + '_deportation');
if (isDeportation == 1 && myroom != 3) window.setTimeout('setmyroom(3)', 2000);// 3 - это индекс комнаты для депортации

В шаблон Чат внутри в селектор действий добавить команды:
if(censor[mynick]) document.write("<option value='/deportation '>посадить в Темницу");
if(censor[mynick]) document.write("<option value='/amnesty '>амнистировать");


ЧТО ЗА ИНДЕКС КОМНАТЫ И КУДА ЕГО ВСТАВЛЯТЬ? 😊 😊

1163
Денис @Анатолич
djoker, там уже вставлена 3я комната. если хочешь депортировать в другую. то поставь другую цифру.

83
Djoker @djoker
Анатолич пишет:

djoker, там уже вставлена 3я комната. если хочешь депортировать в другую. то поставь другую цифру.

😀 😀 понял . а почему тот кого посадили в другую комнату тут же вернутся может? я специально испытал как робит и свободно перешел в общую комнату 😲 😲 🤔🤔🤔

1163
Денис @Анатолич
djoker, защита от возврата простенькая но есть. как она работает написал в личку. Странно что у тебя не срабатывает. может где то накосячил со скриптами или комп у тебя каким то особым образом настроен.
Проверь на друзьях.

1163
Денис @Анатолич
Особо "шибанутые" нарушители при депортации могут флудить. переходя из "темницы" в общую комнату и обратно.
Можно ли еще усложнить им задачу?

1. В идеале пока не пройдет 30 минут после вход в в темницу, выход из неё запретить.

2. Упрощенный вариант. Выход из темницы возможен только через главную

3. Вариант при депортации не писать сообщения о переходе от депортированного человека, до истечения срока депортации.

возможно ли такое реализовать?
Понимаю, что все это по большому счету фигня и обойти защиту можно.
Но любые дополнительные трудности для нарушителя, облегчают работу модераторам.

2615
Сергей @Pegass
скрыть в темнице селектор перехода не?