Много лет назад, когда я был моложе, я впервые узнал, что в сети интернет существует IRC-чат. Это так называемый Internet Relay Chat , суть которого заключается в том, что существует центральный сервер, а может быть даже не один (связанный с другими), а желающие початиться используют для общения специальную программу (mIRC, vIRC, Pirch и другие).

С этими временами связана значимая часть моей жизни. Со своей женой я также познакомился в IRC-чате. Но сегодня речь пойдет не об этом.

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

В те времена мною был написан скрипт, позволяющий разослать одинаковое сообщение всем чатовцам - пользователям сети IRC. И хотя я не заходил в IRC уже много лет, скриптом я бы хотел поделиться с Вами сегодня. Может быть кому-то это окажется полезным.

Для запуска скрипта используется команда /ac_start

Сообщение прописано в коде в строке:

 

  /msg $1 Hello, how are you?

Итак, далее код:

;Включение работы скрипта начинается с получения списка имеющихся на сервере каналов

alias ac_start {

  /set %ac.min $?="Включать канал в список, если ников на нем не меньше (рекомендую 10):"

  /set %ac.int $?="Рассылать сообщение никам с интервалом не менее (рекомендую 7), сек:"

  /set %ac.wait $?="После захода на канал, оставаться на нем в течение (рекомендую 5), сек:"

  if ( $?!="Могу я вызвать список каналов?" == $true ) {

    ;Очищаю список каналов

    /set %ac.list

    /set %ac.liston $true

    /list -min %ac.min

  }

  else /timerACList 1 60 /ac_start

}

 

;Получение имени каждого канала по очереди

raw 322:*: {

  if ( %ac.liston == $true ) && ( $istok(%ac.list,$2,32) == $false) && ($3 >= %ac.min) {

    ;Попоплняюсписокканалов

    /set %ac.list %ac.list $2

  }

}

 

;После окончания получения списка каналов

raw 323:*: {

  if ( %ac.liston == $true ) {

    ;/window -a $lactive

    if ($numtok(%ac.list,32) > 0) {

      ;Если файл не существует, то создам его

      if ( $exists(ac_nicks.txt) == $false) {

        ;создаюфайл

        /write -c ac_nicks.txt

        ;Начну с 1 ника

        /set %ac.ln 1

      }

      else {

        ; Если номер ника меньше, чем количество линий в файле, то резонно задать вопрос о продолжении

        ;очищаю список ников

        /write -c ac_nicks.txt

        ;Начну с 1 ника

        /set %ac.ln 1

      }

      /ac_join 0

    }

  }

  /unset %ac.liston

}

 

;352  RPL_WHOREPLY $6-nick, $4-host

raw 352:*: {

  if ($6 != $me) {

    /var %ac.read = $read(ac_nicks.txt,w,* $+ $4 $+ *)

    if ( $readn == 0) {

      /write ac_nicks.txt $6 $4

    }

  }

}

 

;Получаю список ников на канале из списка каналов

alias ac_join {

  ;Если в наличии уже имеется некоторый список, то запускаю таймер

  /var %i = 1

  /var %fndtm = $false

  while ( %i <= $timer(0)) {

    if ( $timer(%i) == acsendmsg ) /var %fndtm = $true

    /inc %i

  }

  if (( $lines(ac_nicks.txt) > 0) && (%fndtm == $false)) {

    /timerACSendMsg 0 %ac.int /ac_sendmsg

  }

 

  /var %ac.chan = $1 + 1

  ;Если есть еще в запасе каналы

  if ( %ac.chan <= $numtok(%ac.list,32)) {

    /var %ac.channame = $gettok( %ac.list, %ac.chan,32)

    /join %ac.channame

    /who %ac.channame

    ;Дал задание таймеру получить ники с канала

    /timerACNicks 1 %ac.wait /ac_nicks %ac.channame %ac.chan

  }

  else {

    /ac_stop

  }

}

 

alias ac_nicks {

  /part $1

  /ac_join $2

}

 

alias ac_sendmsg {

  if ( %ac.ln <= $lines(ac_nicks.txt)) {

    /ac_talk $gettok($read(ac_nicks.txt, %ac.ln),1,32)

    %ac.ln = %ac.ln + 1

    /timerACSendMsg 0 %ac.int /ac_sendmsg

  }

  else {

    /timerACSendMsg off

  }

}

 

raw 439:*: {

  /var %ac.tm = $10 + 1

  /timerACSendMsg 0 %ac.tm /ac_sendmsg

  /var %ac.r = $read(ac_nicks.txt,w,* $+ $2 *)

  if ( $readn != 0) {

    if ( $readn < %ac.ln ) {

      /set %ac.ln $readn

    }

  }

}

 

alias /ac_talk {

  /msg $1 Hello, how are you?

}

 

;Выключение работы скрипта

alias /ac_stop {

  /timerACList off

  /timerACSendMsg off

  /unset %ac.list

  /unset %ac.liston

  /unset %ac.min

  /unset %ac.int

}

Можете сохранить данный код в файл, например ac-advert.txt, загрузить в mIRC и использовать его при необходимости.

Add comment


Security code
Refresh