; 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($eval($+(%,memochans,.,$network),2)) }
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:$($+(%,memochans,.,$network)):{ if (/* !iswm $1 && $server) { if (!memo == $1 && $3 != $null) { if ($2 == $me) { .notice $2 [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:*:$($+(%,memochans,.,$network)):{ 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:*:$($+(%,memochans,.,$network)):{ relaymemo $network # $nick }
on !*:join:$($+(%,memochans,.,$network)):{ relaymemo $network # $nick }
on me:*:join:$($+(%,memochans,.,$network)):{ 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 $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) }
1 0 Login to vote.
Login to comment.