EpicNet.Ru - Форум IRC Чата

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » EpicNet.Ru - Форум IRC Чата » HELP SCRIPT - Помощь по mIRC скрипту » Ban for presence on a bad channel


Ban for presence on a bad channel

Сообщений 1 страница 11 из 11

1

Hello. New problem...

There's a #CHANNELXXX not really clean :-P
There're user from this channel who use to join in #mychannel at the same time.
By now I want a warn on join: if users from #CHANNELXXX join in #mychannel at the same time , they receive just a warn.
Next step will be to add a ban on nick, so if they'll join in #mychannel but they're joined on #CHANNELXXX too , they'll receive kick/ban on nick.

I wrote this code but it doesn't work:

Код:
on *:join:#: {
  if ($chan == #mychannel) { .timerchan $+ $nick 0 1800 .whois $nick | .whois $nick } 
}
on *:part:#: {
  if ($chan == #mychannel) { .timerchan $+ $nick off }
}
on *:quit: { 
  { .timerchan $+ $nick off }
}
raw 319:*: {
  if *CHANNELXXX* iswm $1- { .timerchan 1 15 notice $2 WARN  } 

;====FUTURE STEP=======

  ; if *CHANNELXXX* iswm $1- { .ban -k #mychannel $2 2 REASON FOR BAN/KICK | timer $+ $2 off }

}

Thanks for help

2

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

Все настройки производятся с помощью специальных алиасов, которые находятся в самом низу кода со следующими названиями:

  • [c=maroon]my_chan[/c] - возвращает название вашего канала, на котором должна производиться проверка всех входящих пользователей.

  • [c=maroon]bad_chan[/c] - возвращает название плохого канала, за нахождение на котором пользователь будет наказан.

  • [c=maroon]delay_check[/c] - возвращает время в секундах для установки задержки таймера, который запускает проверку пользователя.

  • [c=maroon]text_warn[/c] - возвращает текст уведомления, которое должно быть отправлено пользователю в качестве предупреждения.

  • [c=maroon]text_ban[/c] - возвращает текст с причиной, который увидит пользователь после выполнения "Kick+Ban".

  • [c=maroon]time_ban[/c] - возвращает время в секундах, через которое установленный "Ban" должен быть снят.

[indent=0.8,0.5]
Попробуйте протестировать этот код скрипта:

Код:
on !*:JOIN:$($my_chan):{  
  if (!$timer($+(BADCHAN,$nick))) { $+(.timerBADCHAN,$nick) 0 $delay_check check_bad_chan $unsafe($nick) }
  check_bad_chan $nick
}
on *:PART:$($my_chan): timer_off $nick
on *:QUIT: var %i $comchan($nick,0) | while (%i) { if ($comchan($nick,%i) == $my_chan) { timer_off $nick | break } | dec %i }

alias -l check_bad_chan { .enable #CheckBadChan | whois $1 }
alias -l timer_off { if ($timer($+(BADCHAN,$1))) $+(.timerBADCHAN,$1) off }

#CheckBadChan off
raw 301:*: haltdef
raw 307:*: haltdef
raw 310:*: haltdef
raw 311:*: haltdef
raw 313:*: haltdef
raw 317:*: haltdef
raw 320:*: haltdef
raw 330:*: haltdef
raw 335:*: haltdef
raw 671:*: haltdef
raw 318:*: haltdef | .disable #CheckBadChan
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    hinc -m badchan $2 1
    if ($hget(badchan,$2) == 1) { .notice $2 $text_warn }
    if ($hget(badchan,$2) >= 2) {
      ban $+(-ku,$time_ban) $my_chan $2 2 $text_ban
      timer_off $2 | hdel badchan $2
    }
  }
}
#CheckBadChan end

alias -l my_chan { return #mychannel }
alias -l bad_chan { return #CHANNELXXX }
alias -l delay_check { return 1800 }
alias -l text_warn { return TEXT WARN }
alias -l text_ban { return REASON BAN }
alias -l time_ban { return 3600 }
Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

3

Thanks Epic. I decided to delete warn part. Is this ok?

Код:

on !*:JOIN:$($my_chan):{  
  if (!$timer($+(BADCHAN,$nick))) { $+(.timerBADCHAN,$nick) 0 $delay_check check_bad_chan $unsafe($nick) }
  check_bad_chan $nick
}
on *:PART:$($my_chan): timer_off $nick
on *:QUIT: var %i $comchan($nick,0) | while (%i) { if ($comchan($nick,%i) == $my_chan) { timer_off $nick | break } | dec %i }

alias -l check_bad_chan { .enable #CheckBadChan | whois $1 }
alias -l timer_off { if ($timer($+(BADCHAN,$1))) $+(.timerBADCHAN,$1) off }

#CheckBadChan off
raw 301:*: haltdef
raw 307:*: haltdef
raw 310:*: haltdef
raw 311:*: haltdef
raw 313:*: haltdef
raw 317:*: haltdef
raw 320:*: haltdef
raw 330:*: haltdef
raw 335:*: haltdef
raw 671:*: haltdef
raw 318:*: haltdef | .disable #CheckBadChan
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    hinc -m badchan $2 1
      if ($hget(badchan,$2) == 1) {
      ban $+(-ku,$time_ban) $my_chan $2 2 $text_ban
      timer_off $2 | hdel badchan $2
    }
  }
}
#CheckBadChan end

alias -l my_chan { return #mychannel }
alias -l bad_chan { return #CHANNELXXX }
alias -l delay_check { return 180 }
alias -l text_ban { return REASON BAN }
alias -l time_ban { return 86400 }

I edited this part:

Код:
    if ($hget(badchan,$2) == 1) { .notice $2 $text_warn }
    if ($hget(badchan,$2) >= 2) {

and deleted:

Код:
alias -l text_warn { return TEXT WARN }

4

Да, вы можете удалить всё, что связано с предварительным "WARN" предупреждением пользователя.
В таком случае нет необходимости использовать счётчик на основе хеш-таблицы [c=red]hinc -m badchan $2 1[/c] и условие для проверки числа в счётчике [c=red]if ($hget(badchan,$2) == 1)[/c]

Удалите всё лишнее, чтобы эта часть кода для "raw" обработчика выглядела так:

Код:
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    ban $+(-ku,$time_ban) $my_chan $2 2 $text_ban
    timer_off $2
  }
}

Теперь "Ban" будет устанавливаться сразу, после обнаружения плохого канала в ответе "WHOIS", на котором присутствует пользователь.

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

5

Always thanks a lot Epic ^^

6

The command: [c]ban $+(-ku,$time_ban) $my_chan $2 2 $text_ban[/c]

Ban is on host
[rect width=100]
*!*@HOST
[/rect]

It should be better if ban is just on nick
[rect width=100]
NICK!*@*
[/rect]

So if a user has 3 nick with the same host, 2 in a bad channel and 1 "clean" , so he can join only with that nick , not with not allowed nick

7

Список пронумерованных типов масок для команды [c]/ban[/c]:

  • [c]0[/c] = *!user@host

  • [c]1[/c] = *!*user@host

  • [c]2[/c] = *!*@host

  • [c]3[/c] = *!*user@*.host

  • [c]4[/c] = *!*@*.host

  • [c]5[/c] = nick!user@host

  • [c]6[/c] = nick!*user@host

  • [c]7[/c] = nick!*@host

  • [c]8[/c] = nick!*user@*.host

  • [c]9[/c] = nick!*@*.host

[indent=0.8,0.5]
1. Попробуйте изменить тип маски бана, вместо номера "2" укажите "7":

[c]ban $+(-ku,$time_ban) $my_chan $2 2 $text_ban [/c]  ➔  [c]ban $+(-ku,$time_ban) $my_chan $2 7 $text_ban[/c]

[indent=0.8,0.5]
2. Или попробуйте использовать другой набор команд в этой части кода:

Код:
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    mode $my_chan +b $+($2,!*@*) | kick $my_chan $2 $text_ban
    $+(.timerUNSETBAN,$2) 1 $time_ban mode $my_chan -b $unsafe($+($2,!*@*))
    timer_off $2
  }
}
Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

8

Because my mIRC is not connected 24/7 is possible that someone join when my bot is not joined.
So when I connect, I use manual /whois to check nicks if there's any violator.
Script doesn't ban if I meet any of them, so I added

Код:
alias whois {
  if ($1) {
    check_bad_chan $1
  }
  .whois $1-
}

What do You think?

Отредактировано Chandra (26.03.2026 16:08)

9

В данном случае, использовать в качестве названия алиаса существующее название команды [c=red]/whois[/c] - плохая идея, т.к. каждый раз при вводе этой команды будет срабатывать одноимённый алиас, даже, когда вам ненужно делать проверку ника пользователя на присутствие в плохом канале. Поэтому будет лучше реализовать это с помощью контекстного меню в списке ников.

Я внёс дополнительные изменения в код. Попробуйте использовать это обновление:

Код:
menu nicklist {
  Check Bad Chan
  .Start: check_bad_chan $$1
  .Stop: timer_off $$1
  -
}

on !*:JOIN:$($my_chan): check_bad_chan $nick
on *:PART:$($my_chan): timer_off $nick
on *:QUIT: var %i $comchan($nick,0) | while (%i) { if ($comchan($nick,%i) == $my_chan) { timer_off $nick | break } | dec %i }

alias -l check_bad_chan {
  if (!$timer($+(BADCHAN,$1))) { $+(.timerBADCHAN,$1) 0 $delay_check check_bad_chan $unsafe($1) }
  .enable #CheckBadChan | whois $1
}
alias -l timer_off { if ($timer($+(BADCHAN,$1))) $+(.timerBADCHAN,$1) off }

#CheckBadChan off
raw 301:*: haltdef
raw 307:*: haltdef
raw 310:*: haltdef
raw 311:*: haltdef
raw 313:*: haltdef
raw 317:*: haltdef
raw 320:*: haltdef
raw 330:*: haltdef
raw 335:*: haltdef
raw 671:*: haltdef
raw 318:*: haltdef | .disable #CheckBadChan
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    ban $+(-ku,$time_ban) $my_chan $2 7 $text_ban
    timer_off $2
  }
}
#CheckBadChan end

alias -l my_chan { return #mychannel }
alias -l bad_chan { return #CHANNELXXX }
alias -l delay_check { return 1800 }
alias -l text_ban { return REASON BAN }
alias -l time_ban { return 3600 }

[indent=0.8,0.5]
Если помимо этого решения вам также требуется команда для ручного ввода, то можете использовать любое другое название алиаса, которое не будет соответствовать ни одной из существующих команд и других алиасов, используемых в mIRC, например: [c]alias badchan { if ($1) { check_bad_chan $1 } }[/c] - синтаксис команды: [c=blue]/badchan nick[/c]

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

10

This work Epic. But it can check 1 nick by time. I mean: right click on a nick in nicklist, Check-Bad-Nick and check will be triggered. But if I have 200 users mean I have to check them 1 by one.
Mine is just a question of course: is there a command that can check all nicks in the channel in one shot?
Thanks

11

1736,387 написал(а):

is there a command that can check all nicks in the channel in one shot?

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

[indent=0.8,0.5]
Я внёс дополнительные изменения в код для расширения функционала.

Попробуйте использовать это обновление:

Код:
menu channel,nicklist {
  Check Bad Chan
  .Start $chr(9) All Users : check_all_users | echo -a 03Start Check - All Users
  .Stop $chr(9) All Users : .timerBADCHAN* off | echo -a 04Stop Check - All Users
  .-
  .Start $chr(9) $$1 : check_bad_chan $$1 | echo -a 03Start Check - $$1 
  .Stop $chr(9) $$1 : timer_off $$1 | echo -a 04Stop Check - $$1 
  -
}

on !*:JOIN:$($my_chan): check_bad_chan $nick
on *:PART:$($my_chan): timer_off $nick
on *:QUIT: var %i $comchan($nick,0) | while (%i) { if ($comchan($nick,%i) == $my_chan) { timer_off $nick | break } | dec %i }

alias -l check_all_users {
  var %i 1, %dsec 1, %users $nick($my_chan,0)
  while (%i <= %users) {
    var %nick $nick($my_chan,%i)
    if (%nick != $me && %nick ison $my_chan && !$timer($+(BADCHAN,%nick))) {
      $+(.timerBADCHANALLUSERS,%nick) 1 %dsec check_bad_chan $unsafe(%nick)
      inc %dsec $delay_all
    }
    inc %i
  } 
}
alias -l check_bad_chan {
  if ($1 ison $my_chan) {
    if (!$timer($+(BADCHAN,$1))) { $+(.timerBADCHAN,$1) 0 $delay_check check_bad_chan $unsafe($1) }
    .enable #CheckBadChan | whois $1
  }
}
alias -l timer_off { if ($timer($+(BADCHAN,$1))) $+(.timerBADCHAN,$1) off }

#CheckBadChan off
raw 301:*: haltdef
raw 307:*: haltdef
raw 310:*: haltdef
raw 311:*: haltdef
raw 313:*: haltdef
raw 317:*: haltdef
raw 320:*: haltdef
raw 330:*: haltdef
raw 335:*: haltdef
raw 671:*: haltdef
raw 318:*: haltdef | .disable #CheckBadChan
raw 319:*:{
  haltdef
  if ($+(*,$bad_chan,*) iswm $3- && $2 ison $my_chan) {
    ban $+(-ku,$time_ban) $my_chan $2 7 $text_ban
    timer_off $2
  }
}
#CheckBadChan end

alias -l my_chan { return #mychannel }
alias -l bad_chan { return #CHANNELXXX }
alias -l delay_all { return 5 }
alias -l delay_check { return 1800 }
alias -l text_ban { return REASON BAN }
alias -l time_ban { return 3600 }


alias badchan { if ($1) { check_bad_chan $1 } | else check_all_users }

Примечание: При запуске проверки всех ников канала, каждый следующий проверяемый ник будет ставиться в очередь с помощью таймера с задержкой в "5" секунд (см. строку 20), чтобы избежать возможного флуда из-за массовых запросов "WHOIS" вашим ботом. Время задержки (в секундах) настраивается с помощью алиаса [c=maroon]delay_all[/c] в самом низу кода.

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » EpicNet.Ru - Форум IRC Чата » HELP SCRIPT - Помощь по mIRC скрипту » Ban for presence on a bad channel