Valhalla Legends Archive

Programming => Battle.net Bot Development => Topic started by: SiMi on January 12, 2003, 04:51 PM

Title: 2 Questions
Post by: SiMi on January 12, 2003, 04:51 PM
ok , im adding commands to my bot but i want to get a good start , not on adding the commands but writing them and usuing the access way.Ok this is what i mean

Public Function Event_Talk
If LCase(strText) = "?trigger" Then Send msTrigger & " (ALT + 0" & Asc(msTrigger) & ")", True
If Left(strText, 1) = msTrigger Then DoCommands strUser, strText, False
End Sub


thats from  ethbot.....what i need is to start writing ot commands but writing them out in order from the access list unstead of M or A i want to write them out by 10 , 20 , 30
..... can somebody get me started and i can take it from there

2nd question

i need a good anti idle....telling the Bot Uptime , Connection Uptime and Computer Uptime..... i dont need them all in one but thats what i need
grrrr.........someone help
 ;D
Title: Re: 2 Questions
Post by: celluloid on January 12, 2003, 06:39 PM
to answer your 2nd question (i believe)
you could use this code, make a timer, and at the amount of time you set make it do /uptime
this is what i use (note: this is just the /uptime part of te code i have in a module)

If (Mid(txtSendBNET.text, 1, 7) = "/uptime") Then
        rtbAdd "Bot idle for: " & FormatCount(GetTickCount - LastTalk, 4) & vbNewLine, vbBlue
        rtbAdd "Bot connected for: " & FormatCount(GetTickCount - connecttime) & vbNewLine, vbBlue
        rtbAdd "Bot uptime: " & FormatCount(GetTickCount - RunningTime) & vbNewLine, vbBlue
        rtbAdd "Computer uptime: " & FormatCount(GetTickCount) & vbNewLine, vbBlue

i hope this helps a little bit if not, at least give you an idea of where to go with it.
Title: Re: 2 Questions
Post by: SiMi on January 12, 2003, 07:02 PM
QuoteIf (Mid(txtSendBNET.text, 1, 7) = "/uptime") Then
        rtbAdd "Bot idle for: " & FormatCount(GetTickCount - LastTalk, 4) & vbNewLine, vbBlue
        rtbAdd "Bot connected for: " & FormatCount(GetTickCount - connecttime) & vbNewLine, vbBlue
        rtbAdd "Bot uptime: " & FormatCount(GetTickCount - RunningTime) & vbNewLine, vbBlue
        rtbAdd "Computer uptime: " & FormatCount(GetTickCount) & vbNewLine, vbBlue


shouldn't it be If (Left(txtSendBNET.text, 1, 7) = "/uptime") Then
Title: Re: 2 Questions
Post by: Eric on January 12, 2003, 08:51 PM
Mid is short for middle
whats in between chracter 1 and character 7
/uptime
Title: Re: 2 Questions
Post by: Yoni on January 13, 2003, 02:20 AM
Mid(s, 1, 7) is pretty much equivalent to Left(s, 7) though.


I'd say Left is faster than Mid, but this is VB we're talking about, so speed is irrelevant. 8)
Title: Re: 2 Questions
Post by: Spht on January 13, 2003, 03:10 AM
Like Grok said once, you should check if the input was even a command before you try and treat every message as if it could be a command.
 
In SphtBot, when processing _KeyPress() for input, I check to see if the input was a command (Left(s, 1) = "/"), if it is, I send it to a command processing function. The function parses the input into Command - Parameter. Then using Select Case, I check the command. If the command matches no local commands, I then run it through the Aliases Binary Chat plugin (Aliases.bcp) which will then run the translated command back through the same function.
 
Using a seperate function allows me to have a remote command like "localcmd" that can call any local or Alias command. When it's called remotely, any messages that would be displayed on screen from the triggered command would be whispered back to the user if bLocal = False. If the command has no return, then it will return "Local command processed" by default.
Title: Re: 2 Questions
Post by: Grok on January 13, 2003, 06:21 AM
Auto-List/Auto-complete command list would be a nice GUI addition for when the user pressed the command token("/", ".", or alternative).

.        (dropdown list of possibilities)
.b       (show ban, other b* commands)
.b[tab]  (completes selected command from list)
Title: Re: 2 Questions
Post by: SiMi on January 13, 2003, 01:38 PM
grrrr....someone anwser my questions...
Title: Re: 2 Questions
Post by: Atom on January 13, 2003, 04:21 PM
Yeah ok, ill try to help you.
You need to learn how to use arrays. You can load a database of users with their flags into an array and loop through the items to see if that user has the proper flags. Boy im too tired to help nm.
Title: Re: 2 Questions
Post by: Grok on January 14, 2003, 12:19 AM
Hi SiMi, I'll tackle your first question.  The 2nd question, uptimes, is just a matter of subtracting the current time from the start time, and displaying the result.  "Uptime = " & Format(Tnow-Tstart, "HH:MM:SS") kind of thing.

Q:  "add commands using the access[level] way"

Based on your description, and needs of the process, I will make some assumptions, stated here:

Assumption:
*  UserID/Name is already determined (fUserID)
*  A function is available to get user access level.
*  If user level is higher than or equal to the command access level, the user is granted permission for the command.
*  All commands are enumerated.
*  An array is available with the access level for each command.

As you can see, you may have more groundwork to lay before we can actually write a function to grant permission to run a command.  Even so, there may be more to consider, like the target/effect of a command.  ZeroBot grants members the ability to ban, but ban won't work on certain targets (S-listed names).  But that logic can go in the command implementation.

Public Function CommandIsAuth(nCmdId, fUserId) As Boolean
    CommandIsAuth = False
    Dim pCmdSecLev As Long
    Dim pUserSecLev As Long
    pCmdSecLev = COMMAND_SECURITY_LEVEL(nCmdId)  'read value from array
    pUserSecLev = GetUserSecurityLevel(fUserId)  'function to get user access level
    if pUserSecLev < pCmdSecLev Then Exit Function
    'anyone surviving that is authorized for this command
    CommandIsAuth = True
End Function

In your startup code, you might want to initialize the array of command security levels, which in my sample I named COMMAND_SECURITY_LEVEL().  To make it easier to index commands and write code, I suggest creating a Commands Enum.

Public Enum BotCommands
   CmdNone
   CmdKick
   CmdBan
   CmdJoin
   CmdTalk
'   ... etc
End Enum
Public Const MAX_BOT_COMMANDS = 50   'set to your count from Enum BotCommands
Public COMMAND_SECURITY_LEVEL(0 To MAX_BOT_COMMANDS) As Long

This should get you started without giving away the farm.
Title: Re: 2 Questions
Post by: n00blar on January 14, 2003, 02:12 AM
Damn I love grok! He replies and then silence is heard throughout the land =P I guess they are all standing in awe of your greatness hehe =) well i'm glad to see somone (grok) is of great help!
Title: Re: 2 Questions
Post by: SiMi on January 14, 2003, 01:37 PM
damn... good job , thanks