• Notice regarding image hosts and attachments. See here.

IRC

That's been my text message tone for years, love it :)
Woooh that is a blast from the past, not heard that for a long long time :) Also a long time user of IRC, initially chat.virgin.net back when they were a dial up ISP and then later EFnet. Not ventured on in a very long time though.
 
Nowadays people seem to use Discord which is fine and honestly that is what I used while I wasn't using IRC.
I had to explain Discord the other day to somebody who had only heard the name but didn't know what it was, I went with "Imagine if somebody smooshed mIRC and Ventrilo into one program, then made it look like a Windows 8 app" :cry:.
 
Last edited:
1792449368855.webp


/me slaps OP around with a large trout
 
I spent waaaay too much time messing about in mIRC script back in the day;

More out of curiosity as to the architecture than anything else but prototyped an entire IRC client in mIRC script to the minimum required feature level with an integrated Quake 3 server monitor:

Code:
dialog bobmain {

  ; header
  title "projectbob - Control Panel"
  icon $mircdirprojectbob\gfx\projectbob.ico
  option dbu
  size -1 -1 240 160
  ; end header

  ; tabs
  tab "General", 1, 0 0 240 160
  tab "Kernel", 2
  tab "Quake 3 Servers", 3
  tab "Channels", 4
  tab "Log", 5
  tab "Advanced", 6
  tab "Op Protection", 7
  ; end tabs

  ; tab 1
  text "Nick:",101,5 20 30 7, tab 1
  edit "", 102, 30 20 64 9, tab 1
  button "Change Nick", 103, 96 20 44 9, tab 1

  check "Start with mIRC", 104, 5 32 45 9, tab 1
  check "Run init script on connect", 105, 96 32 70 9, tab 1
  text "Init Script (these are raw commands, use %bobSessionName for current name):",106,5 44 230 7, tab 1
  edit "", 107, 5 53 230 36, multi vsbar autovs return tab 1
  button "Save Settings", 108, 170 135 64 12, default tab 1
  ; end tab 1

  ; tab 3
  text "name:", 301, 5 20 30 7, tab 3
  edit "<new server>", 302, 30 20 64 9, tab 3

  text "server IP:", 303, 5 32 30 7,  tab 3
  edit "127.0.0.1", 304, 30 32 64 9,  tab 3

  text "port:", 305, 5 44 30 7,  tab 3
  edit "27960", 306, 30 44 64 9,  tab 3

  text "server list:", 307, 5 65 60 7,  tab 3
  list 308, 5 74 88 58, sort vsbar tab 3

  button "Add/Edit", 309, 5 56 30 9, default tab 3
  button "Del", 310, 64 56 30 9, default tab 3

  text "available chans:", 311, 100 20 60 7,  tab 3
  text "announce in:", 312, 170 20 60 7,  tab 3
  list 313, 100 32 64 100, sort vsbar tab 3
  list 314, 170 32 64 100, sort vsbar tab 3

  button "Start", 315, 5 130 30 9, default tab 3
  button "Stop", 316, 64 130 30 9, default tab 3

  text "status:", 317, 100 130 18 7,  tab 3
  text "inactive", 318, 118 130 30 7,  tab 3

  check "autostart on irc connect", 319, 170 130 68 9, tab 3

  ; end tab 3

  ; tab 6
  text "raw commands:", 601, 5 20 43 7, tab 6
  edit "", 602, 44 20 190 9, limit 255 autohs multi tab 6
  button "Send", 603, 170 32 64 12, default tab 6
  text "WARNING: this is for advanced users only. Raw commands entered here could easily break script functionality if you don't know what you are doing", 604, 5 32 160 21, multi tab 6
  ; end tab 6

  ; tab 2
  text "name:", 201, 5 20 30 7, tab 2
  edit "__hyperion", 202, 30 20 64 9, tab 2

  text "alt name:", 203, 5 32 30 7,  tab 2
  edit "projectbob", 204, 30 32 64 9,  tab 2

  text "server:", 205, 5 44 30 7,  tab 2
  edit "irc.aten-hosted.com", 206, 30 44 64 9,  tab 2

  text "port:", 207, 5 56 30 7,  tab 2
  edit "6667", 208, 30 56 64 9,  tab 2

  text "version:", 209, 5 68 30 7,  tab 2
  edit "projectbob - hyperion kernel 1", 210, 30 68 64 9,  autohs read tab 2

  text "chan list:", 211, 100 20 30 7,  tab 2
  text "join list:", 212, 170 20 30 7,  tab 2
  list 213, 100 32 64 100, sort vsbar tab 2
  list 214, 170 32 64 100, sort vsbar tab 2

  text "chan:", 215, 5 101 30 7,  tab 2
  edit "#channel", 216, 30 101 64 9,  tab 2
  button "Add to list >>", 217, 30 113 64 12, default tab 2

  check "auto reconnect", 218, 5 80 44 9, tab 2
  check "invisible mode", 219, 53 80 42 9, tab 2

  button "Connect", 220, 5 135 64 12, default tab 2
  button "Disconnect", 221, 70 135 64 12, default tab 2
  button "Save Settings", 222, 170 135 64 12, default tab 2

  check "connect on startup", 223, 5 148 55 9, tab 2

  button "Remove", 224, 140 20 24 9, default tab 2
  button "Password", 225, 203 20 32 9, default tab 2

  text "Status:", 226, 171 150 20 9, tab 2
  text "Disconnected", 227, 192 150 55 9, tab 2
  ; end tab 2

  ; tab 5
  edit "", 501, 0 14 240 146, read multi vsbar autovs tab 5
  ; end tab 5

}

alias BobIRCsave {
  set %bobMainAddr $did(winbobmain, 206).text
  set %bobMainPort $did(winbobmain, 208).text

  set %bobMainName $did(winbobmain, 202).text
  set %bobMainAname $did(winbobmain, 204).text

  set %bobMainAuto $did(winbobmain, 218).state
  set %bobMainInvis $did(winbobmain, 219).state
  set %bobMainStartup $did(winbobmain, 223).state

  set %bobGenStartup $did(winbobmain, 104).state
  set %bobGendoInit $did(winbobmain, 105).state

  writeini %bobConfigFile kernel serverAddress %bobMainAddr
  writeini %bobConfigFile kernel serverPort %bobMainPort
  writeini %bobConfigFile kernel Name %bobMainName
  writeini %bobConfigFile kernel Aname %bobMainAname
  writeini %bobConfigFile kernel Auto %bobMainAuto
  writeini %bobConfigFile kernel Invis %bobMainInvis
  writeini %bobConfigFile kernel Startup %bobMainStartup

  writeini %bobConfigFile General Startup %bobGenStartup
  writeini %bobConfigFile General doInit %bobGendoInit

  write -c %bobInitFile
  set %bobl $did(winbobmain, 107).lines
  set %bobc 0
  if (%bobl > 0) {
    while (%bobc < %bobl) {
      inc %bobc 1
      write -a %bobInitFile $did(winbobmain, 107, %bobc).text
    }
  }

  did -a winbobmain 501 Saving kernel settings to ini file $mircdirprojectbob\config\settings.ini ...
}

alias BobAutoStartServers {
  set %bobm $lines(%bobServerFile)
  set %bobc 1
  if (%bobm > 1) {
    while (%bobc < %bobm) {
      inc %bobc 1
      set %bobl $read(%bobServerFile, %bobc)
      set %bobe $left(%bobl,$calc($pos(%bobl,=,1)-1))

      set %bobmonitortemp $readini(%bobServer2File,%bobe,autoStart)
      if (%bobmonitortemp == 1) {
        set %tempIP $readini(%bobServer2File,%bobe,serverIP)
        set %tempPort $readini(%bobServer2File,%bobe,serverPort)

        hadd bobIRCip bobIRCq $+ %bobe %bobe
        hadd bobIRCip2 bobIRCq $+ %bobe %tempIP $+ $chr(58) $+ %tempPort
        hadd bobIRCipR %bobe bobIRCq $+ %bobe
        hadd bobIRCactive %bobe 1

        if ($did(winbobmain, 308).seltext == %bobe) {
          did -ra winbobmain 318 active
        }

        .timerbobIRCq $+ %bobe 0 10 sockudp -k bobIRCq $+ %bobe %tempIP %tempPort ÿÿÿÿgetstatus
      }
    }
  }
}

alias BobJoinChannels {
  set %bobm $lines(%bobChannelFile)
  set %bobc 1
  if (%bobm > 1) {
    while (%bobc < %bobm) {
      inc %bobc 1
      set %bobl $read(%bobChannelFile, %bobc)
      set %bobe $left(%bobl,$calc($pos(%bobl,=,1)-1))
      set %bobv $right(%bobl,$calc($len(%bobl) - $pos(%bobl,=,1)))
      set %bobReadPwd $readini(%bobPasswordFile,passwords,%bobe)
      if (%bobv == 2) {
        if (%bobReadPwd == $null)  {
          sockwrite bobskt1 JOIN %bobe $+ $crlf
          did -a winbobmain 501 * JOIN %bobe $+ $crlf
        }
        else {
          sockwrite bobskt1 JOIN %bobe : $+ %bobReadPwd $+ $crlf
          did -a winbobmain 501 * JOIN %bobe : $+ %bobReadPwd $+ $crlf
        }
      }
    }
  }
}

alias BobIRCexit {
  if ($hget(bobIRCip) != $null) hfree bobIRCip
  if ($hget(bobIRCip2) != $null) hfree bobIRCip2
  if ($hget(bobIRCipR) != $null) hfree bobIRCipR
  if ($hget(bobIRCmap) != $null) hfree bobIRCmap
  if ($hget(bobIRCplayers) != $null) hfree bobIRCplayers
  if ($hget(bobIRCactive) != $null) hfree bobIRCactive

  if ($sock(bobskt1).status != $null) {
    sockwrite bobskt1 QUIT :hyperion logging off $+ $crlf
    sockclose bobskt1
    set %bobConnected 0
  }
  .timerBobState off

  sockclose bobIRCq*
  .timerbobIRCq* off
}

alias BobIRCinit {
  sockopen bobskt1 $did(winbobmain, 206).text $did(winbobmain, 208).text

  set %bobMainAddr $did(winbobmain, 206).text
  set %bobMainPort $did(winbobmain, 208).text

  set %bobMainName $did(winbobmain, 202).text
  set %bobMainAname $did(winbobmain, 204).text

  set %bobMainAuto $did(winbobmain, 218).state
  set %bobMainInvis $did(winbobmain, 219).state
  set %bobMainStartup $did(winbobmain, 223).state

  set %bobGenStartup $did(winbobmain, 104).state
  set %bobGendoInit $did(winbobmain, 105).state

  set %bobConnected 1
  did -ra winbobmain 227 Connecting...

  ;if (%bobMainAuto == 1) {
  .timerBobState 0 30 BobCheckState
  ;}
}

alias BobCheckState {
  if ($sock(bobskt1).status == $null && %bobConnected == 1) {
    did -ra winbobmain 227 Disconnected
    set %bobConnected 0
    sockclose bobIRCq*
    .timerbobIRCq* off
    did -ra winbobmain 318 inactive
    if (%bobMainAuto == 1) {
      did -a winbobmain 501 * Lost link to server... reconnecting... $+ $crlf
      did -ra winbobmain 227 Reconnecting...
      sockopen bobskt1 $did(winbobmain, 206).text $did(winbobmain, 208).text

      set %bobMainAddr $did(winbobmain, 206).text
      set %bobMainPort $did(winbobmain, 208).text

      set %bobMainName $did(winbobmain, 202).text
      set %bobMainAname $did(winbobmain, 204).text

      set %bobMainAuto $did(winbobmain, 218).state
      set %bobMainInvis $did(winbobmain, 219).state
      set %bobMainStartup $did(winbobmain, 223).state

      set %bobGenStartup $did(winbobmain, 104).state
      set %bobGendoInit $did(winbobmain, 105).state

      set %bobConnected 1
      did -ra winbobmain 227 Connecting...
    }
  }
}

alias BobIRCload {
  if ($dialog(winbobmain)) {
    dialog -v winbobmain
    return
  }
  dialog -dm winbobmain bobmain

  set %bobConnected 0
  set %bobMainAddr $readini(%bobConfigFile,kernel,serverAddress)
  set %bobMainPort $readini(%bobConfigFile,kernel,serverPort)
  set %bobMainName $readini(%bobConfigFile,kernel,Name)
  set %bobMainAname $readini(%bobConfigFile,kernel,Aname)
  set %bobMainAuto $readini(%bobConfigFile,kernel,Auto)
  set %bobMainInvis $readini(%bobConfigFile,kernel,Invis)
  set %bobMainStartup $readini(%bobConfigFile,kernel,Startup)

  set %bobGenStartup $readini(%bobConfigFile,General,Startup)
  set %bobGendoInit $readini(%bobConfigFile,General,doInit)

  did -ra winbobmain 206 %bobMainAddr
  did -ra winbobmain 208 %bobMainPort
  did -ra winbobmain 202 %bobMainName
  did -ra winbobmain 204 %bobMainAname

  did -ra winbobmain 102 %bobMainName

  if ($hget(bobIRCip) != $null) hfree bobIRCip
  if ($hget(bobIRCip2) != $null) hfree bobIRCip2
  if ($hget(bobIRCipR) != $null) hfree bobIRCipR
  if ($hget(bobIRCmap) != $null) hfree bobIRCmap
  if ($hget(bobIRCplayers) != $null) hfree bobIRCplayers
  if ($hget(bobIRCactive) != $null) hfree bobIRCactive

  hmake bobIRCip 256
  hmake bobIRCip2 256
  hmake bobIRCipR 256
  hmake bobIRCmap 256
  hmake bobIRCplayers 256
  hmake bobIRCactive 256

  if (%bobGenStartup == 1) {
    did -c winbobmain 104
  }
  else {
    did -u winbobmain 104
  }

  if (%bobGendoInit == 1) {
    did -c winbobmain 105
  }
  else {
    did -u winbobmain 105
  }

  did -r winbobmain 107
  set %bobm $lines(%bobInitFile)
  set %bobc 0
  if (%bobm > 0) {
    while (%bobc < %bobm) {
      inc %bobc 1
      set %bobl $read(%bobInitFile,n, %bobc)
      did -i winbobmain 107 %bobc %bobl
    }
  }

  did -ra winbobmain 210 %bobVersion

  if (%bobMainAuto == 1) {
    did -c winbobmain 218
  }
  else {
    did -u winbobmain 218
  }

  if (%bobMainInvis == 1) {
    did -c winbobmain 219
  }
  else {
    did -u winbobmain 219
  }

  if (%bobMainStartup == 1) {
    did -c winbobmain 223
  }
  else {
    did -u winbobmain 223
  }

  set %bobm $lines(%bobChannelFile)
  set %bobc 1
  if (%bobm > 1) {
    while (%bobc < %bobm) {
      inc %bobc 1
      set %bobl $read(%bobChannelFile, %bobc)
      set %bobe $left(%bobl,$calc($pos(%bobl,=,1)-1))
      set %bobv $right(%bobl,$calc($len(%bobl) - $pos(%bobl,=,1)))
      if (%bobv == 1) {
        did -a winbobmain 213 %bobe
      }
      if (%bobv == 2) {
        did -a winbobmain 214 %bobe
        did -a winbobmain 313 %bobe
      }
    }
  }

  set %bobm $lines(%bobServerFile)
  set %bobc 1
  if (%bobm > 1) {
    while (%bobc < %bobm) {
      inc %bobc 1
      set %bobl $read(%bobServerFile, %bobc)
      set %bobe $left(%bobl,$calc($pos(%bobl,=,1)-1))
      did -a winbobmain 308 %bobe
    }
  }

  if (%bobMainStartup == 1) {
    BobIRCinit
  }
}

on 1:sockopen:bobskt1:{
  sockwrite bobskt1 NICK %bobMainName $+ $crlf
  sockwrite bobskt1 USER %bobMainAname localhost localhost :hyperion $+ $crlf
  set %bobSessionName %bobMainName
  did -ra winbobmain 102 %bobSessionName
}

on 1:udpread:bobIRCq*: {
  if (%bobConnected == 1) {

    set %Q3SKwaits 0
    set %Q3SKreads 0
    set %players $null
    set %ingame 0
    while (%Q3SKwaits == 0) {
      sockread -fn %ociq3
      if (%ociq3 == $null || $sockbr == 0) {
        set %Q3SKwaits 1
      }
      else {
        inc %Q3SKreads 1
        if (%Q3SKreads == 2) {

          set %oneminustoken $findtok(%ociq3,sv_hostname,1,92)
          inc %oneminustoken 1
          set %hostname $gettok(%ociq3,%oneminustoken,92)
          set %hostname $remove(%hostname,^0,^1,^2,^3,^4,^5,^6,^7,^8,^9,^x,^b,^f,^#,^n)

          set %oneminustoken $findtok(%ociq3,mapname,1,92)
          inc %oneminustoken 1
          set %mapname $gettok(%ociq3,%oneminustoken,92)

          set %oneminustoken $findtok(%ociq3,sv_maxclients,1,92)
          inc %oneminustoken 1
          set %maxclients $gettok(%ociq3,%oneminustoken,92)

          set %oneminustoken $findtok(%ociq3,sv_privateClients,1,92)
          inc %oneminustoken 1
          set %prvclients $gettok(%ociq3,%oneminustoken,92)
        }

        if (%Q3SKreads > 2) {
          set %bobplayertemp $hget(bobIRCplayers, $sockname)
          set %servertempIP $hget(bobIRCip2, $sockname)
          set %scoretemp $gettok(%ociq3,1,32)
          set %pingtemp $gettok(%ociq3,2,32)
          set %player $remove($mid(%ociq3,$pos(%ociq3,$chr(34),1)),$chr(34))
          set %player $remove(%player,^0,^1,^2,^3,^4,^5,^6,^7,^8,^9,^x,^b,^f,^#,^n)
          set %bobcheck $null
          set %bobcheck $pos(%bobplayertemp,%player)
          if (%bobcheck == $null && %scoretemp == 0 && %pingtemp > 0) {
            set %bobchantemp $readini(%bobServer2File,$hget(bobIRCip, $sockname),channels)
            set %bobl $numtok(%bobchantemp, 32)
            set %bobc 0
            if (%bobl > 0) {
              while (%bobc < %bobl) {
                inc %bobc 1
                ;sockwrite bobskt1 PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ 7 $+ %player has joined %servertempIP ( $+ %hostname $+ ) $+ $crlf
                sockwrite bobskt1 PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ %player has joined %servertempIP ( $+ %hostname $+ ) $+ $crlf
                did -a winbobmain 501 * PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ %player has joined %servertempIP ( $+ %hostname $+ ) $+ $crlf
              }
            }
          }
          set %players %players $+ $chr(92) $+ %player
          inc %ingame 1
        }
      }
    }

    set %boboldmap $hget(bobIRCmap, $sockname)
    set %tempmax %maxclients - %prvclients

    if (%boboldmap != %mapname) {
      set %bobchantemp $readini(%bobServer2File,$hget(bobIRCip, $sockname),channels)
      set %bobl $numtok(%bobchantemp, 32)
      set %bobc 0
      if (%bobl > 0) {
        while (%bobc < %bobl) {
          inc %bobc 1
          set %servertempIP $hget(bobIRCip2, $sockname)
          ;sockwrite bobskt1 PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ 7 $+ map %mapname is now playing on %servertempIP ( $+ %hostname $+ ) with %ingame of %tempmax players $+ $crlf
          sockwrite bobskt1 PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ map %mapname is now playing on %servertempIP ( $+ %hostname $+ ) with %ingame of %tempmax players $+ $crlf
          did -a winbobmain 501 * PRIVMSG $gettok(%bobchantemp, %bobc, 32) $chr(58) $+ map %mapname is now playing on %servertempIP ( $+ %hostname $+ ) with %ingame of %tempmax players $+ $crlf
        }
      }
    }


    hadd bobIRCplayers $sockname %players
    hadd bobIRCmap $sockname %mapname
  }
  sockclose $sockname
}

on 1:sockread:bobskt1:{
  ; main socket handling here, parse raw commands, etc.
  ; #########################################

  sockread %bobreadtemp

  ; not sure if this next one should be done like this, or buffered to memory/file in case dialog is closed
  ; maybe should exit when dialog closed

  did -a winbobmain 501 %bobreadtemp $+ $crlf

  if ($mid(%bobreadtemp,1,4) == PING) {
    sockwrite bobskt1 PONG $mid(%bobreadtemp,6) $+ $crlf
    did -a winbobmain 501 * PONG $mid(%bobreadtemp,6) $+ $crlf
  }

  set %bobStart $pos(%bobreadtemp,$chr(32),1)
  inc %bobStart 1
  set %bobChars $calc($pos(%bobreadtemp,$chr(32),2) - %bobStart)

  set %bobRAW $mid(%bobreadtemp,%bobStart,%bobChars)

  if (%bobRAW == PRIVMSG) {
    if ($count(%bobreadtemp,VERSION) > 0) {
      set %bobChars $calc($pos(%bobreadtemp,!,1) - 2)
      set %bobRppName $mid(%bobreadtemp,2,%bobChars)
      sockwrite bobskt1 NOTICE %bobRppName :VERSION %bobVersion $+ $+ $crlf
      did -a winbobmain 501 * NOTICE %bobRppName :VERSION %bobVersion $+  $+ $crlf
    }
    if ($count(%bobreadtemp,PING) > 0) {
      set %bobChars $calc($pos(%bobreadtemp,!,1) - 2)
      set %bobRppName $mid(%bobreadtemp,2,%bobChars)
      set %bobChars $calc($pos(%bobreadtemp,PING,1) + 6)
      set %bobRppPong $mid(%bobreadtemp,%bobChars)
      sockwrite bobskt1 NOTICE %bobRppName :PING %bobRppPong $+ $crlf
      did -a winbobmain 501 * NOTICE %bobRppName :PING %bobRppPong $+ $crlf
    }
    if ($count(%bobreadtemp,TIME) > 0) {
      set %bobChars $calc($pos(%bobreadtemp,!,1) - 2)
      set %bobRppName $mid(%bobreadtemp,2,%bobChars)
      sockwrite bobskt1 NOTICE %bobRppName :TIME time request denied $+ $+ $crlf
      did -a winbobmain 501 * NOTICE %bobRppName :TIME time request denied $+  $+ $crlf
    }
    if ($count(%bobreadtemp,FINGER) > 0) {
      set %bobChars $calc($pos(%bobreadtemp,!,1) - 2)
      set %bobRppName $mid(%bobreadtemp,2,%bobChars)
      sockwrite bobskt1 NOTICE %bobRppName :FINGER hyperion by Rroff $+ $+ $crlf
      did -a winbobmain 501 * NOTICE %bobRppName :FINGER hyperion by Rroff $+  $+ $crlf
    }
  }

  ; will need a var for current name and need to keep an eye on what the name is

  if (%bobRAW == NICK) {
    ; someone is changing nick or a nick change is being forced, look for the name and if its our current name, update current name with latest on server
    if ( $count($mid(%bobreadtemp,1,$pos(%bobreadtemp,$chr(32),1)),!) > 0) {
      set %bobChars $calc($pos(%bobreadtemp,!,1) - 2)
      set %bobRppName $mid(%bobreadtemp,2,%bobChars)
      if (%bobRppName == %bobSessionName) {
        set %bobStart $calc($pos(%bobreadtemp,$chr(58),$count(%bobreadtemp,$chr(58))) + 1)
        set %bobSessionName $mid(%bobreadtemp,%bobStart)
        did -ra winbobmain 102 %bobSessionName
      }
    }
  }

  if (%bobRAW == 431 || %bobRAW == 432 || %bobRAW == 433 || %bobRAW == 436) {
    if (%bobSessionName == %bobMainAname) {
      set %bobrand $rand(1000,9999)
      sockwrite bobskt1 NICK %bobMainAname $+ %bobrand $+ $crlf
      did -a winbobmain 501 * NICK %bobMainAname $+ %bobrand $+ $crlf
    }
    else {
      sockwrite bobskt1 NICK %bobMainAname $+ $crlf
      did -a winbobmain 501 * NICK %bobMainAname $+ $crlf
    }
  }

  if (%bobRAW == 001) {
    set %bobFirstConnect 1
  }

  if (%bobRAW == 376 || %bobRAW == 422) {
    if (%bobMainInvis == 1 && %bobFirstConnect == 1)  {
      sockwrite bobskt1 MODE %bobSessionName +i $+ $crlf
      did -a winbobmain 501 * MODE %bobSessionName +i $+ $crlf
      if (%bobGendoInit == 1) {
        set %bobm $lines(%bobInitFile)
        set %bobc 0
        if (%bobm > 0) {
          while (%bobc < %bobm) {
            inc %bobc 1
            set %bobl $read(%bobInitFile, %bobc)
            sockwrite bobskt1 %bobl $+ $crlf
            did -a winbobmain 501 * %bobl $+ $crlf
          }
        }
      }
      BobJoinChannels
      BobAutoStartServers
      set %bobFirstConnect 0
      did -ra winbobmain 227 Connected
    }
  }
}

on 1:dialog:winbobmain:sclick:103:{
  set %bobNewName $did(winbobmain, 102).text
  if (%bobConnected == 1 && %bobNewName != $null) {
    sockwrite bobskt1 NICK %bobNewName $+ $crlf
    did -a winbobmain 501 * NICK %bobNewName $+ $crlf
  }
}

on 1:dialog:winbobmain:sclick:603:{
  sockwrite bobskt1 $did(winbobmain,602).text $+ $crlf
  did -a winbobmain 501 * $did(winbobmain,602).text $+ $crlf
}

on 1:dialog:winbobmain:sclick:221:{
  if ($sock(bobskt1).status != $null) {
    sockwrite bobskt1 QUIT :hyperion logging off $+ $crlf
    did -a winbobmain 501 * QUIT :hyperion logging off $+ $crlf
    sockclose bobskt1
    set %bobConnected 0
    did -ra winbobmain 227 Disconnected
    .timerBobState off
    sockclose bobIRCq*
    .timerbobIRCq* off
    did -ra winbobmain 318 inactive
  }
}

on 1:dialog:winbobmain:sclick:217:{
  if ($len($did(winbobmain, 216).text) < 1) return
  set %bobChannel $did(winbobmain, 216).text
  if ($readini(%bobChannelFile,channels,%bobChannel) == $null)  {
    did -a winbobmain 213 %bobChannel
    writeini %bobChannelFile channels $did(winbobmain, 216).text 1
  }
}

on 1:dialog:winbobmain:sclick:218:{
  set %bobMainAuto $did(winbobmain, 218).state

  ;if (%bobMainAuto == 1 && %bobConnected == 1)  {
  .timerBobState 0 30 BobCheckState
  ;}

  ;if (%bobMainAuto == 0)  {
  ;  .timerBobState off
  ;}
}

on 1:dialog:winbobmain:dclick:213:{
  did -a winbobmain 214 $did(winbobmain, 213).seltext
  did -a winbobmain 313 $did(winbobmain, 213).seltext
  writeini %bobChannelFile channels $did(winbobmain, 213).seltext 2
  did -d winbobmain 213 $did(winbobmain, 213,1).sel
}

on 1:dialog:winbobmain:sclick:224:{
  if ($did(winbobmain, 213,0).sel == 0) return
  remini %bobChannelFile channels $did(winbobmain, 213).seltext
  did -d winbobmain 213 $did(winbobmain, 213,1).sel
}

on 1:dialog:winbobmain:sclick:225:{
  if ($did(winbobmain, 214,0).sel == 0) return
  set %bobChan4Pwd $did(winbobmain, 214).seltext
  set %bobChanPwd $input(Enter the join password for %bobChan4Pwd,eoqs,winbobmain,Enter Channel Password,$readini(%bobPasswordFile,passwords,%bobChan4Pwd))
  if (%bobChanPwd != $null) {
    writeini %bobPasswordFile passwords %bobChan4Pwd %bobChanPwd
  }
  else {
    remini %bobPasswordFile passwords %bobChan4Pwd
  }
}

on 1:dialog:winbobmain:sclick:308:{
  did -ra winbobmain 302 $did(winbobmain, 308).seltext
  did -ra winbobmain 304 $readini(%bobServer2File,$did(winbobmain, 308).seltext,serverIP)
  did -ra winbobmain 306 $readini(%bobServer2File,$did(winbobmain, 308).seltext,serverPort)

  if ($hget(bobIRCactive, $did(winbobmain, 308).seltext) == 1 ) {
    if (%bobConnected == 1) {
      did -ra winbobmain 318 active
    }
    else {
      did -ra winbobmain 318 inactive
      hadd bobIRCactive $did(winbobmain, 308).seltext 0
    }
  }
  else {
    did -ra winbobmain 318 inactive
  }

  set %bobmonitortemp $readini(%bobServer2File,$did(winbobmain, 308).seltext,autoStart)
  if (%bobmonitortemp == 1) {
    did -c winbobmain 319
  }
  else {
    did -u winbobmain 319
  }

  did -r winbobmain 314
  set %bobchantemp $readini(%bobServer2File,$did(winbobmain, 308).seltext,channels)
  set %bobl $numtok(%bobchantemp, 32)
  set %bobc 0
  if (%bobl > 0) {
    while (%bobc < %bobl) {
      inc %bobc 1
      did -a winbobmain 314 $gettok(%bobchantemp, %bobc, 32)
    }
  }
}

on 1:dialog:winbobmain:sclick:309:{
  if ($len($did(winbobmain, 302).text) < 1) return
  set %bobServer $did(winbobmain, 302).text
  if ($readini(%bobServerFile,servers,%bobServer) == $null)  {
    did -a winbobmain 308 %bobServer
  }
  writeini %bobServerFile servers %bobServer 1
  writeini %bobServer2File %bobServer serverIP $did(winbobmain, 304).text
  writeini %bobServer2File %bobServer serverPort $did(winbobmain, 306).text
  writeini %bobServer2File %bobServer autoStart $did(winbobmain, 319).state
  set %bobl $did(winbobmain, 314).lines
  set %bobc 0
  set %bobchantemp $null
  if (%bobl > 0) {
    while (%bobc < %bobl) {
      inc %bobc 1
      set %bobchantemp %bobchantemp $did(winbobmain, 314, %bobc).text
    }
    writeini %bobServer2File %bobServer channels %bobchantemp
  }
}

on 1:dialog:winbobmain:sclick:310:{
  ; rem need to make sure something is selected in 308
  set %bobremovetemp $did(winbobmain, 308).seltext
  set %bobremovenum $did(winbobmain, 308, 1).sel
  remini %bobServerFile servers %bobremovetemp
  remini %bobServer2File %bobremovetemp
  did -d winbobmain 308 %bobremovenum
  sockclose $hget(bobIRCipR, $did(winbobmain, 308).seltext)
  .timer $+ $hget(bobIRCipR, $did(winbobmain, 308).seltext) off
  hadd bobIRCactive $did(winbobmain, 308).seltext 0
  did -ra winbobmain 318 inactive
}

on 1:dialog:winbobmain:sclick:316:{
  hadd bobIRCactive $did(winbobmain, 308).seltext 0
  sockclose $hget(bobIRCipR, $did(winbobmain, 308).seltext)
  .timer $+ $hget(bobIRCipR, $did(winbobmain, 308).seltext) off
  did -ra winbobmain 318 inactive
}

on 1:dialog:winbobmain:sclick:315:{
  set %tempIP $readini(%bobServer2File,$did(winbobmain, 308).seltext,serverIP)
  set %tempPort $readini(%bobServer2File,$did(winbobmain, 308).seltext,serverPort)

  hadd bobIRCip bobIRCq $+ $did(winbobmain, 308).seltext $did(winbobmain, 308).seltext
  hadd bobIRCip2 bobIRCq $+ $did(winbobmain, 308).seltext %tempIP $+ $chr(58) $+ %tempPort
  hadd bobIRCipR $did(winbobmain, 308).seltext bobIRCq $+ $did(winbobmain, 308).seltext
  hadd bobIRCactive $did(winbobmain, 308).seltext 1

  did -ra winbobmain 318 active

  .timerbobIRCq $+ $did(winbobmain, 308).seltext 0 10 sockudp -k bobIRCq $+ $did(winbobmain, 308).seltext %tempIP %tempPort ÿÿÿÿgetstatus
}

on 1:dialog:winbobmain:dclick:214:{
  writeini %bobChannelFile channels $did(winbobmain, 214).seltext 1
  did -a winbobmain 213 $did(winbobmain, 214).seltext
  set %bobTemp $did(winbobmain, 214,1).sel
  did -d winbobmain 214 %bobTemp
  did -d winbobmain 313 %bobTemp
}

on 1:dialog:winbobmain:dclick:313:{
  set %bobl $did(winbobmain, 314).lines
  set %bobc 0
  if (%bobl > 0) {
    while (%bobc < %bobl) {
      inc %bobc 1
      if ($did(winbobmain, 314, %bobc).text == $did(winbobmain, 313).seltext) {
        return
      }
    }
  }
  did -a winbobmain 314 $did(winbobmain, 313).seltext
}

on 1:dialog:winbobmain:dclick:314:{
  set %bobTemp $did(winbobmain, 314,1).sel
  did -d winbobmain 314 %bobTemp
}

on 1:dialog:winbobmain:sclick:220:{
  BobIRCinit
}

on 1:dialog:winbobmain:sclick:222:{
  BobIRCsave
}

on 1:dialog:winbobmain:sclick:108:{
  BobIRCsave
}

on 1:dialog:winbobmain:close:0:{
  BobIRCexit
}

on 1:unload:{
  BobIRCexit

  if ($version >= 6.2) {
    /toolbar -d bobsep1
    /toolbar -d bobbut1
    /toolbar -d bobsep2
  }
}

on 1:start:{
  if ($hget(bobIRCip) != $null) hfree bobIRCip
  if ($hget(bobIRCip2) != $null) hfree bobIRCip2
  if ($hget(bobIRCipR) != $null) hfree bobIRCipR
  if ($hget(bobIRCmap) != $null) hfree bobIRCmap
  if ($hget(bobIRCplayers) != $null) hfree bobIRCplayers
  if ($hget(bobIRCactive) != $null) hfree bobIRCactive

  hmake bobIRCip 256
  hmake bobIRCip2 256
  hmake bobIRCipR 256
  hmake bobIRCmap 256
  hmake bobIRCplayers 256
  hmake bobIRCactive 256

  set %bobConfigFile " $+ $mircdirprojectbob\config\settings.ini $+ "
  set %bobInitFile " $+ $mircdirprojectbob\config\init.txt $+ "
  set %bobServerFile " $+ $mircdirprojectbob\config\servers.ini $+ "
  set %bobServer2File " $+ $mircdirprojectbob\config\servers2.ini $+ "
  set %bobChannelFile " $+ $mircdirprojectbob\config\channels.ini $+ "
  set %bobPasswordFile " $+ $mircdirprojectbob\config\passwords.ini $+ "
  set %bobVersion projectbob - hyperion kernel 2005.1.3 experimental client
  set %bobSessionName $null
  set %bobFirstConnect 1

  if (%bobGenStartup == 1) {
    BobIRCload
  }

  if ($version >= 6.2) {
    /toolbar -as bobsep1
    /toolbar -az1 bobbut1 "ProjectBob" "projectbob\gfx\projectbob.ico" /BobIRCload
    /toolbar -as bobsep2
  }
}

menu menubar {
  -
  ProjectBob:{
    BobIRCload
  }
}

(This was over 25 years ago so my coding abilities have come on a bit since then :s )

Also built a full DCC w/ mini HTTP web server and the basics of a software 3D renderer in mIRC script for some reason (I have absolutely no idea why I started on the later - I think I was just curious as to the challenges of getting something close to real time performance out of it).
 
Last edited:
I used to be heavily involved in IRC in the late 90’s early 2000’s. I used mIRC and Pirch98. Would create my own scripts and was part of the movement which regularly hacked the MSN offering when it used Exchnage 5.5 and ultimately moved to MSN Messenger.

Got up to a whole host of no good, met several woman, etc. Ah, youth.

I miss those days. In so many ways I despise what the Internet is now.
 
Used to be in a long running irc channel with some old work friends. Guy who ran the server disappeared, so I ran one on a Raspberry Pi.
Kept getting loads of bots trying to hack in, so we switched to Discord. Much easier for posting photo's n things.
 
Used to be in a long running irc channel with some old work friends. Guy who ran the server disappeared, so I ran one on a Raspberry Pi.
Kept getting loads of bots trying to hack in, so we switched to Discord. Much easier for posting photo's n things.

One of the reasons I stopped running IRCds - had a few at one time but just didn't have the time with everything else to keep on top of the evolving security landscape.
 
Last edited:
Oh, and AOL chat rooms. :D
Came in here to mention just that, and AOL IM. Moved more onto ICQ and IRC when i started playing Unreal online in '98. Didn't have monthly subscriptions for the internet then, i can still remember the shouting from my old fella when he opened the phone bill and it was £600+ for the quarter!! :D
 
I don't regularly use it but still check it out from time to time, for nostalgia/happy place vibes. Amazingly there's still quite an active XDCC warez scene on IRC.
I don't understand Discord :(
 
Came in here to mention just that, and AOL IM. Moved more onto ICQ and IRC when i started playing Unreal online in '98. Didn't have monthly subscriptions for the internet then, i can still remember the shouting from my old fella when he opened the phone bill and it was £600+ for the quarter!! :D
Ah memories! I had similar issues back in the late 90s with stupidly high phone bills and the same upset Dad when he opened it! Then thankfully along came the likes of Screaming.net and Redhotant with 0800 access and then later BT FRIACO. The kids these days dont know how good they have it!
 
Ah memories! I had similar issues back in the late 90s with stupidly high phone bills and the same upset Dad when he opened it! Then thankfully along came the likes of Screaming.net and Redhotant with 0800 access and then later BT FRIACO. The kids these days dont know how good they have it!
I remember when we first got ADSL and it was amazing. Not having to block the phone to browse the web was a such a massive change.
 
Had to ask my niece what “TT” was a few weeks back…
I got a load of laughing emojis back as a reply… with.. “you’re so old..x”
 
Back
Top Bottom