I found this while sorting through old files. Perhaps of nostalgic value?
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-='-=-Clean Slate Bot OCX -=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-='-=-By CupHead and Zorm -=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-='-=-A Fatal Error and Valhalla Legends Joint Production -=-=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-='-=- Table of Contents -=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-1.0 Introduction -=-
'-=-2.0 Installing the OCX -=-
'-=- 2.1 Installing the OCX (really) -=-
'-=- 2.2 Uninstalling the OCX -=-
'-=-3.0 Adding the OCX to VB -=-
'-=-4.0 Adding the OCX to your project -=-
'-=-5.0 Using the OCX to your benefit -=-
'-=- 5.1 Properties -=-
'-=- 5.2 Methods -=-
'-=- 5.3 Events -=-
'-=-6.0 Demonstrations -=-
'-=- 6.1 Quick Demo -=-
'-=- 6.2 Parsing Events -=-
'-=- 6.3 Using Methods -=-
'-=-7.0 Troubleshooting -=-
'-=-8.0 Thanks 'n Stuff -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-1.0 Introduction -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- The Clean Slate Bot OCX is a control for Visual -=-
'-=-Basic that acts as a Binary Bot for Battle.Net. It's -=-
'-=-very easy to use and hopefully this quick tutorial will -=-
'-=-allow even the most inexperienced VB coder to create a -=-
'-=-bot in no time. So listen up, this is pretty easy -=-
'-=-stuff. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-1.1 About the OCX -=-
'-=- The OCX is based on Skywing's BNLS system. It is -=-
'-=-totally hashless, and has many features that will allow -=-
'-=-even the newbiest newbie to create a bot. I have put a -=-
'-=-good deal of help in here, and blah blah blah blah, so -=-
'-=-um... Don't bug me about stuff! It's easy. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-2.0 Installing the OCX -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- The OCX itself is easy to install, and even easier -=-
'-=-to use. Please note that for these to work, you have -=-
'-=-to use the path that you unzipped the OCX to. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-2.1 Installing the OCX (really) -=-
'-=- To install: -=-
'-=- Step 1 - Download the .zip file with the OCX in it. -=-
'-=- Step 2 - Unzip the file to somewhere like c:\ocx -=-
'-=- Step 3 - Install the OCX into your registry like so: -=-
'-=- Start > Run > Type: -=-
'-=- regsvr32 c:\ocx\CleanSlateBox.ocx -=-
'-=- -=-
'-=- You should get a message like DllRegisterServer -=-
'-=- in the OCX succeeded. This is good. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-2.2 Uninstalling the OCX -=-
'-=- To uninstall: -=-
'-=- Step 1 - Uninstall the OCX from your registry: -=-
'-=- Start > Run > Type: -=-
'-=- regsvr32 -u c:\ocx\CleanSlateBot.ocx -=-
'-=- -=-
'-=- You should get a message like DllUnRegisterServer -=-
'-=- in the OCX succeeded. This is also good. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-3.0 Adding the OCX to VB -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- It's even easier to install the OCX into VB than it -=-
'-=-is to install it into your registry. You simply hit -=-
'-=-CTRL + T or do Projects > Components then scroll down -=-
'-=-down to CleanSlateBot, add a check mark next to it, and -=-
'-=-voila! There it is on your tool bar. -=-
'-=- -=-
'-=-Note that the Clean Slate Bot is the one with the CH -=-
'-=-icon. That stands for CupHead. =P -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-4.0 Adding the OCX to your project -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- Easiest part yet! Click the CH icon, drag and drop -=-
'-=-it onto your form. There it is. Wow. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-5.0 Using the OCX to your benefit -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-5.1 Properties -=-
'-=- The OCX has properties that must be set before you -=-
'-=-tell the bot to connect. These will be explained here. -=-
'-=- -=-
'-=-Server - The server you want the bot to connect to. -=-
'-=- Example: CleanSlateBot1.Server = "useast.battle.net" -=-
'-=- -=-
'-=-Username - The username the bot will connect with. -=-
'-=- Example: CleanSlateBot1.Username = txtUsername.Text or -=-
'-=- CleanSlateBot1.Username = "CupHead" -=-
'-=- -=-
'-=-Password - The password for the username. -=-
'-=- Example: CleanSlateBot1.Password = txtPassword.Text or -=-
'-=- CleanSlateBot1.Password = "MyPassword" -=-
'-=- -=-
'-=-NewPassword - If using the password change, this is the -=-
'-=- password to change to. -=-
'-=- Example: CleanSlateBot1.NewPassword = txtNewPW.Text or -=-
'-=- CleanSlateBot1.NewPassword = "NewPassword" -=-
'-=- -=-
'-=-Product - The product to use when connecting. -=-
'-=- Example: CleanSlateBot1.Product = "3RAW" or -=-
'-=- CleanSlateBot1.Product = "PXES" -=-
'-=- -=-
'-=- Available products are: -=-
'-=- -Warcraft III: 3RAW -=-
'-=- -Warcraft II: NB2W -=-
'-=- -Starcraft: RATS -=-
'-=- -Brood War: PXES -=-
'-=- -Diablo II: VD2D -=-
'-=- -Diablo II LoD: PX2D -=-
'-=- -=-
'-=-Character - The Diablo II realm character to log on. -=-
'-=- Example: CleanSlateBot1.Character = "StupidAmazon" -=-
'-=- -=-
'-=-CDKey - The CDKey to use when logging on. -=-
'-=- Example: CleanSlateBot1.CDKey = "1234567890123" -=-
'-=- -=-
'-=-LODKey - The CDKey to use for Diablo II Expansion. -=-
'-=- Example: CleanSlateBot1.LODKey = "H37JF73P83J92464" -=-
'-=- -=-
'-=-Realm - The Realm to use for Diablo II closed logons. -=-
'-=- Example: CleanSlateBot1.Realm = "USEast" -=-
'-=- -=-
'-=-Available realms are: -=-
'-=- -USEast -=-
'-=- -USWest -=-
'-=- -Europe -=-
'-=- -Asia -=-
'-=- -=-
'-=-BNLSBotID - The BotID to use for BNLS. You *must* have -=-
'-=- one of these. Request from Skywing[vL] or -=-
'-=- Yoni[vL]. -=-
'-=- Example: CleanSlateBot1.BNLSBotID = "CupChat" -=-
'-=- -=-
'-=-BNLSBotPassword - The BotPassword to use for BNLS. -=-
'-=- Once again, you must have it, get it -=-
'-=- from Skywing[vL] or Yoni[vL]. -=-
'-=- -=-
'-=-HomeChannel - The channel to join when you connect. -=-
'-=- Example: -=-
'-=- CleanSlateBot1.HomeChannel = "Clan Fatal-Error" or -=-
'-=- CleanSlateBot1.HomeChannel = "Clan [vL]" -=-
'-=- -=-
'-=-UseRealm - Whether or not to connect to a D2 realm. -=-
'-=- Example: CleanSlateBot1.UseRealm = False or -=-
'-=- CleanSlateBot1.UseRealm = True -=-
'-=- -=-
'-=-ChangePassword - Whether or not to change password on -=-
'-=- logon. -=-
'-=- Example: CleanSlateBot1.ChangePassword = False or -=-
'-=- CleanSlateBot1.ChangePassword = True -=-
'-=- -=-
'-=-Accept - A "password" of sorts that stops people from -=-
'-=- using my OCX. It's public now, so... -=-
'-=- Example: CleanSlateBot1.Accept = -65 -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-5.2 Methods -=-
'-=- Methods are probably known to you as Subs. They are -=-
'-=-what you use to make the OCX do stuff. -=-
'-=- -=-
'-=-Connect - Tell the bot to connect. -=-
'-=- Example: CleanSlateBot1.Connect -=-
'-=- *Note: ALL INFORMATION MUST BE FILLED IN.* -=-
'-=- -=-
'-=-Disconnect - Tell the bot to disconnect. -=-
'-=- Example: CleanSlateBot1.Disconnect -=-
'-=- -=-
'-=-RequestKey - Request a profile key from Battle.Net. -=-
'-=- Example: CleanSlateBot1.RequestKey "Zorm", "age" -=-
'-=- That will return the age from Zorm's profile. -=-
'-=- -=-
'-=-WriteKey - Writes a profile key to Battle.Net. -=-
'-=- Example: -=-
'-=- CleanSlateBot1.WriteKey "Skywing", "age", "17" -=-
'-=- That will write 17 to Skywing's age. You can only -=-
'-=- write to your own profile, so... -=-
'-=- -=-
'-=-SimulateEvent - Advanced command for interaction -=-
'-=- between bots. I'll get into this -=-
'-=- another time. -=-
'-=- -=-
'-=-Send - Sends text to Battle.Net. -=-
'-=- Example: CleanSlateBot1.Send "Hello!" or -=-
'-=- CleanSlateBot1.Send "/ban EvilPerson Bye!" -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-5.3 Events -=-
'-=- Events are the biggest part of the bot. They do -=-
'-=-everything for you, literally everything. There are a -=-
'-=-lot to explain, so here they are. But first, events -=-
'-=-are accessed the same way any event is. After you drop -=-
'-=-the OCX on your form, double click it. Towards the top -=-
'-=-right of your window, you'll see a drop down box that -=-
'-=-says BNLSAuthEvent. Click it and you'll see the list -=-
'-=-of all events that the OCX supports. -=-
'-=- -=-
'-=-AdBanner(BannerFile, BannerLink) - Tells you the -=-
'-=- current advertisement being displayed on game clients. -=-
'-=- -=-
'-=-BnetConnected() - This event happens when you connect -=-
'-=- to Battle.Net. -=-
'-=- -=-
'-=-BnetConnecting() - This event happens when you begin -=-
'-=- connecting to Battle.Net. -=-
'-=- -=-
'-=-BnetDisconnected() - This event happens when you -=-
'-=- disconnect from Battle.Net. -=-
'-=- -=-
'-=-BnetError(ErrorNumber, Description) -=-
'-=- This event happens when an error occurs in the -=-
'-=- Battle.Net socket. -=-
'-=- -=-
'-=-BNLSAuthEvent(Success) - An event telling -=-
'-=- you that BNLS has accepted your BotID and BotPassword. -=-
'-=- Success is either true or false. -=-
'-=- -=-
'-=-BNLSConnected() - This event happens when you connect -=-
'-=- to BNLS. -=-
'-=- -=-
'-=-BNLSDisconnected() - This event happens when you -=-
'-=- disconnect from BNLS. -=-
'-=- -=-
'-=-BNLSError(ErrorNumber, Description) -=-
'-=- This event happens when an error occurs in the BNLS -=-
'-=- socket. -=-
'-=- -=-
'-=-ChannelList(ChannelName) - This event occurs -=-
'-=- when you receive the standard channel list. -=-
'-=- -=-
'-=-Debugger(Message) - Used for debugging. -=-
'-=- -=-
'-=-FlagsUpdate(Username, flags, Message, Ping) - This -=-
'-=- event occurs when a flag update happens, for example, -=-
'-=- when someone is squelched. -=-
'-=- -=-
'-=-JoinedChannel(ChannelName, flags) - This event occurs -=-
'-=- when you join a channel. -=-
'-=- -=-
'-=-KeyReturn(KeyName, KeyValue) - Happens when a profile -=-
'-=- key you've requested comes back. -=-
'-=- -=-
'-=-LoggedOnAs(Username) - Happens when you log on. OCX -=-
'-=- tells you what name you've logged on as. -=-
'-=- -=-
'-=-LogonEvent(Message) - Message returns a number. -=-
'-=- Messages are: -=-
'-=- 0 - Failed logon, account doesn't exist. -=-
'-=- 1 - Failed logon, bad password. -=-
'-=- 2 - Successful logon. -=-
'-=- 3 - Attempting to create the account. -=-
'-=- 4 - Successfully created account. -=-
'-=- -=-
'-=-PasswordChange(Success) - Tells you whether or not the -=-
'-=- password change was successful. -=-
'-=- Success is either True or False. -=-
'-=- -=-
'-=-RealmConnected() - Tells you when you've successfully -=-
'-=- connected to a D2 realm. -=-
'-=- -=-
'-=-RealmConnecting() - This event happens when you begin -=-
'-=- connecting to a D2 realm. -=-
'-=- -=-
'-=-RealmDisconnected() - This event happens when you -=-
'-=- disconnect from D2 realm. -=-
'-=- -=-
'-=-RealmError(ErrorNumber, Description) -=-
'-=- This event happens when an error occurs in the -=-
'-=- D2 realm socket. -=-
'-=- -=-
'-=-ServerError(Message) - When Battle.Net sends an error -=-
'-=- message like "That user is not logged on." -=-
'-=- -=-
'-=-ServerInfo(Message) - When Battle.Net sends information -=-
'-=- like a friends list. -=-
'-=- -=-
'-=-SimulatedEvent(PassedControl, EventType) - When a -=-
'-=- request for a simulated event comes in. -=-
'-=- -=-
'-=-SomethingUnknown(Message) - When something that the OCX -=-
'-=- doesn't recognized is sent from Battle.Net. -=-
'-=- -=-
'-=-UserEmote(Username, flags, Message) - When someone uses -=-
'-=- /me in the channel you're in. -=-
'-=- -=-
'-=-UserInChannel(Username, flags, Message, Ping) - When -=-
'-=- you join a channel and people are already there, this -=-
'-=- event executes for each person. -=-
'-=- -=-
'-=-UserJoins(Username, flags, Message, Ping) - When -=-
'-=- someone else joins the channel. -=-
'-=- -=-
'-=-UserLeaves(Username, flags) - When someone else leaves -=-
'-=- the channel, this event executes. -=-
'-=- -=-
'-=-UserTalk(Username, flags, Message, Ping) - When a user -=-
'-=- talks in the channel, this event is executed. -=-
'-=- -=-
'-=-VersionCheck(Message) - This event occurs while CD key -=-
'-=- and username/password are being checked. -=-
'-=- Messages are: -=-
'-=- 0 - Version check and CD-Key check passed. -=-
'-=- 1 - Version check failed, bad version. -=-
'-=- 2 - CD-Key check failed, bad key. -=-
'-=- 3 - Version check failed, need updated hashes. -=-
'-=- 4 - CD-Key check failed, key is for another game. -=-
'-=- 5 - CD-Key check failed, key is banned. -=-
'-=- 6 - CD-Key check failed, key is in use. -=-
'-=- -=-
'-=-WhisperFromUser(Username, flags, Message) - When a user -=-
'-=- whispers to you, this event is executed. -=-
'-=- -=-
'-=-WhisperToUser(Username, flags, Message, Ping) - When -=-
'-=- you whisper to another user, this event executes. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-6.0 Demonstrations -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-6.1 Quick Demo -=-
'-=- Create a form, add the OCX to your project, drop one -=-
'-=-onto your form. Then, double click your form and add -=-
'-=-this to Form_Load: -=-
'-=- -=-
'-=-CleanSlateBot1.BNLSBotID = "La la la..." -=-
'-=-CleanSlateBot1.BNLSBotPassword = "Nuh uh!" -=-
'-=-CleanSlateBot1.CDKey = "Zorm left his key here. =X" -=-
'-=-CleanSlateBot1.Product = "PXES" -=-
'-=-CleanSlateBot1.HomeChannel = "Clan Ze][2o" -=-
'-=-CleanSlateBot1.Password = "Hahaha! No." -=-
'-=-CleanSlateBot1.Username = "Zorm" -=-
'-=-CleanSlateBot1.NewPassword = "bleh" -=-
'-=-CleanSlateBot1.ChangePassword = False -=-
'-=-CleanSlateBot1.Server = "usw-bna-chat03.battle.net" -=-
'-=-CleanSlateBot1.Accept = -65 -=-
'-=-CleanSlateBot1.Connect -=-
''-=- -=-
'-=-That's all it takes. Assuming you fix the information. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-6.2 Parsing Events -=-
'-=- Go back to that project and add a TextBox to the -=-
'-=-form. You can rename it if you want, not necessary -=-
'-=-though. -=-
'-=- -=-
'-=-Select the JoinedChannel event. It should put you on a -=-
'-=-blank line. Type: -=-
'-=- Text1.Text = Text1.Text & "Joined Channel: " & -=-
'-=-ChannelName & vbCrLf -=-
'-=- -=-
'-=-Now, whenever you join a channel, your text box will -=-
'-=-add Joined Channel: and the channel name to it. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- -=-
'-=-6.3 Using Methods -=-
'-=- Ok, select the JoinedChannel event again. Now, add -=-
'-=-CleanSlateBot1.Send "Hi, all. I'm using My Bot!" -=-
'-=-beneath the Joined Channel line. This will send what -=-
'-=-you said to the channel each time you join. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-7.0 Troubleshooting -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- If you have problems, then... I don't know. -=-
'-=-Everything was explained very simply here, with -=-
'-=-examples provided. Just check your code, declare your -=-
'-=-variables and cross your fingers. -=-
'-=- -=-
'-=-If you're really desperate, get ahold of me on -=-
'-=-Battle.Net as CupHead.fe or CupHead[vL] -=-
'-=-Also, I can be E-Mailed at: -=-
'-=- CupHead@valhallalegends.com -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=-8.0 Thanks 'n Stuff -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'-=- Thanks to Zorm mostly, Skywing, Grok, everyone in -=-
'-=-Fatal Error who has been quite helpful. -=-
'-=- -=-
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-