Много лет назад, когда я был моложе, я впервые узнал, что в сети интернет существует IRC-чат. Это так называемый Internet Relay Chat , суть которого заключается в том, что существует центральный сервер, а может быть даже не один (связанный с другими), а желающие початиться используют для общения специальную программу (mIRC, vIRC, Pirch и другие).
С этими временами связана значимая часть моей жизни. Со своей женой я также познакомился в IRC-чате. Но сегодня речь пойдет не об этом.
Для общения в чате лично я использовал программу mIRC, которая помимо всего прочего позволяла писать "программные скрипты (код)" для общения в автоматическом режиме. А поскольку по призванию я творец, я использовал эту возможность для пользы и из спортивного интереса.
В те времена мною был написан скрипт, позволяющий разослать одинаковое сообщение всем чатовцам - пользователям сети IRC. И хотя я не заходил в IRC уже много лет, скриптом я бы хотел поделиться с Вами сегодня. Может быть кому-то это окажется полезным.
Для запуска скрипта используется команда /ac_start
Сообщение прописано в коде в строке:
Итак, далее код:
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 и использовать его при необходимости.