Об IRC. Доступно и со вкусом.

Уходим в away и возвращаем баны

Сегодня мы будем писать простенькую away систему и возвращать снятые \"чужими\" баны.
Режим Away служит для уведомления пользователей о том, что вы в данный момент недоступны для беседы. Когда кто-то посылает вам сообщение и у вас включен режим Away, пользователь получит сообщение [away message]. Для выключения режима используется команда /away без параметров. Это немного теории из хелп файла.
Итак, начнем разбираться. Таким образом написав в эдитбоксе:
/away Я ушел кушать
мы уйдем в эвей с сообщением \"Я ушел кушать\". Но согласитесь это как то просто. Сейчас попробуем замутить что-нибудь посложнее, открываем Попапы(popups), сверху в меню Вид(view) выбираем Канал(channel), (т.е. наша менюшка будет видна при клике правой кнопкой на канале) и пишем туда следущее:

Away
.$iif($away == $false,Уйти): away $$?=\"Введите причину эвея\" | nick $me $+ [away]
.$iif($away == $true,Вернуться): away | nick $remove($me,[away])

Конструкция $iif проверяет условие и в зависимости от него создает меню. Если $away == $false, мы не в эвее, то создаем менюшку Уйти, уходим в эвей и меняем ник на наш плюс [away]. Если же мы в эвее покажет меню Вернуться мы возвращаемся из эвея и меняем ник. Лично для меня этого достаточно, но т.к. многие юзеры любят всякие фишечки и прибамбахи мы сейчас модернезируем скрипт и он буде показывать время эвея и причину на канал.
Вставляем туда же это:

Away
.$iif($away == $false,Уйти): { .away $$?=\"Введите причину эвея\" | nick $me $+ [away] | set %awtime $ctime | ame >> ушел в эвей с причиной ( $! ) в $time }
.$iif($away == $true,Вернуться): { .away | nick $remove($me,[away]) | ame >> вернулся отсутствовал $duration($calc($ctime - %awtime)) | unset %awtime }

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

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

on *:ban:#:{
if ($nick == $me) && ($banmask !isin %bm) { set %bm %bm $banmask }
}

Когда ставим бан, проверяем, если ник - это вы и маски бана нету в переменной то добавляем.

on *:UNBAN:#:{
if ($banmask isin %bm) {
if ($nick != $me) mode # +b $banmask
else set %bm $remove(%bm,$banmask)
}
}

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

На этом все, удачи.