Memo Relay v1.2

Memo Relay v1.2

mIRC snippet - Simple memo relay script.

Postat de Copyright Categorie Review user Vizualizari Data
BLKoldSUN entropy activity Cod testat 516 2023-12-03 20:27:46

; Memo Relay v1.2 - by entropy & maroon 2023
; Type: !memo <nick> <message>

;=========================================================== MENU

menu menubar,status,channel,query {
  -
  Memo Relay v1.2 $chr(9) $replace($group(#memo).status,o,O)
  .Turn it $iif($group(#memo).status == on,Off,On) {
    $iif($group(#memo).status == on,.disable,.enable) #memo
    echo 6 -ag * Memo Relay is now: $qt($replace($group(#memo).status,o,O))
  }
  .-
  .Channel(s) $chr(9) $eval($+(%,memochans,.,$network),2) {
    var %net = $eval($+(%,memochans,.,$network),2)
    var %text = $input(Channels list (seperated by comma) or "#" for all?,5,Memo,%net)
    %text = $replace(%text,$chr(32),$chr(44))
    var %a = 1, %b
    while ($gettok(%text,%a,44)) {
      %b = $v1
      if ($left(%b,1) != $chr(35)) { %text = $reptok(%text,%b,$+($chr(35),%b),1,44) }
      inc %a
    }
    if (%text) { set $+(%,memochans,.,$network) $v1 | echo 6 -ag * Memo Relay Channels are now: $qt($v1) }
    else { unset $+(%,memochans,.,$network) | echo 6 -ag * Memo Relay Channels are now reset }
  }
  .$iif(!$istok($eval($+(%,memochans,.,$network),2),$chan,44) && $eval($+(%,memochans,.,$network),2) != $chr(35) && $menu == channel,Add Channel To list) {
    var %net = $eval($+(%,memochans,.,$network),2)
    %net = $addtok(%net,$chan,44)
    set $+(%,memochans,.,$network) %net
    echo 6 -ag * Memo Relay Channels are now: $qt(%net)
  }
  .$iif($istok($eval($+(%,memochans,.,$network),2),$chan,44) && $menu == channel,Delete Channel From list) {
    var %net = $eval($+(%,memochans,.,$network),2)
    %net = $remtok(%net,$chan,1,44)
    set $+(%,memochans,.,$network) %net
    echo 6 -ag * Memo Relay Channels are now $+ $iif(!%net,$chr(32) reset,: $qt(%net))
  }
  .-
  .$iif($eval($+(%,memochans,.,$network),2),Delete all Channels) {
    unset $+(%,memochans,.,$network)
    echo 6 -ag * Memo Relay Channels are now reset
  }
  -
}

;=========================================================== EVENTS

#memo off
on *:input:$($eval($+(%,memochans,.,$network),2)):{ 
  if (/* !iswm $1 && $server) { 
    if (!memo == $1 && $3 != $null) { 
      if ($2 == $me) { .notice $me [Memo] $c You cannot memo yourself! }
      else { addmemo $network $address($me,5) # $2 $3- | .notice $me [Memo] $c Memo Sent! (memos older than 30d are auto deleted) }
    }
    relaymemo $network # $me
  }
}
on *:text:*:$($eval($+(%,memochans,.,$network),2)):{
  if (!memo == $1 && $3 != $null) {
    if ($2 == $nick) { .notice $2 [Memo] $c You cannot memo yourself! }
    else { addmemo $network $address($nick,5) # $2 $3- | .notice $nick [Memo] $c Memo Sent! (memos older than 30d are auto deleted) }
  }
  relaymemo $network # $nick
}
on *:action:*:$($eval($+(%,memochans,.,$network),2)):{ relaymemo $network # $nick }
on !*:join:$($eval($+(%,memochans,.,$network),2)):{ relaymemo $network # $nick }
on me:*:join:$($eval($+(%,memochans,.,$network),2)):{ if ($chan(#).ial == $false) { .ialfill # } | loadit $network # }
on *:nick:{ var %a = 1, %b | while ($comchan($newnick,%a)) { %b = $v1 | if ($istok($eval($+(%,memochans,.,$network),2),%b,44) || $eval($+(%,memochans,.,$network),2) == $chr(35)) { relaymemo $network %b $newnick } | inc %a } }
#memo end

on *:unload:{ echo 6 -ag * Memo Relay is now: "unloaded" | unloadit }
on *:load:{ echo 6 -ag * Memo Relay is: "loaded" | if (!$isdir(Memos)) { mkdir Memos } }

;=========================================================== ALIASES

alias -l unloadit {
  var %a = 1, %b, %c
  while ($findfile(Memos,*.*,%a)) {
    %b = $v1
    %c = $nopath($remove(%b,.dat))
    if ($hget(%c)) { hfree %c }
    .remove $qt(%b)
    inc %a
  }
  unset $+(%,memochans,*)
  rmdir Memos
}
alias -l loadit {
  ;$1=Network,$2=Channel
  if (!$hget($+($1,.,$2,.memo))) { 
    hmake $+($1,.,$2,.memo) 100
    if ($file($+(Memos,$mkfn($+($1,.,$2,.memo.dat)))).size) { hload $+($1,.,$2,.memo) $qt($+(Memos,$mkfn($+($1,.,$2,.memo.dat)))) }
  }
  checkstale $1 $2
}
alias -l saveit {
  ;$1=Network,$2=Channel
  var %file = $qt($+(Memos,$mkfn($+($1,.,$2,.memo.dat))))
  if ($hget($+($1,.,$2,.memo),1).item) { hsave $+($1,.,$2,.memo) %file }
  elseif ($isfile(%file)) { .remove %file }
}
alias -l checkstale {
  ;$1=Network,$2=Channel
  if ($nick($2,$me)) { var %table = $+($1,.,$2,.memo) | noop $hfind(%table,*,0,w,if ($calc($ctime - $1) > 2592000) hdel %table $1) }
}
alias -l addmemo {
  ;$1=Network,$2=Nick,$3=Channel,$4=Nick,$5=Message
  hadd -m $+($1,.,$3,.memo) $+($ctime,.,$4) $2 $5-
  saveit $1 $3
}
alias -l relaymemo {
  ;$1=Network,$2=Channel,$3=nick
  if ($hfind($+($1,.,$2,.memo),$+(*.,$3),0,w) >= 1) {
    var %a = 1, %b, %c, %t = 1, %r, %output, %all, %ctime, %nick, %host, %done
    while ($hfind($+($1,.,$2,.memo),$+(*.,$3),%a,w)) {
      %b = $v1
      %all = %all %b
      inc %a
    }
    %a = 1
    %all = $sorttok(%all,32,n)
    while ($gettok(%all,%a,32)) {
      %b = $v1
      %r = $hget($+($1,.,$2,.memo),%b)
      %nick = $gettok($gettok(%r,1,32),1,33)
      %host = $gettok($gettok(%r,1,32),2-,33)
      %output = $gettok(%r,2-,32)
      %ctime = $gettok(%b,1,46)
      %done = $1-3 %nick %host %ctime %output
      .timer 1 %t checknick $unsafe(%done)
      inc %t 2
      inc %a
    }
  }
}
alias -l checknick {
  ;$1=Network,$2=Channel,$3=Output Nick,$4=From Nick,$5=Host,$6=CTIME,$7=Output Text
  if ($comchan($3,1)) {
    .notice $3 $+([Memo/,$4,]) $c $+([,$5,]) $c $iif($len($7-) >= 380,$+($mid($7-,1,380),...),$7-) $dur($6)
    hdel $+($1,.,$2,.memo) $+($6,.,$3)
    saveit $1 $2
  }
}
alias -l dur {
  return $+($chr(40),$remove($replace($duration($calc($ctime - $1)),wks,w,wk,w,days,d,day,d,hrs,h,hr,h,mins,m,min,m,secs,s,sec,s),$chr(32)),$chr(32),ago,$chr(41))
}
alias -l unsafe { returnex $+($,decode,$chr(40),$encode($1,m),$chr(44),m,$chr(41)) }
alias -l c { return $chr(9679) }