-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathantibot.tcl
97 lines (77 loc) · 3.05 KB
/
antibot.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
setudef flag question
set bantime 1440
set tag "Banned:"
set kickreason "Possible bot"
set channel "#gembels"
bind time - "42 23 * * *" coba:hidupkan
bind time - "06 20 * * *" coba:matikan
proc coba:hidupkan {} {
channel set #gembels +question
putserv "PRIVMSG #gembels : Anti Bot Enable"
}
proc coba:matikan {} {
channel set #gembels -question
putserv "PRIVMSG #gembels : Anti Bot Disabled"
}
bind join - * onjoin
bind msgm - ".answer *" answer
proc onjoin {nickname hostname handle channel} {
global botnick timers answer
## if {$nickname == $botnick} { return }
if {![isbotnick $nickname] && ![info exists timers($hostname)]} {
set num1 [rand 9]
set num2 [rand 9]
set q [expr $num1 + $num2]
set answer($hostname) $q
set timers($hostname) [timer 2 [list noanswer $hostname]]
putserv "PRIVMSG dono : $timers($hostname) - $timers"
putserv "PRIVMSG $nickname :I have a question, please answer with: .answer <number>"
putserv "PRIVMSG $nickname :$num1 + $num2 = ?"
}
}
proc noanswer {hostname} {
global botnick timers answer tag kickreason
if {[info exists timers($hostname)]} {
set channel $channel
set bantime $bantime
foreach user [chanlist $channel] {
if {[string match "$hostname" "[string trim [getchanhost $user $channel] "~"]"]} {
set victim [string tolower $user]
}
}
if {[info exists victim]} {
if {[botisop $channel]} {
## putserv "mode $channel +b *!*[string trim $hostname "~"]"
putserv "kick $channel $victim :$tag $kickreason"
putserv "PRIVMSG $victim :You didn't answer my question !"
}
newchanban $channel *!*[string trim $hostname "~"] question "$kickreason" $bantime
}
unset timers($hostname)
unset answer($hostname)
}
}
proc answer {nickname hostname handle arguments} {
global botnick timers answer bantime kickreason
if {[info exists timers($hostname)]} {
set channel $channel
set bantime $bantime
set correctanswer [lindex $arguments 1]
if {[string match $correctanswer $answer($hostname)] != 1} {
if {[botisop $channel]} {
putserv "mode $channel +b *!*[string trim $hostname "~"]"
putserv "kick $channel $nickname :$tag $kickreason"
}
killtimer $timers($hostname)
newchanban $channel *!*[string trim $hostname "~"] question "$kickreason" $bantime
putserv "PRIVMSG $nickname :Jawaban salah!"
} else {
killtimer $timers($hostname)
putserv "PRIVMSG $nickname :Jawaban benar!"
putquick "MODE $channel +v $nickname"
}
unset timers($hostname)
unset answer($hostname)
}
}
putlog "Antibot Loaded"