; DURATION v1.0 - by entropy & Talon 2023
; Returns duration between 2 dates.
; Commands: !duration(none) !dur(none)
; Help: !dur - If parameter 2 is not specified, returns duration between parameter 1 to today's date. Otherwise, Returns duration from first date to second. (none)
; Help: !duration - If parameter 2 is not specified, returns duration between parameter 1 to today's date. Otherwise, Returns duration from first date to second. (none)
;==================================================
on *:unload:{ cleanupscript duration.mod }
;==================================================
on *:signal:duration:{
set -u30 %socknamedur $1
var %host = $mid($2,2)
var %nick = $gettok(%host,1,33)
var %text = $mid($5-,2)
var %chan = $remove($4,:)
var %mymodes = $getmodes(%socknamedur,%chan,$botnick(%socknamedur))
var %modes = $getmodes(%socknamedur,%chan,%nick)
var %access = $getaccess(%socknamedur,%chan,%host)
var %prefix = $iif($hget(%socknamedur,$+(%chan,.prefix)),$v1,!)
tokenize 32 $2-
if ($1) {
if ($2 == PRIVMSG && $left(%chan,1) == $chr(35)) {
var %prefix = $iif($hget(%socknamedur,$+(%chan,.prefix)),$v1,!)
; #channel command flood protection
;===============================================
if ($left(%text,1) == %prefix) {
inc -u2 $+(%,flood.,%socknamedur,.duration.msg) 1
if ($eval($+(%,flood.,%socknamedur,.duration.msg),2) >= 2) { return }
}
;===============================================
;No Modules...
;===================================================================
if ($istok($hget(%socknamedur,$+(%chan,.nomod)),duration,32)) { return }
;===================================================================
;No Commands
;================================================
if ($nocommands(%socknamedur,$mid($1,2))) { return }
;================================================
if (?duration iswm $gettok(%text,1,32) && $left(%text,1) == %prefix) || (?dur iswm $gettok(%text,1,32) && $left(%text,1) == %prefix) {
if (!$5) { sockwrite -n %socknamedur PRIVMSG %chan :No date specified! }
else { getdur %socknamedur %chan $5-6 }
}
}
}
}
;==================================================
alias -l getdur {
set %_dursock $1
set %_durchan $2
set %_durdate $3
if ($4) { set %_durdate2 $4 }
else { set %_durdate2 $adate }
var %monthone = $gettok(%_durdate,1,$asc(/))
if ($len(%monthone) == 1) { %monthone = $+(0,%monthone) }
var %dayone = $gettok(%_durdate,2,$asc(/))
if ($len(%dayone) == 1) { %dayone = $+(0,%dayone) }
var %yearone = $gettok(%_durdate,3,$asc(/))
var %oneall = $+(%monthone,/,%dayone,/,%yearone)
var %monthtwo = $gettok(%_durdate2,1,$asc(/))
if ($len(%monthtwo) == 1) { %monthtwo = $+(0,%monthtwo) }
var %daytwo = $gettok(%_durdate2,2,$asc(/))
if ($len(%daytwo) == 1) { %daytwo = $+(0,%daytwo) }
var %yeartwo = $gettok(%_durdate2,3,$asc(/))
var %twoall = $+(%monthtwo,/,%daytwo,/,%yeartwo)
if ($remove(%oneall,/) !isnum) { sockwrite -n %_dursock PRIVMSG %_durchan :No valid first date specified! Syntax: MM/DD/YYYY. example: "05/01/2023". | unset %_dur* }
elseif ($remove(%twoall,/) !isnum) { sockwrite -n %_dursock PRIVMSG %_durchan :No valid second date specified! Syntax: MM/DD/YYYY. example: "05/01/2023". | unset %_dur* }
elseif (%monthone !isnum 01-12) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Month one must be between 1-12! | unset %_dur* }
elseif (%monthtwo !isnum 01-12) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Month two must be between 1-12! | unset %_dur* }
elseif (%dayone !isnum 01-31) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Day one must be between 1-31! | unset %_dur* }
elseif (%daytwo !isnum 01-31) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Day two must be between 1-31! | unset %_dur* }
elseif ($len(%yearone) != 4) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Year one must be 4 digits! | unset %_dur* }
elseif ($len(%yeartwo) != 4) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Year two must be 4 digits! | unset %_dur* }
elseif (%yearone < 1000) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Year one must be greater than 1000! | unset %_dur* }
elseif (%yeartwo < 1000) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Year two must be greater than 1000! | unset %_dur* }
elseif (%yearone > %yeartwo) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Date two is before date one! | unset %_dur* }
elseif (%yearone == %yeartwo && %monthone > %monthtwo) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Date one is after date two! | unset %_dur* }
elseif (%monthone == %monthtwo && %dayone > %daytwo && %yearone == %yeartwo) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Date one is after date two! | unset %_dur* }
else { durapi $+(https://www.timeanddate.com/date/durationresult.html?m1=,%monthone,&d1=,%dayone,&y1=,%yearone,&m2=,%monthtwo,&d2=,%daytwo,&y2=,%yeartwo,&h1=&i1=&s1=&h2=&i2=&s2=) }
}
alias -l durAPI { noop $urlget($1-,gbi,&duration,processdurAPI) }
alias -l processdurAPI {
var %id = $1 , %BV = $urlget(%id).target, %code = $gettok($urlget(%id).reply,2,32)
if (%code != 200) { sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c Error code: %code | unset %_dur* | return }
var %dur = $bvsearch(%BV,class=big>,).inbetween
if (!%dur) { var %dur = $gettok($bvsearch(%BV,
,
).inbetween,1,44) }
sockwrite -n %_dursock PRIVMSG %_durchan :[Duration] $c %dur
unset %_dur*
}