Who here knows what a turing test is?
Its any test which can tell the difference between a human and a computer.
You've seen these a lot; any web page that makes you read a number from an image when doing a form input. It works because you can read it but a program can't translate from image to text easily.
So how can we apply this to IRC?
The idea is simple.
You get a bot, you get your channel, and you get scripting.
Firstly; rename you channel, ie if you owned #pants change the name to #dsghjkdfgo;dbjdjfghdf;gdf
Make the channel +s Secret and +i Invite only
Secondly; start up your old #pants channel. Put in a bot. This bot is a modified trivia bot. When someone joins they are asked a simple question.
Q: If con is the opposite of pro, what is the opposite of progress?
A: Congress
When they get the right answer they get an /invite to the secret channel thus preventing unwanted users from getting in.
a) This discriminates against people who are dull-witted
b) This discriminates against bots
Other possible turing tests could include something like the following and asking to translate to the correct english:
Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer be at the rghit pclae. The rset can be a total mses and you can sitll raed it wouthit porbelm. is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe. Amzanig huh?
Simple maths problems could also be used.
Or trivia everyone knows ("The best thing since sliced... ")
Ideas; thoughts; comments?
I got a little way through scripting a lazy bot to do it.
;Aliases
alias -l _waitingRoom {
;/_waitingRoom $nick #channel
.msg $1 Welcome. I have a riddle for thee. Of attempts only you have three.
set $+(%,_q.,$1) $read(riddles.txt,$rand(1,$lines(riddles.txt)))
.msg $1 $gettok($eval(% $+ _q. $+ $1,2),1,94)
}
alias -l _answer {
;/_answer $nick #channel <answer>
if ($3- == $gettok($eval(% $+ _q. $+ $1,2),2-,94)) {
.msg $1 CORRECT ANSWER $gettok($eval(% $+ _q. $+ $1,2),2-,94)
.invite $1 $eval($+(%,$2,.chan),2)
.unset % $+ _q. $+ $1 $+ *
}
else {
.msg $1 INCORRECT ANSWER
inc % $+ _q. $+ $1 $+ .i
if ($eval(% $+ _q. $+ $1 $+ .i,2) >= 3) {
ban $2 $1
kick $2 $1 Bye bye bot bot [either that or your not the sharpest tack in the box]
}
}
}
alias -l _help {
var %f $input(Welcome. This is a simple proof of concept script; designed to target spam bots. It will stop 90% of all bot; such as trojans and the like. Unfortunately it will not stop bots who work by having a human agent sitting in the channel relaying information. This however becomes a much more labor intensive task.)
}
;Events
on *:join:%waiting.room:{
_waitingRoom $nick #
}
on *:text:*:?:{
_answer $nick # $1-
}
on *:load:{
if (!$isfile(riddles.txt)) { write riddles.txt Cat is to Mouse as Predator is to^Prey }
}
If this was to be done; we couldn't have the bots distributed with a pre-compiled list of tests. Otherwise; spam bots could easily use this lists to bypass this method.
Also; this wouldn't stop a human agent joining the channel and working on behalf of the spam bot; collecting nicknames