Encrypting and Decrypting TCL Example

Top  Previous  Next

# EncryptDecrypt v1.0

#

# This is just a little script that demonstates 1 way of

# working with Mircryption via an Eggdrop bot. It both

# recieves encrypted commands, and transmits encrypted

# responses. It's crude, but it works.

 

# It also addresses the space compaction that Mirc does

# on a line when there is more than one space between characters.

# Thanks Dark Raiche for the tip on this.

 

# Credits:

# Dark Raichu, http://mircryption.sourceforge.net - For Mircryption & the chr(160) idea

# Gizzmo - For helping me figure all this out

 

 

# Set the Mircryption key for you channel here

# Note: This is not very safe, so be cautious as to who has access to your bot

set chankey "!negative"

 

# This is what catches the encrypted cmds

bind pub -* mcps pub:getcmd

 

# Example of recieving either an encrypted or decrypted command

bind pub - "!either" pub:either

 

# This displays a list of available bot commands

proc pub:help { nick host hand chan text } {

global chankey

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00320List of Bot Commands"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "-----------------------------"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!special <arg> - Recieve/Repeat encrypted command with arg"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!enccmd - Recieve/Repeat encrypted command"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!either - Recieve encrypted/decrypted command"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!rspaces - Recieve/Repeat encrypted line with multiple spaces"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!tspaces - Recieve encrypted line insert multiple spaces"]]"

putserv "PRIVMSG $chan :mcps [encrypt $chankey [string map {" " "\xA0"} "\00328!help - Display this list"]]"

}

 

# This routine catches all encrypted messages, decides if they are a command,

# and calls the appropiate routine if they are

proc pub:getcmd {nick host hand chan text } {

# Set the channel key

global chankey

 

# Decrypt the message

set plaintext [decrypt $chankey $text]

 

# Parse out the begining for the commands with an argument

set SpecialCmd [string range $plaintext 0 7]

# Get the argument

set arg [string range $plaintext 8 end]

# Check for the special commands

if {$SpecialCmd == "!special"} { pub:special $nick $host $hand $chan $arg }

if {$SpecialCmd == "!tspaces"} { pub:tspaces $nick $host $hand $chan $arg }

 

# Check for the other commands

switch $plaintext {

 "!enccmd" { pub:enccmd $nick $host $hand $chan $plaintext }

 "!either" { pub:either $nick $host $hand $chan $plaintext }

 "!rspaces" { pub:rspaces $nick $host $hand $chan $plaintext }

 "!help" { pub:help $nick $host $hand $chan $plaintext }

}

}

 

proc pub:special { nick host hand chan arg } {

global chankey

# Send back the argument, encrypted

putserv "privmsg $chan :mcps [encrypt $chankey "$nick: Your command argument was $arg"]"

}

 

proc pub:enccmd { nick host hand chan text } {

global chankey

# Send back the command encrypted

putserv "privmsg $chan :mcps [encrypt $chankey "$nick: Your command was: $text"]"

}

 

proc pub:either { nick host hand chan text } {

global chankey

set botnick "StupidBot"

# See if it was an unencrypted command

if { $text == ""} {

   # If so, talk unencrypted

   putserv "privmsg $chan :$nick: $botnick talks decrypted. :)"

   } else {

   # Else talk encrypted

   putserv "privmsg $chan :mcps [encrypt $chankey "$nick: $botnick talks encrypted. :)"]"

 }

}

 

proc pub:rspaces { nick host hand chan text } {

global chankey

# Demonstrate a line with multispaces between characters

set sLine "T   E   S   T   I   N   G   1   2   3"

# \xA0 represents A0h (hex), which is 160 decimal or the invisible character

# Fill all spaces with the invisible character

putserv "privmsg $chan :mcps [encrypt $chankey [string map {" " "\xA0"} $sLine]]"

}

 

proc pub:tspaces { nick host hand chan arg } {

global chankey

# Get the length of $arg

set cnt [string length $arg]

# Prep stop point

set sChar 0

# Set a blank string to accumalate the spaced string

set sReturn ""

# Check to see if there is anything to space

if { $cnt > 0 } {

# If so, insert 3 spaces before each character

for {set i 0} {$i < $cnt} {incr i} {

 set sReturn "$sReturn[string range $arg $i $sChar]\xA0\xA0\xA0"

 incr sChar

}

# Send the spaced string back to the channel

putserv "privmsg $chan :mcps [encrypt $chankey $sReturn]"

}

}