3 set myserv
"fallen.sky"
8 proc chanref
:join {hand
} {
10 expr {[incr members
($hand)] == 1}
13 proc chanref
:part
{hand
} {
15 expr {[incr members
($hand) -1] == 0}
18 proc chanref
:rename {oldhand newhand
} {
20 if {[info exists members
($oldhand)]} {
21 set count
$members($oldhand)
22 set members
($newhand) $count
23 set members
($oldhand) 0
26 putlog
"!! chanref:rename($oldhand) unknown user"
31 proc chanref
:quit
{hand
} {
33 if {[info exists members
($hand)]} {
34 set count
$members($hand)
38 putlog
"!! chanref:quit($hand) unknown user"
46 set l
[lreplace $l [set l
0] 0]
52 0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
8 I
9 J
53 10 K
11 L
12 M
13 N
14 O
15 P
16 Q
17 R
18 S
19 T
54 20 U
21 V
22 W
23 X
24 Y
25 Z
26 0 27 1 28 2 29 3
55 30 4 31 5 32 6 33 7 34 8 35 9
63 set num
[incr ts6-uidcounter
]
66 while {$num > $val} { set val
[expr {pow
(36,[incr rad
])}] }
69 set pow
[expr {int
(pow
(36,$rad))}]
70 set red
[expr {int
($num/$pow)}]
71 incr num
[expr {-($pow*$red)}]
72 append result
$baseary($red)
80 set pad
[string repeat A
[expr {6 - [string length
$result]}]]
81 set uid
$mysid$pad$result
86 return [expr {[matchattr
$hand +o
] ?
"@" : ""}]
89 proc nicktolower
{nick
} {
90 string map
{{[} \{ \\ |
\] \}} [string tolower
$nick]
93 ## ts6 database functions
95 proc ts6
:myuid
{uid
} {
98 return [string match
"$mysid*" $uid]
101 proc ts6
:hand2nick
{hand
} {
105 proc ts6
:nick2hand
{nick
} {
106 if {[string match
"0|*" $nick]} {
107 return [string range
$nick 2 end
]
112 proc ts6
:nick2uid
{nick
} {
114 set nick
[nicktolower
$nick]
115 if {[info exists nick2uid
($nick)]} {
116 return $nick2uid($nick)
121 proc ts6
:ownnick2uid
{nick
} {
123 set nick
[nicktolower
$nick]
124 if {[info exists nick2uid
($nick)]} {
125 return $nick2uid($nick)
127 set uid
[ts6
:nextuid
]
128 set nick2uid
($nick) $uid
132 proc ts6
:uid2nick
{uid
} {
133 uid
:get
$uid NICK
$uid
136 proc ts6
:serv2sid
{serv
} {
138 if {[info exists serv2sid
($serv)]} {
139 return $serv2sid($serv)
144 proc ts6
:sid2serv
{sid
} {
145 sid
:get
$sid SERVER
$sid
148 proc ts6
:id2name
{id
} {
149 switch [string length
$id] {
150 3 { ts6
:sid2serv
$id }
151 9 { ts6
:uid2nick
$id }
156 proc ts6
:changed-nick
{oldnick newnick
{uid
"*"}} {
158 set uid
[ts6
:nick2uid
$oldnick]
160 uid
:set $uid NICK
$newnick
166 string range
$uid 0 2
169 proc uid
:revset
{nick uid
} {
172 set nick
[nicktolower
$nick]
175 if {[info exists nick2uid
($nick)]} {
176 unset nick2uid
($nick)
179 set nick2uid
($nick) $uid
183 proc uid
:set {uid key val
} {
187 if {$key == "NICK"} {
188 set old
[uid
:get
$uid $key]
190 set sid
[uid2sid
$uid]
191 dict
set sid2uids
($sid) $uid 1
198 dict
set uidinfo
($uid) $key $val
201 proc uid
:get
{uid key
{def
""}} {
204 if {[info exists uidinfo
($uid)] &&
205 [dict exists
$uidinfo($uid) $key]} {
206 dict get
$uidinfo($uid) $key
212 proc uid
:forget
{uid
} {
216 putlog
"Forgetting user [uid:get $uid NICK]{$uid}"
218 set sid
[uid2sid
$uid]
220 if {[info exists sid2uids
($sid)]} {
221 set sid2uids
($sid) [dict remove
$sid2uids($sid) $uid]
224 if {[info exists uidinfo
($uid)]} {
225 set nick
[uid
:get
$uid NICK
]
226 if {$nick != ""} { uid
:revset
$nick * }
233 proc sid
:revset
{serv sid
} {
236 set serv
[string tolower
$serv]
239 if {[info exists serv2sid
($serv)]} {
240 unset serv2sid
($serv)
243 set serv2sid
($serv) $sid
247 proc sid
:set {sid key val
} {
253 set old
[sid
:get
$sid $key]
258 dict
set sid2sids
($val) $sid 1
262 dict
set sidinfo
($sid) $key $val
265 proc sid
:get
{sid key
{def
""}} {
268 if {[info exists sidinfo
($sid)] &&
269 [dict exists
$sidinfo($sid) $key]} {
270 dict get
$sidinfo($sid) $key
276 proc sid
:forget
{sid
} {
281 putlog
"Forgetting server [sid:get $sid SERVER ?]{$sid}"
283 if {[info exists sid2sids
($sid)]} {
284 foreach downlink
[dict keys
$sid2sids($sid)] {
289 if {[info exists sid2uids
($sid)]} {
290 foreach uid
[dict keys
$sid2uids($sid)] {
295 if {[info exists sidinfo
($sid)]} {
296 set serv
[sid
:get
$sid SERVER
]
297 if {$serv != ""} { sid
:revset
$sid * }
306 putlog
"output: $msg"
307 putdcc
${ts6-idx
} $msg
310 proc ts6
:sput
{msg
} {
312 ts6
:put
":$mysid $msg"
315 proc ts6
:cput
{msg
} {
317 ts6
:put
":[ts6:ownnick2uid ${ts6-mynick}] $msg"
320 proc ts6
:introduce
{hand
} {
322 global ts6-introduced
326 set nick
[ts6
:hand2nick
$hand]
327 set uid
[ts6
:ownnick2uid
$nick]
328 if {![info exists ts6-introduced
($uid)]} {
329 uid
:set $uid NICK
$nick
330 ts6
:sput
"UID $nick 1 $uptime +i $hand ${botnet-nick} ${botnet-nick} $uid :$hand"
331 set ts6-introduced
($uid) $uid
336 proc ts6
:connect
{host port
} {
348 global ts6-introduced
350 global ts6-uidcounter
354 set idx
[connect
$host $port]
356 array unset nick2uid
*
357 array unset uidinfo
*
358 array unset serv2sid
*
359 array unset sidinfo
*
360 array unset sid2uids
*
361 array unset sid2sids
*
362 array unset ts6-introduced
*
365 set ts6-mynick
"\[${botnet-nick}\]"
366 array unset members
*
368 set myuid
[ts6
:ownnick2uid
${ts6-mynick
}]
370 putdcc
$idx "PASS jilles TS 6 :$mysid"
371 putdcc
$idx "CAPAB :ENCAP EUID QS SERVICES TB"
372 sid
:set $mysid SERVER
$myserv
373 sid
:set $mysid DESC
"Eggdrop pseudoserver"
374 putdcc
$idx "SERVER $myserv 0 :Eggdrop pseudoserver"
375 uid
:set $myuid NICK
${ts6-mynick
}
376 ts6
:sput
"UID ${ts6-mynick} 1 $uptime +Sio ${botnet-nick} huh huh $myuid :${botnet-nick} (bot)"
380 foreach sub
[whom
0] {
381 set hand
[lindex $sub 0]
382 set flag
[lindex $sub 3]
383 if {![info exists skip
($hand)]} {
385 set uid
[ts6
:introduce
$hand]
386 set prefix
[expr {$flag == "" ?
"" : "+"}]
387 lappend sjoin
$prefix$uid
391 ts6
:sput
"SJOIN $uptime #partyline +nt :$sjoin"
392 ts6
:sput
"TB #partyline $uptime ${ts6-mynick} :Direct link to ${ts6-mynick}'s partyline channel"
394 ts6
:sput
"SJOIN [unixtime] #nullroute + :$sjoin"
396 control
$idx ts6
:handshake
399 proc ts6
:handshake
{idx input
} {
407 set input
[rparse
$input]
408 putlog
"input{$idx} $input"
410 set cmd
[lindex $input 0]
411 if {[string index
$cmd 0] == ":"} {
412 set prefix
[string range
[lshift input
] 1 end
]
413 set cmd
[lindex $input 0]
415 switch [lindex $input 0] {
417 uid
:set $prefix AWAY
[lindex $input 1]
420 lappend ts6-capab
{*}[lindex $input 1]
423 set mask
[lindex $input 1]
424 set input
[lrange $input 2 end
]
426 if {$mask == "*" ||
$mask == $myserv} {
427 switch [lindex $input 0] {
428 CERTFP
{ uid
:set $prefix FPRINT
[lindex $input 1] }
429 LOGIN
{ uid
:set $prefix LOGIN
[lindex $input 1] }
431 set uid
[lindex $input 1]
432 set login
[lindex $input 2]
433 if {$login == ""} {set login
"*"}
434 uid
:set $uid LOGIN
$login
440 set nick
[lindex $input 1]
441 set uid
[lindex $input 8]
443 uid
:set $uid NICK
$nick
444 uid
:set $uid USERNAME
[lindex $input 5]
445 uid
:set $uid HOSTNAME
[lindex $input 6]
446 uid
:set $uid LOGIN
[lindex $input 10]
447 uid
:set $uid REALNAME
[lindex $input 11]
450 set nick
[ts6
:uid2nick
$prefix]
453 set victimuid
[lindex $input 1]
454 set victimnick
[ts6
:uid2nick
$victimuid]
455 set victimhand
[ts6
:nick2hand
$victimnick]
456 #chanref:quit $victimhand
457 partyline
:offline
$victimhand *
458 partyline
:online
$victimhand *
460 ts6
:put
":$victimuid JOIN [unixtime] #partyline +"
461 ts6
:cput
"TMODE $uptime #partyline +v $victimuid"
464 set targetsid
[lindex $input 1]
467 set oldnick
[ts6
:uid2nick
$prefix]
468 set newnick
[lindex $input 1]
469 ts6
:changed-nick
$oldnick $newnick $prefix
470 dccputchan
0 "$oldnick is now known as $newnick"
473 set peersid
[lindex $input 4]
476 putdcc
$idx "PONG :[lindex $input 1]"
479 set nick
[ts6
:uid2nick
$prefix]
480 set chan
[lindex $input 1]
481 set msg
[lindex $input 2]
482 if {$chan == "#partyline"} {
483 dccputchan
0 "<$nick$chan> $msg"
490 set name
[lindex $input 1]
491 set hops
[lindex $input 2]
492 set desc
[lindex $input 3]
495 putlog
"Server: $name{$peersid} via self{$mysid}"
496 sid
:set $peersid SERVER
$name
497 sid
:set $peersid HOPS
$hops
498 sid
:set $peersid UPLINK
$mysid
499 sid
:set $peersid DESC
$desc
501 putlog
"Server: $name{-} via $prefix{-}"
505 set name
[lindex $input 1]
506 set hops
[lindex $input 2]
507 set sid
[lindex $input 3]
508 set desc
[lindex $input 4]
510 putlog
"Server: $name{$sid} via [ts6:sid2serv $prefix]{$prefix}"
511 sid
:set $sid SERVER
$name
512 sid
:set $sid HOPS
$hops
513 sid
:set $sid UPLINK
$prefix
514 sid
:set $sid DESC
$desc
517 set sid
[lindex $input 1]
521 putdcc
$idx "SVINFO 6 6 0 :[unixtime]"
524 set traceeuid
[lindex $input 1]
525 set myversion
"eggdrop-[lindex $version 0]"
526 ts6
:sput
"200 $prefix Link $myversion $traceeuid $myserv"
527 if {[ts6
:myuid
$traceeuid]} {
528 if {[string length
$traceeuid] == 3} {
529 set tracee
[ts6
:sid2serv
$traceeuid]
531 set tracee
[ts6
:uid2nick
$traceeuid]
532 ts6
:sput
"204 $prefix User users $tracee\[?@?\] (?) ? ?"
534 ts6
:sput
"262 $prefix $traceeuid :End of TRACE"
538 set nick
[lindex $input 1]
539 set uid
[lindex $input 8]
541 uid
:set $uid NICK
$nick
542 uid
:set $uid USERNAME
[lindex $input 5]
543 uid
:set $uid HOSTNAME
[lindex $input 6]
544 uid
:set $uid REALNAME
[lindex $input 9]
547 set from
[ts6
:id2name
$prefix]
548 set msg
[lindex $input 1]
549 putlog
"Wallops ($from): $msg"
555 set arg
[lindex $input 2]
556 set uid
[ts6
:nick2uid
$arg]
558 set nick
[ts6
:uid2nick
$uid]
559 set hand
[ts6
:nick2hand
$nick]
561 ts6
:sput
"311 $prefix $nick $hand ${botnet-nick} * :$hand"
562 ts6
:sput
"312 $prefix $nick $myserv :${botnet-nick}"
563 ts6
:sput
"330 $prefix $nick $hand :logged in as"
565 ts6
:sput
"311 $prefix $nick [uid:get $uid USERNAME ?] [uid:get $uid HOSTNAME ?] * :[uid:get $uid REALNAME ?]"
566 set login
[uid
:get
$uid LOGIN
*]
568 ts6
:sput
"330 $prefix $nick $login :logged in to services as"
570 set hand
[nick2hand
$nick]
572 ts6
:sput
"330 $prefix $nick $hand@${botnet-nick} :recognized by bot as"
575 #ts6:sput "317 $prefix $nick 123 [unixtime] :idle, login"
576 #ts6:sput "671 $prefix $nick :uses SSL"
577 ts6
:sput
"320 $prefix $nick :has TS6 uid $uid"
579 ts6
:sput
"401 $prefix $arg :No such nick"
581 ts6
:sput
"318 $prefix $arg :End of /WHOIS"
586 proc go
{} { ts6
:connect
127.0.0.1 194 }
591 source scripts
/g_ts6
/g_ts6.tcl
595 bind chon
- * partyline
:online
596 bind chof
- * partyline
:offline
597 bind chjn
- * partyline
:join
598 bind chpt
- * partyline
:part
599 bind chat
- * partyline
:msg
600 bind act
- * partyline
:act
601 bind nkch
- * partyline
:nick
603 proc partyline
:online
{hand idx
} {
604 set uid
[ts6
:introduce
$hand]
605 ts6
:put
":$uid JOIN [unixtime] #nullroute +"
608 proc partyline
:offline
{hand idx
} {
609 global ts6-introduced
610 set uid
[ts6
:introduce
$hand]
611 ts6
:put
":$uid QUIT :Left the partyline"
612 unset ts6-introduced
($uid)
615 proc partyline
:join {bot hand chan flag idx uh
} {
618 if {[chanref
:join $hand]} {
619 set uid
[ts6
:introduce
$hand]
620 ts6
:put
":$uid JOIN [unixtime] #partyline +"
621 ts6
:cput
"TMODE $uptime #partyline +v $uid"
626 proc partyline
:part
{bot hand idx chan
} {
629 if {[chanref
:part
$hand]} {
630 set uid
[ts6
:introduce
$hand]
631 ts6
:put
":$uid PART #partyline"
636 proc partyline
:msg
{hand chan msg
} {
638 set uid
[ts6
:introduce
$hand]
639 ts6
:put
":$uid PRIVMSG #partyline :$msg"
643 proc partyline
:act
{hand chan msg
} {
645 set uid
[ts6
:introduce
$hand]
646 ts6
:put
":$uid PRIVMSG #partyline :\001ACTION $msg\001"
650 proc partyline
:nick
{oldhand newhand
} {
651 chanref
:rename $oldhand $newhand
653 set oldnick
[ts6
:hand2nick
$oldhand]
654 set newnick
[ts6
:hand2nick
$newhand]
655 set uid
[ts6
:nick2uid
$oldnick]
657 ts6
:changed-nick
$oldnick $newnick
659 ts6
:put
":$uid NICK $newnick [unixtime]"