Coders-IRC


IRC for Coders

Access control in Chat, how to keep an eye on JOIN and PART


image

Being part of the user support of the ircIRCgate.it network and being simultaneously present in many chan, I often happen to "not" notice when some user enters the support channel #IRChelp, to overcome this inconvenience I used two simple but effective stratagems, the first consists of a script that, when a user joins in the support chan, it says me in echo (so I read it only me, in any channel or pvt I find ..) " IRChelp records a JOIN by TIZIO and the second, if I am not physically in front of the PC, and then there was the possibility that deto message escapes me, brings me back in a separate @ window, all the JOIN on the support channel with a lot of nick time and user address .. (also useful as "access statistics".. but let's come to the code:

on *:JOIN:#irchelp: {
window @irchelp
/echo @irchelp [ 9 $asctime(HH:nn:ss) ] [ 9 #IRChelp ] Register a [ 9 JOIN ] by [ 9 $nick - $address($nick,2) ]
}

on *:P ART:#irchelp: {
window @irchelp
/echo @irchelp [ 9 $asctime(HH:nn:ss) ] [ 4 #IRChelp ] Record a [ 4 PART ] by [ 4 $nick - $address($nick,2) }

on *:JOIN:#IRChelp: {
/echo -a [ 9 $asctime(HH:nn:ss) ] [ 9 #IRChelp ] Register a [ 9 JOIN ] by [ 9 $nick - $address($nick,2) ]
}
on *:P ART:#IRCHelp: {
/echo -a [ 9 $asctime(HH:nn:ss) ] [ 4 #IRChelp ] Records a [ 4 PART ] by [ 4 $nick - $address($nick,2) ]
}

Expand


Read More

Query Manager - Accept or Reject messages in private!


image

on 1:OPEN:?:*:{
set %query.nick $nick
set %query.address $address($nick,1)
set %query.text $1-
close -m $nick
.msg $nick Query Manager: Wait, I have to decide whether or not to accept your Pvt...
query.decide
}
alias -l query.decide {
dialog -m Query Query
}
dialog Query {
title "Query"
size 300 250 200 50
option dbu
text "Nick:", 2, 5 12 12 10, nowrap
text "Text:", 3, 5 22 12 10, nowrap
edit %query.nick %query.address, 4, 20 10 170 10, read
edit %query.text, 5, 20 20 170 10, read
button "Accept", 6, 25 32 40 15
button "Reject", 7, 75 32 40 15
button "Ignore", 8, 125 32 40 15
}
on 1:dialog:Query:*:* {
if ($devent == sclick) {
if ($did == 6) {
dialog -x Query Query
query %query.nick
echo -t %query.nick < $+ %query.nick $+ > %query.text
.msg %query.nick Query Manager : Your Pvt Has Been Accepted!
unset %query.*
}
if ($did == 7) {
dialog -x Query Query
.msg %query.nick Query Manager : Your Pvt Was Rejected!
unset %query.*
}
if ($did == 8) {
dialog -x Query Query
ignore -p %query.nick
.msg %query.nick Query Manager : Your Pvt was Rejected and I Put You in Ignore!
unset %query.*
}
}
}

Expand


Read More

KeepMyNick.mrc


image

****************************************************************
;
; KeepMyNick ver 1.5 by Czuz (https://github.com/Czuz)
; To install just type: /load -rs KeepMyNick.mrc
;
;****************************************************************
;
; Help:
; KEEPNICK
; Syntax: /keepnick [<nick>] [<network>|default]
; Assigns <nick> to <network> (Or current network.) W/o argument
; disables grabbing until reconnection.
;
; LISTNICK
; Syntax: /listnick [-all]
; Displays list of nicks.
;
; DELNICK
; Syntax: /delnick [<network>|default]
; Remove nick associated with <network> (Or current network) from
; list
;
;****************************************************************
; ChangeLog:
; ver 1.5 (08.05.2021)
; - published on GitHub
; ver 1.4 (23.03.2005)
; - better handling of nick collisions on IRCnet
; ver 1.3 (15.03.2005)
; - new download link
; - better handling of ERR_RESTRICTED on IRCnet
; ver 1.2 (28.08.2004)
; - new download link
; ver 1.1 (04.06.2004)
; - spelling checked
; - fixed handling of raw events
; - default nick
; - /keepnick <nick> default, /delnick default
; - some GUI changes
; ver 1.0 (30.05.2004)
; - setup dialog (Commands->KeepMyNick v1.0)
; - minor changes in functions
; - extended syntax of commands
; - configurable timer delay
; ver 1.0-pre3 (13.05.2004)
; - added support for raw events: 
;   ERR_ERRONEUSNICKNAME, ERR_NICKNAMEINUSE, ERR_UNAVAILRESOURCE and ERR_RESTRICTED
; ver 1.0-pre2 (25.12.2003)
; - fixed disappearing timer bug
; - $comchan() instead of $ial()
; - minor bugs fixed
; ver 1.0-pre1 (22.12.2003)
; - keeping different nicks in multi-server mode
; - /keepnick, /listnick and /delnick commands
; - saving settings to file on exit and reading them on first connect
; - three states of nick grabbing:
;   0 - disabled
;   1 - passive (on events only, when we are on the same channel as nickstealer)
;   2 - active  (periodically nick checking with timer)
;
; ver 0.9 (a long time ago)
; - simple on-event nick keeping for a single network
;
;****************************************************************

;--------------------------[ E V E N T S ]--------------------------

on *:LOAD: {
  %KMN.Version = KeepMyNick v1.5
  echo -st [KeepMyNick] Loading %KMN.Version ...
  if ($version < 6.03) {
    echo -st [KeepMyNick] Script NOT installed. Upgrade your mIRC version to 6.03+.
    timer 1 2 unload -rs " $+ $script $+ "
    halt
  }
  if (%KeepMyNickDelay) {
    %KMN.Delay = %KeepMyNickDelay
    unset %KeepMyNickDelay
  }
  else { %KMN.Delay = 10 }
  if ($hget(MyNicks) == $null) { 
    hmake MyNicks 10
    if ($scon(0) > 0 && $isfile(KeepMyNick.dat)) {
      hload -b MyNicks KeepMyNick.dat
    }
  }
  echo -st [KeepMyNick] - DONE! -
  echo -st [KeepMyNick]
  echo -st [KeepMyNick] Available commands:
  echo -st [KeepMyNick] /keepnick [<nick>] [<network>|default]
  echo -st [KeepMyNick] /listnick [-all]
  echo -st [KeepMyNick] /delnick [<network>|default]
  echo -st [KeepMyNick]
  echo -st [KeepMyNick] For graphic setup, go to  Menu->Commands-> $+ %KMN.Version
}

on *:UNLOAD: {
  .timerKeepMyNick off
  if ($hget(MyNicks)) { 
    hsave -ob MyNicks KeepMyNick.dat
    hfree MyNicks 
  }
  unset %KMN.Delay
  unset %KMN.Version
  unset %KMN.Default
  unset %KMN.Options
  echo -st [KeepMyNick] Bye...
}

on *:CONNECT: {
  if ($scon(0) == 1) {
    if ($isfile(KeepMyNick.dat)) { 
      if ($hget(MyNicks) == $null) { hmake MyNicks 10 }
      hload -b MyNicks KeepMyNick.dat
    }
  }
  if ($KMN.MyNick) { KMN.ChangeNickState 2 }
  elseif (%KMN.Options == KMN.AddDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default }
  elseif (%KMN.Options == KMN.KeepDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default 1 }
  KMN.GetMyNick
}

on *:DISCONNECT: {
  if ($nick == $me && $KMN.NickIsHidden) { hdel MyNicks $KMN.FindNetwork }
}


on *:EXIT: {
  if ($hget(MyNicks)) { 
    hsave -ob MyNicks KeepMyNick.dat
    hfree MyNicks
  }
}

on *:KICK:#: {
  if ($nick == $me || $nick == $KMN.MyNick) {
    if ( $KMN.NickState > 0 ) {
      KMN.ChangeNickState 2
    }
  }
}

on *:PART:#: {
  if ($nick == $me || $nick == $KMN.MyNick) {
    if ( $KMN.NickState > 0 ) {
      KMN.ChangeNickState 2
    }
  }
}

on *:NICK: {
  if ($nick != $me && $nick == $KMN.MyNick) {
    if ( $KMN.NickState > 0 ) {
      tnick $KMN.MyNick
    }
  }
  elseif ($nick == $me && $nick == $KMN.MyNick && $KMN.NickState > 0) {
    echo -at [KeepMyNick] Disabled for network $KMN.FindNetwork
    KMN.ChangeNickState 0
  }
}

on *:QUIT: {
  if ($nick != $me && $nick == $KMN.MyNick) {
    if ( $KMN.NickState > 0 ) {
      tnick $KMN.MyNick
    }
  }
}

;----------------------[ R A W   E V E N T S ]----------------------

; ERR_ERRONEUSNICKNAME
raw 432:*: {
  if ($KMN.MyNick && $2 == $KMN.MyNick) {
    echo -st [KeepMyNick] $2 - Erroneous Nickname
    echo -st [KeepMyNick] Disabling for network $KMN.FindNetwork
    KMN.ChangeNickState 0
    halt
  }
}

; ERR_NICKNAMEINUSE
raw 433:*: {
  if ($KMN.MyNick && $2 == $KMN.MyNick) {
    halt
  }
}

; ERR_UNAVAILRESOURCE
raw 437:*: {
  if ($KMN.MyNick && $2 == $KMN.MyNick) {
    halt
  }
}

; ERR_RESTRICTED
raw 484:*: {
  if ($KMN.FindNetwork != IRCnet || $left($me, 1) !isin 0123456789) {
    if ($KMN.NickState && $KMN.NickState != 0) {
      echo -st [KeepMyNick] Your connection is restricted!
      echo -st [KeepMyNick] Disabling for network $KMN.FindNetwork
      KMN.ChangeNickState 0
      halt
    }
  }
}

;---------------------[From OmenServe 1.42-b08]---------------------
; This should compensate for NewNet's lack of $network issues
alias KMN.FindNetwork {
  if ( $network != $null ) { return $network }
  if ( $server == irc.aohell.org ) { return NewNet }
  if ( $server == irc.d0t.net ) { return NewNet }
  if ( $server == irc.dividedspace.com ) { return NewNet }
  if ( $server == irc.dragonskeep.com ) { return NewNet }
  if ( $server == irc.eskimo.com ) { return NewNet }
  if ( $server == irc.feartomorrow.com ) { return NewNet }
  if ( $server == irc.firex.org ) { return NewNet }
  if ( $server == irc.josephbarnhart.net ) { return NewNet }
  if ( $server == irc.linux-friendly-56k.com ) { return NewNet }
  if ( $server == irc.phantomshitter.net ) { return NewNet }
  if ( $server == irc.sweatnet.net ) { return NewNet }
  if ( $server == irc.moo.me.uk ) { return NewNet }
  if ( $server == olympic.olympos-net.gr ) { return NewNet }
  if ( $server != $null ) { return $server }
  return Offline
}
;------------------------------[END]--------------------------------
;-----------------------[ F U N C T I O N S ]-----------------------
alias KMN.MyNick {
  if ($1) {
    return $gettok($hget(MyNicks, $1), 2, 32)
  }
  else {
    return $gettok($hget(MyNicks, $KMN.FindNetwork), 2, 32)
  }
}

alias KMN.NickState {
  if ($1) {
    return $gettok($hget(MyNicks, $1), 1, 32)
  }
  else {
    return $gettok($hget(MyNicks, $KMN.FindNetwork), 1, 32)
  }
}

alias KMN.NickIsHidden {
  if ($1) {
    return $gettok($hget(MyNicks, $1), 3, 32)
  }
  else {
    return $gettok($hget(MyNicks, $KMN.FindNetwork), 3, 32)
  }
}

alias KMN.ChangeNickState {
  hadd -m MyNicks $KMN.FindNetwork $1 $mid($hget(MyNicks, $KMN.FindNetwork), 3)
}

alias KMN.GetMyNick {
  var %currentserver = $cid
  var %i = 1
  while ($scon(%i)) {
    scid $scon(%i)
    if ( $server != $null && $me != $KMN.MyNick && $KMN.NickState > 1 ) {
      if ($comchan($KMN.MyNick,0) != 0) {
        KMN.ChangeNickState 1
      }
      else {
        tnick $KMN.MyNick
      }
    }
    inc %i
  }
  scid %currentserver
  .timerKeepMyNick -i 1 %KMN.Delay KMN.GetMyNick
}

alias KMN.GetNetworkFromLine {
  return $gettok($did(KMN.Setup, 11).seltext, 2, $asc(@))
}

alias KMN.CheckDelay {
  if ($1 !isnum) { return 10 }
  elseif ($1 < 5 ) { return 5 }
  elseif ($1 > 600) { return 600 }
  else { return $1 }
}

alias KMN.UpdateNicks {
  var %currentserver = $cid
  var %i = 1
  while ($scon(%i)) {
    scid $scon(%i)
    if ((!$KMN.MyNick || $KMN.NickIsHidden) && %KMN.Options == KMN.AddDef) { 
      hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default
    }
    elseif ((!$KMN.MyNick || $KMN.NickIsHidden) && %KMN.Options == KMN.KeepDef) {
      hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default 1
    }
    elseif ($KMN.NickIsHidden && %KMN.Options != KMN.KeepDef) {
      hdel MyNicks $KMN.FindNetwork
    }
    inc %i
  }
  scid %currentserver
  KMN.GetMyNick
}

alias KMN.DialogDelNick {
  if ($1) {
    hdel MyNicks $1
    did -d KMN.Setup 11 $did(KMN.Setup, 11, 1).sel
  }
}

alias KMN.DialogAddNick {
  if ($1) { hdel MyNicks $1 }
  hadd -m MyNicks $did(KMN.AddEdit,101) 2 $did(KMN.AddEdit,102)
  if ($1) { did -o KMN.Setup 11 $did(KMN.Setup, 11, 1).sel $did(KMN.AddEdit,102) $+ @ $+ $did(KMN.AddEdit,101) }
  else { did -a KMN.Setup 11 $did(KMN.AddEdit,102) $+ @ $+ $did(KMN.AddEdit,101) }
  KMN.GetMyNick
}

alias KMN.DialogCheckBox {
  if ($1 == 23) { var %i = 24 }
  else { var %i = 23 }
  if ($did(KMN.setup, $1).state == 0) { 
    if ($1 == 23) { var %i = 24 }
    else { var %i = 23 }
    %KMN.Options = $null
    did -e KMN.setup %i
  }
  else {
    if ($1 == 23) { 
      var %i = 24
      %KMN.Options = KMN.AddDef
    }
    else {
      var %i = 23
      %KMN.Options = KMN.KeepDef
    }
    did -b KMN.setup %i
  }
}
;------------------------[ C O M M A N D S ]------------------------
alias keepnick {
  if ($2 == $null && $server == $null) {
    echo -st [KeepMyNick] Connect to a server first.
    halt
  }
  if ($1) { 
    if ($2 && $2 != default) { hadd -m MyNicks $2 2 $1 }
    elseif ($2 && $2 == default) { %KMN.Default = $1 | %KMN.Options = KMN.KeepDef }
    else { hadd -m MyNicks $KMN.FindNetwork 2 $1 }
    KMN.GetMyNick
  }
  else { 
    echo -st [KeepMyNick] Disabled for network $KMN.FindNetwork
    KMN.ChangeNickState 0
  }
}

alias listnick {
  echo -at [KeepMyNick] List of nicks:
  var %i = 1
  if ($1 == -all) {
    var %max.servers = $hget(MyNicks,0).item
    while (%i <= %max.servers) {
      var %tmpserver = $hget(MyNicks,%i).item
      if (!$KMN.NickIsHidden(%tmpserver)) {
        echo -at [KeepMyNick] $KMN.MyNick(%tmpserver) $+ @ $+ %tmpserver
      }
      inc %i
    }
  }
  else {
    var %currentserver = $cid
    while ($scon(%i)) {
      scid $scon(%i)
      if ($server && $KMN.MyNick && !$KMN.NickIsHidden) {
        echo -at [KeepMyNick] $KMN.MyNick $+ @ $+ $KMN.FindNetwork $iif(($KMN.NickState == 0),(disabled),(enabled))
      }
      inc %i
    }
    scid %currentserver
  }
}

alias delnick {
  if ($1 && $1 == default && %KMN.Options = KMN.KeepDef) {
    echo -st [KeepMyNick] Default nick disabled.
    %KMN.Options = $null
    KMN.UpdateNicks
  }
  elseif ($1 && $KMN.MyNick($1)) {
    echo -st [KeepMyNick] Nick for $1 deleted.
    hdel MyNicks $1
  }
  elseif ($1 == $null && $KMN.MyNick) {
    echo -st [KeepMyNick] Nick for $KMN.FindNetwork deleted.
    hdel MyNicks $KMN.FindNetwork
  }
  else { echo -st [KeepMyNick] No nick for that network. }
}

;----------------------------[ M E N U ]----------------------------
menu menubar {
  %KMN.Version { dialog -m KMN.setup KMN.SetupDialog }
}
;-------------------------[ D I A L O G S ]-------------------------
dialog -l KMN.SetupDialog {
  title %KMN.Version
  size -1 -1 210 155
  option dbu

  box "Setup", 10, 2 2 206 130
  list 11, 30 19 165 65, size, sort, vsbar
  button "Add", 12, 6 19 20 15
  button "Edit", 13, 6 36 20 15
  button "Del", 14, 6 53 20 15
  text "Nicks:", 15, 31 10 25 8
  text %KMN.Version by Czuz, 16, 125 90 80 8
  link "Latest version", 17, 125 98 80 8

  text "Timer delay:", 18, 30 87 30 8
  edit %KMN.Delay, 19, 63 86 35 10, right, limit 4
  text "sec.", 20, 100 87 10 8
  text "Default nick:", 21, 30 99 30 8
  edit %KMN.Default, 22, 63 98 35 10, right
  check "Add default nick to undefined networks", 23, 30 111 200 8
  check "Keep default nick on undefined networks", 24, 30 121 200 8

  button "Done", 99, 85 135 40 15, ok
}

dialog -l KMN.AddEditDialog {
  title "KeepMyNick - Add/Edit"
  size -1 -1 145 60
  option dbu

  combo 101, 15 15 60 10, edit, vsbar, drop
  edit "", 102, 90 15 40 10
  text "Network:", 103, 17 5 58 8
  text "Nick:", 104, 92 5 38 8

  button "Ok", 109, 30 35 30 15, ok
  button "Cancel", 110, 85 35 30 15, cancel
}

on *:dialog:KMN.setup:init:0 {
  var %max.servers = $hget(MyNicks,0).item
  var %i = 1
  while (%i <= %max.servers) {
    var %tmpserver = $hget(MyNicks,%i).item
    if (!$KMN.NickIsHidden(%tmpserver)) {
      did -a KMN.setup 11 $KMN.MyNick(%tmpserver) $+ @ $+ %tmpserver
    }
    inc %i
  }
  if (%KMN.Options == KMN.AddDef) { did -c KMN.setup 23 | did -b KMN.setup 24 }
  elseif (%KMN.Options == KMN.KeepDef) { did -c KMN.setup 24 | did -b KMN.setup 23 }
}

on *:dialog:KMN.setup:sclick:12 { 
  did -u KMN.Setup 11 $did(KMN.Setup, 11, 1).sel
  $dialog(KMN.AddEdit, KMN.AddEditDialog, -4)
}

on *:dialog:KMN.setup:sclick:13 { $dialog(KMN.AddEdit, KMN.AddEditDialog, -4) }
on *:dialog:KMN.setup:sclick:14 { $KMN.DialogDelNick($KMN.GetNetworkFromLine) }
on *:dialog:KMN.setup:sclick:17 { run https://github.com/Czuz/KeepMyNick }
on *:dialog:KMN.setup:edit:19 { %KMN.Delay = $KMN.CheckDelay($did(KMN.setup,19)) }
on *:dialog:KMN.setup:edit:22 { %KMN.Default = $did(KMN.setup, 22)) }
on *:dialog:KMN.setup:sclick:23,24 { $KMN.DialogCheckBox($did) }
on *:dialog:KMN.setup:sclick:99 { $KMN.UpdateNicks }

on *:dialog:KMN.AddEdit:init:0 {
  var %sel.network = $KMN.GetNetworkFromLine
  if (%sel.network) { did -a KMN.AddEdit 101 %sel.network }

  var %currentserver = $cid
  var %i = 1
  while ($scon(%i)) {
    scid $scon(%i)
    if ($server != $null && $network != $did(KMN.AddEdit,101,1)) {
      did -a KMN.AddEdit 101 $KMN.FindNetwork
    }
    inc %i
  }
  scid %currentserver

  did -c KMN.AddEdit 101 1
  did -i KMN.AddEdit 102 1 $KMN.MyNick($did(KMN.AddEdit,101,1))
}

on *:dialog:KMN.AddEdit:sclick:109 { $KMN.DialogAddNick($KMN.GetNetworkFromLine) }
;----------------------------[ E N D ]------------------------------



Expand


Read More