I can't seem to get this script to work. After hours of looking with
no luck, maybe you guys can help me find the errors.
'define
'1.0
' ^ Version Required ^
' Plugin Script
' Designed and Scripted By:

Sub define_Event_Load()
End Sub

'// Fires when the bot executes.
Sub define_Event_LoadDisplay()
End Sub

'// Fires when a user on battle.net talks.
Sub define_Event_UserTalk(Username, Flags, Message, Ping)
if Left(LCase(Message),7) = BotVars.Trigger & "define" then
GetDBEntry Username, myAccess, myFlags
VetoThisMessage()
if instr(myFlags, getAccess("definition")) <> 0 then
if len(Message) < 9 then
call handleText(username, "Supply a word to be defined.", ping)
else
call define(mid(Message, 9), username, ping)
end if
end if
end if
End Sub

Sub define_Event_PressedEnter(Text)
call define_event_userTalk(BotVars.username, 0, Text, -4)
End Sub

Sub define_Event_WhisperFromUser(Username, Flags, Message)
call define_Event_UserTalk(BotVars.Username, 0, Message, -3)
End Sub

Sub define(word, user, mode)
if lcase(word) = "warlock" or lcase(word) = "w_a_r_l_o_c_k" then
call handleText(user, word & ": God's gift to warcraft.", mode)
exit sub
end if

if lcase(word) = "coke" or lcase(word) = "cold_cherrycoke" then
call handleText(user, word & ": See Noob.", mode)
exit sub
end if

if lcase(word) = "noob" then
call handleText(user, word & ": Person that sucks balls at video
games like warcraft.", mode)
exit sub
end if

if ScINet.stillExecuting then
call handleText(user, "The bot is busy... wait a few seconds and
try again.", mode)
exit sub
end if

content = InetOpen("http://dictionary.reference.com/search?q="&word)
if instr(content, "No entry found for") <> 0 then
call defUrban(word, user, mode)
exit sub
end if
data = split(content, "<LI TYPE=""a"">")

if ubound(data) = 0 then
info = split(content, "<DD>")
if ubound(info) > 3 then
for i=1 to ubound(info)
newdef = mid(info(i), 1, instr(info(i), "<")-1)
call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
next
else
for i=1 to ubound(info)
newdef = mid(info(i), 1, instr(info(i), "<")-1)
call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
next
end if
if ubound(info) = 0 then
call defUrban(word, user, mode)
end if
exit sub
end if


'else if ubound(data) > 0, when there is a list of definitions...
if ubound(data) > 3 then
call handleText(user, "Found " & ubound(data) & " entries for "&
word & ". Here are three.", mode)
for i=1 to 3
newdef = mid(data(i), 1, instr(data(i), "<")-2)
call displayText(i &": " & newdef, " ", BotVars.Username, 1)
next
else
for i=1 to ubound(data)
newdef = mid(data(i), 1, instr(data(i), "<")-2)
call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
next
end if
End Sub

Sub defUrban(word, user, mode)
if ScINet.stillExecuting then
call handleText(user, "The bot is busy... wait a few seconds and
try again.", mode)
exit sub
end if

content = InetOpen("http://www.urbandictionary.com/define.php?
term="&word)
if instr(content, "is undefined") <> 0 then
call handleText(user, "Failed to find a definition using both a
dictionary and an urban dictionary.", mode)
exit sub
end if
defArray = split(content, "<div class=""def_p"">")
if ubound(defArray) = 0 then
call handleText(user, "Failed to find a definition using both a
dictionary and an urban dictionary.", mode)
exit sub
end if
defcount = 0
found = false
for i=1 to ubound(defArray)
if instr(defArray(i), "1.") = 0 then
found = true
def = mid(defArray(i), instr(defArray(i), "<p>"))
def = mid(def, 1, instr(def, "</p>")-1)
def = replace(def, "&quot;", "")
'addchat vbyellow, def
while instr(def, "<") <> 0
pos1 = instr(def, "<")
pos2 = instr(def, ">")
temp = mid(def, pos1, pos2-pos1+1)
def = replace(def, temp, "")
wend
addchat vbred, len(def)
def = replace(def, " ", " ")
def = replace(def, vbnewline, "")
def = replace(def, vbtab, "")
def = replace(def, cr, "")
def = replace(def, lf, "")
def = replace(def, ctlf, "")
def = replace(def, " ", " ")
call displayText(word & ": " & def, " ", BotVars.Username, 1)
defcount = defcount + 1
if defcount = 1 then exit sub
end if
next
if found = false then call handleText(user, "Definition exists on
urban dictionary, but not on dictionary.com - Definition could not be
displayed.", mode)
End Sub

Re: Error Number 13 Description mismatch by Michael

Michael
Fri Mar 30 19:13:13 CDT 2007

Red007 wrote:
> I can't seem to get this script to work. After hours of looking with
> no luck, maybe you guys can help me find the errors.

Error 13 can happen when you call a sub/function that hasn't been defined
(or not yet loaded/parsed/compiled) or is misspelled.

I see explicit definetions for...

Sub define_Event_Load()
Sub define_Event_LoadDisplay()
Sub define_Event_UserTalk(Username, Flags, Message, Ping)
Sub define_Event_PressedEnter(Text)
Sub define_Event_WhisperFromUser(Username, Flags, Message)
Sub define(word, user, mode)
Sub defUrban(word, user, mode)

...but not...

GetDBEntry
VetoThisMessage
handleText
etc.
plus some object.method calls

There must be more to the host runtime environment for this 'Plugin Script'
that you aren't posting. That makes it kinda hard for anyone but you to
debug ;-).


> 'define
> '1.0
> ' ^ Version Required ^
> ' Plugin Script
> ' Designed and Scripted By:
>
> Sub define_Event_Load()
> End Sub
>
> '// Fires when the bot executes.
> Sub define_Event_LoadDisplay()
> End Sub
>
> '// Fires when a user on battle.net talks.
> Sub define_Event_UserTalk(Username, Flags, Message, Ping)
> if Left(LCase(Message),7) = BotVars.Trigger & "define" then
> GetDBEntry Username, myAccess, myFlags
> VetoThisMessage()
> if instr(myFlags, getAccess("definition")) <> 0 then
> if len(Message) < 9 then
> call handleText(username, "Supply a word to be defined.", ping)
> else
> call define(mid(Message, 9), username, ping)
> end if
> end if
> end if
> End Sub
>
> Sub define_Event_PressedEnter(Text)
> call define_event_userTalk(BotVars.username, 0, Text, -4)
> End Sub
>
> Sub define_Event_WhisperFromUser(Username, Flags, Message)
> call define_Event_UserTalk(BotVars.Username, 0, Message, -3)
> End Sub
>
> Sub define(word, user, mode)
> if lcase(word) = "warlock" or lcase(word) = "w_a_r_l_o_c_k" then
> call handleText(user, word & ": God's gift to warcraft.", mode)
> exit sub
> end if
>
> if lcase(word) = "coke" or lcase(word) = "cold_cherrycoke" then
> call handleText(user, word & ": See Noob.", mode)
> exit sub
> end if
>
> if lcase(word) = "noob" then
> call handleText(user, word & ": Person that sucks balls at video
> games like warcraft.", mode)
> exit sub
> end if
>
> if ScINet.stillExecuting then
> call handleText(user, "The bot is busy... wait a few seconds and
> try again.", mode)
> exit sub
> end if
>
> content = InetOpen("http://dictionary.reference.com/search?q="&word)
> if instr(content, "No entry found for") <> 0 then
> call defUrban(word, user, mode)
> exit sub
> end if
> data = split(content, "<LI TYPE=""a"">")
>
> if ubound(data) = 0 then
> info = split(content, "<DD>")
> if ubound(info) > 3 then
> for i=1 to ubound(info)
> newdef = mid(info(i), 1, instr(info(i), "<")-1)
> call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> next
> else
> for i=1 to ubound(info)
> newdef = mid(info(i), 1, instr(info(i), "<")-1)
> call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> next
> end if
> if ubound(info) = 0 then
> call defUrban(word, user, mode)
> end if
> exit sub
> end if
>
>
> 'else if ubound(data) > 0, when there is a list of definitions...
> if ubound(data) > 3 then
> call handleText(user, "Found " & ubound(data) & " entries for "&
> word & ". Here are three.", mode)
> for i=1 to 3
> newdef = mid(data(i), 1, instr(data(i), "<")-2)
> call displayText(i &": " & newdef, " ", BotVars.Username, 1)
> next
> else
> for i=1 to ubound(data)
> newdef = mid(data(i), 1, instr(data(i), "<")-2)
> call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> next
> end if
> End Sub
>
> Sub defUrban(word, user, mode)
> if ScINet.stillExecuting then
> call handleText(user, "The bot is busy... wait a few seconds and
> try again.", mode)
> exit sub
> end if
>
> content = InetOpen("http://www.urbandictionary.com/define.php?
> term="&word)
> if instr(content, "is undefined") <> 0 then
> call handleText(user, "Failed to find a definition using both a
> dictionary and an urban dictionary.", mode)
> exit sub
> end if
> defArray = split(content, "<div class=""def_p"">")
> if ubound(defArray) = 0 then
> call handleText(user, "Failed to find a definition using both a
> dictionary and an urban dictionary.", mode)
> exit sub
> end if
> defcount = 0
> found = false
> for i=1 to ubound(defArray)
> if instr(defArray(i), "1.") = 0 then
> found = true
> def = mid(defArray(i), instr(defArray(i), "<p>"))
> def = mid(def, 1, instr(def, "</p>")-1)
> def = replace(def, "&quot;", "")
> 'addchat vbyellow, def
> while instr(def, "<") <> 0
> pos1 = instr(def, "<")
> pos2 = instr(def, ">")
> temp = mid(def, pos1, pos2-pos1+1)
> def = replace(def, temp, "")
> wend
> addchat vbred, len(def)
> def = replace(def, " ", " ")
> def = replace(def, vbnewline, "")
> def = replace(def, vbtab, "")
> def = replace(def, cr, "")
> def = replace(def, lf, "")
> def = replace(def, ctlf, "")
> def = replace(def, " ", " ")
> call displayText(word & ": " & def, " ", BotVars.Username, 1)
> defcount = defcount + 1
> if defcount = 1 then exit sub
> end if
> next
> if found = false then call handleText(user, "Definition exists on
> urban dictionary, but not on dictionary.com - Definition could not be
> displayed.", mode)
> End Sub

--
Michael Harris
Microsoft.MVP.Scripting



Re: Error Number 13 Description mismatch by Red007

Red007
Fri Mar 30 20:38:22 CDT 2007

On Mar 30, 8:13 pm, "Michael Harris \(MVP\)" <mikhar.at.mvps.dot.org>
wrote:
> Red007 wrote:
> > I can't seem to get this script to work. After hours of looking with
> > no luck, maybe you guys can help me find the errors.
>
> Error 13 can happen when you call a sub/function that hasn't been defined
> (or not yet loaded/parsed/compiled) or is misspelled.
>
> I see explicit definetions for...
>
> Sub define_Event_Load()
> Sub define_Event_LoadDisplay()
> Sub define_Event_UserTalk(Username, Flags, Message, Ping)
> Sub define_Event_PressedEnter(Text)
> Sub define_Event_WhisperFromUser(Username, Flags, Message)
> Sub define(word, user, mode)
> Sub defUrban(word, user, mode)
>
> ...but not...
>
> GetDBEntry
> VetoThisMessage
> handleText
> etc.
> plus some object.method calls
>
> There must be more to the host runtime environment for this 'Plugin Script'
> that you aren't posting. That makes it kinda hard for anyone but you to
> debug ;-).
>
>
>
> > 'define
> > '1.0
> > ' ^ Version Required ^
> > ' Plugin Script
> > ' Designed and Scripted By:
>
> > Sub define_Event_Load()
> > End Sub
>
> > '// Fires when the bot executes.
> > Sub define_Event_LoadDisplay()
> > End Sub
>
> > '// Fires when a user on battle.net talks.
> > Sub define_Event_UserTalk(Username, Flags, Message, Ping)
> > if Left(LCase(Message),7) = BotVars.Trigger & "define" then
> > GetDBEntry Username, myAccess, myFlags
> > VetoThisMessage()
> > if instr(myFlags, getAccess("definition")) <> 0 then
> > if len(Message) < 9 then
> > call handleText(username, "Supply a word to be defined.", ping)
> > else
> > call define(mid(Message, 9), username, ping)
> > end if
> > end if
> > end if
> > End Sub
>
> > Sub define_Event_PressedEnter(Text)
> > call define_event_userTalk(BotVars.username, 0, Text, -4)
> > End Sub
>
> > Sub define_Event_WhisperFromUser(Username, Flags, Message)
> > call define_Event_UserTalk(BotVars.Username, 0, Message, -3)
> > End Sub
>
> > Sub define(word, user, mode)
> > if lcase(word) = "warlock" or lcase(word) = "w_a_r_l_o_c_k" then
> > call handleText(user, word & ": God's gift to warcraft.", mode)
> > exit sub
> > end if
>
> > if lcase(word) = "coke" or lcase(word) = "cold_cherrycoke" then
> > call handleText(user, word & ": See Noob.", mode)
> > exit sub
> > end if
>
> > if lcase(word) = "noob" then
> > call handleText(user, word & ": Person that sucks balls at video
> > games like warcraft.", mode)
> > exit sub
> > end if
>
> > if ScINet.stillExecuting then
> > call handleText(user, "The bot is busy... wait a few seconds and
> > try again.", mode)
> > exit sub
> > end if
>
> > content = InetOpen("http://dictionary.reference.com/search?q="&word)
> > if instr(content, "No entry found for") <> 0 then
> > call defUrban(word, user, mode)
> > exit sub
> > end if
> > data = split(content, "<LI TYPE=""a"">")
>
> > if ubound(data) = 0 then
> > info = split(content, "<DD>")
> > if ubound(info) > 3 then
> > for i=1 to ubound(info)
> > newdef = mid(info(i), 1, instr(info(i), "<")-1)
> > call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> > next
> > else
> > for i=1 to ubound(info)
> > newdef = mid(info(i), 1, instr(info(i), "<")-1)
> > call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> > next
> > end if
> > if ubound(info) = 0 then
> > call defUrban(word, user, mode)
> > end if
> > exit sub
> > end if
>
> > 'else if ubound(data) > 0, when there is a list of definitions...
> > if ubound(data) > 3 then
> > call handleText(user, "Found " & ubound(data) & " entries for "&
> > word & ". Here are three.", mode)
> > for i=1 to 3
> > newdef = mid(data(i), 1, instr(data(i), "<")-2)
> > call displayText(i &": " & newdef, " ", BotVars.Username, 1)
> > next
> > else
> > for i=1 to ubound(data)
> > newdef = mid(data(i), 1, instr(data(i), "<")-2)
> > call displayText(i & ": " & newdef, " ", BotVars.Username, 1)
> > next
> > end if
> > End Sub
>
> > Sub defUrban(word, user, mode)
> > if ScINet.stillExecuting then
> > call handleText(user, "The bot is busy... wait a few seconds and
> > try again.", mode)
> > exit sub
> > end if
>
> > content = InetOpen("http://www.urbandictionary.com/define.php?
> > term="&word)
> > if instr(content, "is undefined") <> 0 then
> > call handleText(user, "Failed to find a definition using both a
> > dictionary and an urban dictionary.", mode)
> > exit sub
> > end if
> > defArray = split(content, "<div class=""def_p"">")
> > if ubound(defArray) = 0 then
> > call handleText(user, "Failed to find a definition using both a
> > dictionary and an urban dictionary.", mode)
> > exit sub
> > end if
> > defcount = 0
> > found = false
> > for i=1 to ubound(defArray)
> > if instr(defArray(i), "1.") = 0 then
> > found = true
> > def = mid(defArray(i), instr(defArray(i), "<p>"))
> > def = mid(def, 1, instr(def, "</p>")-1)
> > def = replace(def, "&quot;", "")
> > 'addchat vbyellow, def
> > while instr(def, "<") <> 0
> > pos1 = instr(def, "<")
> > pos2 = instr(def, ">")
> > temp = mid(def, pos1, pos2-pos1+1)
> > def = replace(def, temp, "")
> > wend
> > addchat vbred, len(def)
> > def = replace(def, " ", " ")
> > def = replace(def, vbnewline, "")
> > def = replace(def, vbtab, "")
> > def = replace(def, cr, "")
> > def = replace(def, lf, "")
> > def = replace(def, ctlf, "")
> > def = replace(def, " ", " ")
> > call displayText(word & ": " & def, " ", BotVars.Username, 1)
> > defcount = defcount + 1
> > if defcount = 1 then exit sub
> > end if
> > next
> > if found = false then call handleText(user, "Definition exists on
> > urban dictionary, but not on dictionary.com - Definition could not be
> > displayed.", mode)
> > End Sub
>
> --
> Michael Harris
> Microsoft.MVP.Scripting

Yeah i use a program called stealthbot i used my basic scripting
knowledge and looked at stealthbots custom scripting
'/*
' * StealthBot Shared Scripting Class
' *
' * ScriptSupportClass.cls
' *
' * This class basically mirrors the signatures of several important
StealthBot functions
' * for the purpose of allowing your scripts to interact with the rest
of the program.
' *
' * I'm very accomodating to the SB scripting community. If you have
something you want
' * to see mirrored or some change you want made, don't hesitate to e-
mail me about it
' * at stealth@stealthbot.net or bring it up on our scripting forums
at stealthbot.net.
' *
' * SCRIPTING SYSTEM CHANGELOG
' * (version 2.6R3, scripting system build 21)
' * - GetNameByPosition() boundary checks fixed (thanks Scio)
' *
' * (version 2.6, scripting system build 20)
' * - Exposed the entire internal bot variable class to the
scripting system
' * clsBotVars.txt shows you what you can access,
BotVars.varName
' * Suggested by Imhotep[Nu]
' * - Fixed the MonitoredUserIsOnline() function (thanks
Cnegurozka)
' * - Added BotPath function (thanks werehamster)
' * - Added IsOnline function (thanks Xelloss)
' * - Added Sleep function (thanks Imhotep[Nu])
' * - Added GetPositionByName function (thanks werehamster)
' * - Added GetNameByPosition function (thanks werehamster)
' * - Added GetBotVersion function (thanks Imhotep[Nu])
' * - Changed the ReloadSettings function (thanks Imhotep[Nu])
' * - New scripting event: Event_LoggedOff() (thanks Imhotep[Nu])
' * - Added Connect() and Disconnect() functions (thanks
Imhotep[Nu])
' * - Added BotClose() function (thanks Imhotep[Nu])
' * - Changed GetInternalData() function and added
GetInternalDataByUsername() function
' * - Added GetInternalUserCount() function
' * - Added Event_ChannelLeave() function (request of Imhotep[Nu])
' * - Added GetConfigEntry() and WriteConfigEntry() functions
' * - Added PrintURLToFile() function (thanks SoCxFiftyToo)
' * - Added VetoThisMessage() function -- use in
Event_PressedEnter to prevent the
' * message in the event's arguments from being sent to
Battle.net
' *
' * (version 2.5, scripting system build 19)
' * - Command() now returns the command response string
(requested)
' * - New SSC function GetInternalData(sUser, lDataType) - see the
function in this file for details
' * - New SSC function IsShitlisted()
' * - New SSC function PadQueue() added
' *
' * (version 2.4R2, scripting system build 18)
' * - AddChat now loops from 0 to ubound, which is correct.
(Thanks Imhotep[Nu])
' * - Added the ReloadSettings function
' * - The Event_Close() sub is called when a user reloads the
config
' * - Fixed the signature for Event_KeyPress in script.txt (should
be Event_PressedEnter)
' * - Added Event_UserInChannel()
' * - Clarified how #include works in script.txt
' *
' * (version 2.4, scripting system build 17)
' * - The Event_ChannelJoin scripted subroutine is now usable
(thanks -)(nsane-)
' * - Exposed a MSINET control to the Scripting system, for use in
script-to-website
' * communication
' * - Added the #include keyword for script files -- more
information is in script.txt
' * - Added the MonitoredUserIsOnline() function
' * - The Level variable is now properly passed to the script
control
' * - Added scripting events:
' * > ServerError messages
' * > PressedEnter
' * - The script control class now has access to GetTickCount and
Beep API calls
' * and has been improved based on user requests
' * - Added the Match, DoReplace, DoBeep and GetGTC functions
' * - Added the myChannel, BotFlags and myUsername publicly
accessible variables
' * - Added the _KeyReturn() event, for processing profile keys
returned from the server
' * - Added the RequestUserProfile() method, for requesting any
user's profile
' * - Added the SetBotProfile() method, for setting the bot's
current profile
' * - Added the Event_Close() event, which executes on
Form_Unload()
' * - Event_Load() is now called when you reload the script.txt
file
' * - Added the OriginalStatstring variable to Event_Join(). It
contains the unparsed statstring of the joining user
' */

Option Explicit

Public myChannel As String '// will contain the bot's current channel
at runtime.
Public BotFlags As Long '// will contain the bot's current battle.net
flags at runtime.
Public myUsername As String '// will contain the bot's current
username at runtime.
'// NOTE: This may be different than the
bot's config.ini username

'// myTrigger has been replaced by BotVars.BotVars.Trigger
'Public myTrigger As String '// contains the bot's current trigger at
runtime

Public Enum BanTypes
btBan = 0 '// used in calling the BanKickUnban() subroutine
btKick = 1
btUnban = 2
End Enum

'/*
******************************************************************************************
' *
' *
' *
' *
' * INTERNAL BOT "MIRROR" FUNCTIONS
' * Usage: ssc.function(arguments)
' * Example: ssc.AddChat vbBlue, "Hello world!"
' *
' *
' *
******************************************************************************************
' */

'// ADDCHAT
'// Grok's famous AddChat subroutine. Processes Starcraft/Diablo II
color codes automatically.
'// Format: AddChat(Color, Text)
'// Extensible as far as you need:
'// AddChat(Color, Text, Color, Text, Color, Text) -- will all display
on one line.
Public Sub AddChat(ParamArray saElements() As Variant)

'// somehow necessary to actually loop through the array instead
of passing it directly. Geh.

Dim i As Integer

For i = 0 To UBound(saElements) Step 2
frmChat.AddChat saElements(i), saElements(i + 1)
Next i

End Sub


'// ADDQ (ADD QUEUE)
'// Adds a string to the message send queue.
'// Nonzero priority messages will be sent with precedence over 0-
priority messages.
Public Sub AddQ(ByVal sText As String, Optional ByVal Priority As Byte
= 0)

frmChat.AddQ sText, Priority

End Sub


'// COMMAND
'// Calls StealthBot's command processor
'// Messages passed to the processor will be evaluated as commands
'// Public Function Commands(ByRef dbAccess As udtGetAccessResponse,
Username As String, _
'// Message As String, InBot As Boolean, Optional CC As Byte = 0)
As String

'// RETURNS: The response string, or an empty string if there is no
response

'// Detailed description of each variable:
'// dbAccess is assembled below. It consists of the speaker
username's access within the bot.
'// For scripting purposes, this module will assemble
dbAccess by calling GetAccess() on
'// the username you specify.
'// Username is the speaker's username (the username of the person
using the command.)
'// Message is the raw command message from Battle.net. If the
user says ".say test", the raw
'// command message is ".say test". This is the method by
which you should call the commands.
'// InBot defines whether or not the command has been issued
from inside the bot. If it has,
'// the trigger is temporarily changed to "/". Basically,
for scripting purposes you can
'// use it to control whether or not your command
responses display publicly.
'// CC CC controls whether or not the command string is
passed to the Custom Command processor.
'// For scripting purposes I will not allow the user to
set CC, it is always 0.
Public Function Command(ByVal Username As String, ByVal Message As
String, ByVal InBot As Boolean) As String

Dim dbAccess As udtGetAccessResponse
'// GetAccess() will return the access type the commands sub needs
dbAccess = GetAccess(Username)

Command = Commands(dbAccess, Username, Message, InBot, 0)

End Function


'// PING
'// Returns the cached ping of the specified user.
'// If the user is not present in the channel, it returns -3.
Public Function Ping(ByVal Username As String) As Long

Ping = GetPing(Username)

End Function


'// BANKICKUNBAN
'// Returns a string corresponding to the success or failure of a ban
attempt.
'// Responses should be directly queued using AddQ().
'// Example response strings:
'// That user is safelisted.
'// The bot does not have ops.
'// /ban thePerson Your mother!

'// Variable descriptions:
'// INPT - Contains the username of the person followed by any
extension to it, such as ban message
'// - Examples: "thePerson Your Mother has a very extremely
unequivocally long ban message!"
'// - "thePerson"
'// - "thePerson Short ban message

'// SPEAKERACCESS contains the access of the person attempting to
ban/kick. This is not applied in
'// unban situations.
'// In Kick and Ban situations, the target's access
must be less than or equal to
'// this value -- use it to control inherent
safelisting (ie all users with > 20 access
'// are not affected by it)

'// MODE contains the purpose of the subroutine call. The same
routine is used to ban, kick and
'// unban users, so make that choice when calling it.
'// Ban = 0; Kick = 1; Unban = 2. Any other value will
cause the function to die a horrible
'// death. (not really, it just won't do anything.)

Public Function BanKickUnban(ByVal Inpt As String, ByVal SpeakerAccess
As Integer, _
Optional ByVal Mode As BanTypes = 0) As String

BanKickUnban = Ban(Inpt, SpeakerAccess, CByte(Mode))

End Function


'// ISSAFELISTED
'// Returns True if the user is safelisted, False if they're not.
Pretty simple.
Public Function isSafelisted(ByVal Username As String) As Boolean

isSafelisted = GetSafelist(Username)

End Function

'// ISSHITLISTED
'// Returns a null string if the user is not shitlisted, otherwise
returns the shitlist message.
Public Function isShitlisted(ByVal Username As String) As String

isShitlisted = GetShitlist(Username)

End Function



'// GETDBENTRY
'// Bit of a modification to my existing GetAccess() call to return
the data to you effectively.
'// The scripting control isn't the greatest.
'// Pass it the username and it will pass you the person's access and
flags.
'// If the name is not in the database, it will return -1 / null
flags.
Public Sub GetDBEntry(ByVal Username As String, ByRef Access, ByRef
Flags) '// yum, Variants >:\

Dim Temp As udtGetAccessResponse

Temp = GetAccess(Username)

Access = Temp.Access
Flags = Temp.Flags

End Sub


'// PREPARELIKECHECK
'// Prepares a string for comparison using the Visual Basic LIKE
operator
'// Originally written by Zorm, since expanded
Public Function PrepareLikeCheck(ByVal sText As String) As String

PrepareLikeCheck = PrepareCheck(sText)

End Function


'// GETGTC
'// Returns the current system uptime in milliseconds as reported by
the GetTickCount() API call
Public Function GetGTC() As Long

GetGTC = GetTickCount()

End Function


'// DOBEEP
'// Executes a call to the Beep() API function
Public Function DoBeep(ByVal lFreq As Long, ByVal lDuration As Long)
As Long

DoBeep = Beep(lFreq, lDuration)

End Function


'// DOREPLACE
'// Equivalent to the VB Replace() function which does not exist in
VBScript
Public Function DoReplace(ByVal Expression As Variant, ByVal Find As
Variant, ByVal Replace As Variant, _
Optional ByVal start As Long = 1, Optional ByVal Count As Long =
-1, Optional ByVal CompareMethod As Long = 0) As String

DoReplace = Replace(Expression, Find, Replace, start, Count,
CompareMethod)

End Function


'// MATCH
'// Allows VBScripters to use the Like comparison operator in VB
'// Specify TRUE to the third argument (DoPreparation) to
automatically prepare both inbound strings
'// for compatibility with Like
Public Function Match(ByVal sString As String, ByVal sPattern As
String, ByVal DoPreparation As Boolean) As Boolean

If DoPreparation Then
sString = PrepareCheck(sString)
sPattern = PrepareCheck(sPattern)
End If

Match = (sString Like sPattern)

End Function


'// MONITOREDUSERISONLINE
'// Allows vbscripters to check the User Monitor status of a given
user
'// Returns -1 if the user is not in the monitor, 0 for offline and 1
for online
Public Function MonitoredUserIsOnline(ByVal Username As String) As
Integer

If MonitorExists Then
MonitoredUserIsOnline = MonitorForm.GetUserStatus(Username)
Else
MonitoredUserIsOnline = -1
End If

End Function


'// SETBOTPROFILE
'// Sets the bot's current profile to the specified value(s).
'// If passed as null, the values will not be reset, so profile data
you are not changing will not be overwritten.
Public Sub SetBotProfile(ByVal sNewSex As String, ByVal sNewLocation
As String, ByVal sNewDescription As String)

Call SetProfile(sNewLocation, sNewSex, sNewDescription)

End Sub


'// GETUSERPROFILE
'// Gets the profile of a specified user. The profile is returned in
three pieces via the _KeyReturn() event.
'// If Username is null, the bot's current username will be used
instead.
Public Sub GetUserProfile(ByVal Username As String)

If LenB(Username) > 0 Then
Call RequestProfile(Username)
Else
Call RequestProfile(CurrentUsername)
End If

End Sub


'// RELOADSETTINGS
'// Reloads the bot's configuration settings, userlist, safelist,
tagban list, and script.txt files - equivalent to
'// clicking "Reload Config" under the Settings menu inside the
bot.
'// @param DoNotLoadFontSettings - when passed a value of 1 the bot
will not
'// attempt to alter the main richtextbox font settings, which
causes its contents to be erased
Public Sub ReloadSettings(ByVal DoNotLoadFontSettings As Byte)

Call frmChat.ReloadConfig(DoNotLoadFontSettings)

End Sub


'// BOTPATH
'// Returns the bot's current path. Future compatibility with multiple
user profiles is already in place.
'// Return value includes the trailing "\".
Public Function BotPath() As String

BotPath = GetProfilePath()

End Function


'// GETINTERNALUSERCOUNT
'// Returns the highest index for use when calling
GetInternalDataByIndex
'// this allows you to call that function with (1 to
GetInternalUserCount())
Public Function GetInternalUserCount() As Integer

GetInternalUserCount = colUsersInChannel.Count

End Function


'// GETINTERNALDATABYINDEX
'// Retrieves the specified stored internal data for a given user in
the channel
'// If the specified user isn't present, the return value is -5
'// See lDataType constants in GetInternalData() below
Public Function GetInternalDataByUsername(ByVal sUser As String, ByVal
lDataType As Long) As Variant

Dim i As Integer

i = UsernameToIndex(sUser)

GetInternalDataByUsername = GetInternalData(i, lDataType)

End Function


'// GETINTERNALDATA
'// Retrieves the specified stored internal data for a given user in
the channel
'// If the specified user is not present, return value is '-5'
Public Function GetInternalData(ByVal iIndex As Integer, ByVal
lDataType As Long) As Variant
' -- '
' these constants will be useful in making calls to this
function
' | <purpose>
Const GID_CLAN = 0 '-> retrieves 4-character clan name
Const GID_FLAGS = 1 '-> retrieves Battle.net flags
Const GID_PING = 2 '-> retrieves ping on login
Const GID_PRODUCT = 3 '-> retrieves 4-digit product code
Const GID_ISSAFELISTED = 4 '-> retrieves Boolean value denoting
safelistedness
Const GID_STATSTRING = 5 '-> retrieves unparsed statstring
Const GID_TIMEINCHANNEL = 6 '-> retrieves time in channel in
seconds
Const GID_TIMESINCETALK = 7 '-> retrieves time since last message
in seconds
' -- '

If iIndex > 0 Then
Select Case lDataType
Case GID_CLAN
GetInternalData = colUsersInChannel.Item(iIndex).Clan

Case GID_FLAGS
GetInternalData = colUsersInChannel.Item(iIndex).Flags

Case GID_PING
GetInternalData = colUsersInChannel.Item(iIndex).Ping

Case GID_PRODUCT
GetInternalData =
colUsersInChannel.Item(iIndex).Product

Case GID_ISSAFELISTED
GetInternalData =
colUsersInChannel.Item(iIndex).Safelisted

Case GID_STATSTRING
GetInternalData =
colUsersInChannel.Item(iIndex).Statstring

Case GID_TIMEINCHANNEL
GetInternalData = colUsersInChannel.Item(iIndex).TICs

Case GID_TIMESINCETALK
GetInternalData =
colUsersInChannel.Item(iIndex).TimeSinceTalk

Case Else
GetInternalData = 0

End Select
Else
GetInternalData = -5
End If

End Function


'// ISONLINE
'// Returns a boolean denoting teh bot's status ONLINE=TRUE,
OFFLINE=FALSE.
Public Function IsOnline() As Boolean

IsOnline = g_Online

End Function


'// SLEEP
'// Mirror function for the Kernel32.dll function Sleep()
Public Sub Sleep(ByVal dwMilliseconds As Long)

Call Sleep(dwMilliseconds)

End Sub


'// GETPOSITIONBYNAME
'// Returns the channel list position of a user by their username
'// Returns -1 if the user is not present
Public Function GetPositionByName(ByVal sUser As String) As Integer

GetPositionByName = CheckChannel(sUser)

End Function


'// GETNAMEBYPOSITION
'// Returns the name of the person at position X in the channel list.
'// Positions are 1-based. Returns an empty string if the user isn't
present
Public Function GetNameByPosition(ByVal X As Integer) As String

With frmChat.lvChannel.ListItems
If X > 0 And X <= .Count Then
GetNameByPosition = .Item(X).text
Else
GetNameByPosition = ""
End If
End With

End Function


'// GETBOTVERSION
'// Returns the current StealthBot app version as a string.
Public Function GetBotVersion() As String

GetBotVersion = "StealthBot v" & App.Major & "." & App.Minor

'// Compiler flag - BETA = 0 in public releases
#If BETA = 1 Then
GetBotVersion = GetBotVersion & App.REVISION & " Development
Edition"
#End If

End Function


'// CONNECT
'// Connects the bot. Will disconnect an already-existent connection.
Public Sub Connect()

Call frmChat.DoConnect

End Sub



'// DISCONNECT
'// Closes any current connections within the bot.
Public Sub Disconnect()

Call frmChat.DoDisconnect

End Sub


'// BOTCLOSE
'// Shuts down StealthBot
Public Sub BotClose()

Call frmChat.Form_Unload(0)

End Sub


'// GETCONFIGENTRY
'// Reads a value from config.ini and returns it as a string
'// If no value is present an empty string will be returned
'// PARAMETERS
'// sSection - Section heading from the INI file - examples:
"Main", "Other"
'// sEntryName - Entry you want to read - examples: "Server",
"Username"
'// sFileName - File you're reading from - examples: "config.ini",
"definitions.ini"
Public Function GetConfigEntry(ByVal sSection As String, ByVal
sEntryName As String, ByVal sFileName As String) As String

If LenB(sFileName) = 0 Then sFileName = "config.ini"

GetConfigEntry = ReadINI(sSection, sEntryName, sFileName)

End Function



'// WRITECONFIGENTRY
'// Writes a value to config.ini
'// PARAMETERS
'// sSection - Section heading from the INI file - examples:
"Main", "Other"
'// sEntryName - Entry you want to read - examples: "Server",
"Username"
'// sValue - Value to be written to the file
'// sFileName - File you're reading from - examples: "config.ini",
"definitions.ini"
Public Sub WriteConfigEntry(ByVal sSection As String, ByVal sEntryName
As String, ByVal sValue As String, ByVal sFileName As String)

If LenB(sFileName) = 0 Then sFileName = "config.ini"

WriteINI sSection, sEntryName, sValue, sFileName

End Sub



'// VETOTHISMESSAGE
'// Used with PressedEnter event to prevent a message from being sent
to Battle.net
'// For use processing scripts entirely internally
Public Sub VetoThisMessage()

SetVeto True

End Sub



'// PRINTURLTOFILE
'// Mirror function for the Windows API URLDownloadToFile() function
'// Currently you are restricted to placing files in the StealthBot
install directory only
Public Sub PrintURLToFile(ByVal sFileName As String, ByVal sURL As
String)

sFileName = App.Path & "\" & sFileName

URLDownloadToFile 0, sURL, sFileName, 0, 0

End Sub


'// PADQUEUE
'// Pads the queue so further messages will be sent more slowly
Public Sub PadQueue()

QueueLoad = QueueLoad + 1

End Sub
It helped me alot but i did read it in a hurry. ';..;'