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

как скрыть команду /knock ?

 

1163
Денис @Анатолич
после долгих мучений перевел я чат с 3й версии на 5ю.
В основном все заработало. Может какие косяки еще и замечу.
но пока возникла такая проблема.
в 3й версии в селекторе действий у меня стояли команды.
например такая.
<script>
document.write("<input type=hidden name=nick value="+mynick+">");
document.write("<input type=hidden name=id value="+myid+">");
document.write("<select name=cmd>");
document.write("<option value=''>-=cказать=-");
document.write("<option value='/privat '>приватно");
....................и.т.д.
document.write("<option value='/knock '>Стукнуть");
.....................и.т.п.
document.write("</select>");
</script>

в скриптах чата прописано.
/* [Функция - вывода сообщений и команд] */
...............................
/* Вывод простого сообщения */
if(cmd==0) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) symbol=symbols[2]
........................................

if (text.substring(0,7)=='/knock ' && nick) {
text=text.substr(7,text.length-7);
text=text.substr(tonick.length+0,text.length-tonick.length-0);
wr("видят все вместо команды<br>");
if(tonick==mynick && loaded==1) wr('<div style="background: #c1cceb">видит получатель команды</div>');
if(nick==mynick && loaded==1) wr('<div style="background: #D7D6E3">видит отправитель команды</div>');
return 1;
}

...................
в 3й версии команда /knock стиралась и вместо неё выводились различные действия для различных участников.
в 5й версии тоже все выводится. Только команда не стирается. И выводится лишняя строчка со служебными командами.
я так понимаю
text=text.substr(7,text.length-7);
text=text.substr(tonick.length+0,text.length-tonick.length-0);
не срабатывает.
пробовал различные варианты.
пробовал не стереть а просто заменить
text="тестовая замена текста";
Тоже не сработало. и текст не поменялся.
не подскажете в чем может быть дело и как можно это исправить?

2615
Сергей @Pegass
Анатолич пишет:

в 3й версии команда /knock стиралась и вместо неё выводились различные действия для различных участников.
в 5й версии тоже все выводится. Только команда не стирается. И выводится лишняя строчка со служебными командами.

нихрена не понял, гони код в том виде как он есть в чате и скрин того что на выходе)

1163
Денис @Анатолич
Показать текст

Отредактировано Анатолич - 06.06.2013
2615
Сергей @Pegass
if (text.substring(0,7)=='/knock ' && nick) {
text=text.substr(7,text.length-7);
text=text.substr(tonick.length+0,text.length-tonick.length-0);
if(tonick==mynick && loaded==1) wr('<div style="background: #c1cceb"><img src=http://videochaty.ru/icon/diktor.gif border=0><font color=003153 size=3 size=3> кажется вас лупят по голове</font> <img src=http://www.imgs.su/tmp/1288412727.jpg></div>');
else if(nick==mynick && loaded==1) wr('<div style="background: #D7D6E3"><font color=003153 size=3> Получай </font> <img src=http://www.imgs.su/tmp/1288412727.jpg></div>');
else
wr("<i><img src=http://videochaty.ru/icon/diktor.gif border=0><font color=003153 size=3> " +set_nick+ " стукает по голове <b> " +tonick+ "</b> <img src=http://imgs.su/tmp/2012-03-15/1331780524-619.jpg border=0> </i> " +text+ " </font><b><font color=003153>"+set_time+"</font></b><br>");
return false;
}

Отредактировано Pegass - 06.06.2013
1163
Денис @Анатолич
Pegass, не помогло.
главное, что скрипт не меняет значение переменной text

никак не могу text поменять.
разные способы пробовал.
Например:
просто для теста хотел совсем убрать команду /knock
скопировал из мобильной версии схожую строчку.
if(text.split("/remove").length>1) {text=text.replace("/remove", ""); return false;}
написал такую строчку.
if(text.split("/knock").length>1) {text=text.replace("/knock", ""); return false;}
и всеравно /knock остается, значение text не меняется

Отредактировано Анатолич - 06.06.2013
2615
Сергей @Pegass
ну как обычно - вечером гляну

1007
BETEPAH @BETEPAH
Если в методе .substr текст отрезается от какой-то точки и до конца строки, второй параметр указывать не обязательно
Можно просто
text = text.substr(7);
text = text.substr(tonick.length);

Это избавит браузер от необходимости проделывать лишние 4 операции - text.length-tonick.length-0
...
Если отрезать не требуется, а нужно лишь найти соответствие, лучше использовать не .substring(), а .indexOf(), который возвращает точку входа соответствия в строке. Например,
if (text.substring(0,7)=='/knock ' && nick) {
можно заменить на
if (text.indexOf('/knock ') == 0 && nick) {
и не нужно будет каждый раз, при введении новой команды подсчитывать длину команды и прописывать её начало (0) и конец (7) в скрипте, к тому же эта операция немного быстрее (**********).
...
А суть вот этой строки непонятна:
if(text.split("/remove").length>1) {text=text.replace("/remove", ""); return false;}
Зачем вырезать из строки команду, если все равно следом идет выход из функции, а значит, ничего оправлено в чат не будет?
if (text.indexOf('/remove') != -1) return false;
...
Но это не решение вашей ошибки, а просто рекомендации
Поставьте в начале функции f()
console.log(text) и посмотрите в консоли, передается ли у вас в переменной text ник получателя сообщения. Если нет, то может дело в этой строке:
text=text.substr(tonick.length+0,text.length-tonick.length-0);

Отредактировано BETEPAH - 06.06.2013
2615
Сергей @Pegass
Ой Анатолич, ну ток ты так мог сначала прописать условие на cmd==0 а потом на действия - поменяй местами и будет тебе счастие

1163
Денис @Анатолич
Pegass пишет:

Ой Анатолич, ну ток ты так мог сначала прописать условие на cmd==0 а потом на действия - поменяй местами и будет тебе счастие

Вона че Михалыч)) ну кстати это не я придумал. Ставил готовый дизайн "super" 3 года назад. там именно так и было прописано. На фреймовом чате почему то все работало.
На безфреймовом оказывается принципиально. Как всегда респект и уважуха. в репу стукнул. Пасибки большое 😀