Author | Message | Time |
---|---|---|
turtles | Has anyone had trouble getting messages to to query properly? I have this problem solved, but im hoping someone would have a more flexible script for querying messages and then sending them. One of the Main problems was that Doevents kept processing the same command twice.. i cant leave out Doevents cuz if i dont have it. the message wont send until EVERYTHING is done processing then it would send. and if u have more the 5 messages in query . instead of leaking out one packet send at a time despite a timer delay. it would send all 5 at same time and cause a flood out =) As i have said b4. i have this problem solved. just curious about who else had this minor problem and what kinda code they used. plus. i didnt see a post of this type within the last 40 topics | May 8, 2003, 3:50 PM |
Yoni | What problem were you having? Your message was not clear. Keep in mind not everyone here uses VB (I conclude you're using VB because you're talking about "DoEvents"). Also, there is not one correct way to do something - there are many. Not everyone writes code in the same style as you. For example, you use DoEvents. It is possible (and advisable, in most situations) to refrain from using this statement/function at all - and it is certainly possible to write a bot without it. You say you have this problem (which I'm not yet sure what it is) solved, but are hoping someone has a better way to do it. Better than what? You didn't explain how you solved it, nor posted any code. | May 8, 2003, 4:15 PM |
turtles | since doevents in my code causes some commands to process twice. i used a stopper at the begginning of Case &HF where it checks the previous data to match with the new one. if the new one was a spawn brought on by doevents. it cancels it out. Doevents for some reason pulls the same information out of winsock a second time. and another reason why i use doevents is for my delay timer. if i just use sleep. the bot gui will become inaccessible during the wait time inside the do loop the code serves that function + it works ok as anti abuse. so wont have a lamer spamming the same command. erm. yoni. so what do u suggest i use other then doevents. im fairly new at vB and im learning as i go along. and got any other suggestion other then a do loop / sleep timer ? | May 8, 2003, 4:54 PM |
Yoni | Don't use Sleep in VB. Actually, don't use Sleep. | May 8, 2003, 5:26 PM |
turtles | [quote author=Yoni link=board=17;threadid=1256;start=0#msg9416 date=1052414799] Don't use Sleep in VB. Actually, don't use Sleep. [/quote] erm. so do loop should be used. got that down already. kudos. | May 8, 2003, 5:29 PM |
tA-Kane | [quote author=turtles link=board=17;threadid=1256;start=0#msg9411 date=1052413930] and wtf is up with the karma.. i got +0/-2 . i bet Raza did that to me. ;\ .. b¡tch.. -_- [/quote]MrRaza couldn't do it more than once in a single 12 hour period. Oh, and by the way, it's not really that nice to bring topics back from the dead with your first post on the dead topic being "AHAHAHA I BROUGHT THIS TOPIC BACK" or something of that nature. Also, you should be a whole lot more clear on what you're trying to say. To me, you have yet to clearly state what your problem is. [quote author=turtles link=board=17;threadid=1256;start=0#msg9418 date=1052414977] [quote author=Yoni link=board=17;threadid=1256;start=0#msg9416 date=1052414799] Don't use Sleep in VB. Actually, don't use Sleep. [/quote] erm. so do loop should be used. got that down already. kudos. [/quote]Do ... Loop should only be used when appropriate. Are you sure it's appropriate? Maybe if you were to clearly state what you are trying to do, and perhaps post some code to how you're doing it, people here may be more forthcoming with help. | May 8, 2003, 9:07 PM |
turtles | Scenario: Sent a message 5 times in less then a second. Each has a delay of 3 seconds each. Problem1: Without DoEvents the bot will wait 15 seconds. Then it will spam 5 sends and flood out. Problem2: With DoEvents the bot will send one message every three seconds but... it sends more then 5 sends.. it processed one of the commands more then once. the first one i believe. | May 8, 2003, 9:20 PM |
Yoni | Pseudo-VB-code: [code] Private Sub MessageDelay_Timer() If MessageQueue.Empty Then MessageDelay.Enabled = False Else Call BinaryBot.Talk(MessageQueue.Pop) End If End Sub Private Sub OnMessage(ByVal Message As String) If MessageDelay.Enabled Then Call MessageQueue.Push(Message) Else Call BinaryBot.Talk(Message) End If MessageDelay.Enabled = True End Sub ' If you wish to use DoEvents, uncomment this: 'Private Sub MagicButton_Click() ' DoEvents 'End Sub [/code] | May 8, 2003, 9:28 PM |
tA-Kane | [quote author=turtles link=board=17;threadid=1256;start=0#msg9447 date=1052428859] Scenario: Sent a message 5 times in less then a second. Each has a delay of 3 seconds each. Problem1: Without DoEvents the bot will wait 15 seconds. Then it will spam 5 sends and flood out. Problem2: With DoEvents the bot will send one message every three seconds but... it sends more then 5 sends.. it processed one of the commands more then once. the first one i believe. [/quote]I beleive DoEvents causes VB to fire any pending events. An alternative way to do this is to create a timer and a string array. Whenever you need to send a string, you add the string to the array. Then, whenever the timer fires, you can then send a string from the array and then remove it. There've been plenty of topics on the forum regarding Timer problems and such, so do a search for "timer" to find a way around them. | May 8, 2003, 9:30 PM |
Camel | chat.bas: [code]Option Explicit Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Public LastChat As Long, TimerID As Long Dim SendBuf As String, LastChatLen As Integer Public Const AntiIdleTimerID As Long = 0 Public Sub DelQueue() SendBuf = "" If TimerID Then KillTimer frmMain.hwnd, 1 TimerID = 0 End If LastChat = 0 If frmMain.SCK.State = sckConnected Then SendText "queue flushed" End Sub Private Sub CheckSend(Optional ForceTimerUse As Long = 0) Dim delay As Long #If DEBUG_ Then delay = 0 #Else delay = LastChatLen 'CVI(Mid(sendbuf, 3, 2)) delay = delay * 15 + 2700 #End If delay = (delay + LastChat) - GetTickCount If delay < 0 Then delay = 0 delay = delay + ForceTimerUse If delay > 0 Then If TimerID <> 0 Then KillTimer frmMain.hwnd, TimerID TimerID = SetTimer(frmMain.hwnd, 2, delay, AddressOf SendQueue) Else SendQueue End If End Sub Public Sub SendQueue() If TimerID <> 0 Then 'debug.assert false KillTimer frmMain.hwnd, TimerID '1 TimerID = 0 End If If Not frmMain.SendChatOK Then 'if its disconnected, clear buffer If frmMain.SCK.State = sckConnected Then CheckSend 1000 'start another timer Else End If Else If Len(SendBuf) > 0 Then Dim plen As Integer plen = CVI(Mid(SendBuf, 3, 2)) LastChat = GetTickCount LastChatLen = plen - 4 If frmMain.SCK.State = sckConnected Then 'Dim strText As String 'strText = Mid(SendBuf, 5, plen - 5) 'strText = Left(strText, InStr(1, strText, Chr(0)) - 1) On Error GoTo error frmMain.SCK.SendData Left(SendBuf, plen) If Mid(SendBuf, 5, 1) <> "/" Then UserChats MyName, Mid(SendBuf, 5, plen - 5), GetFlags(MyName, MyFlags) 'frmMain.Script.Run("GetFlags", MyName, MyFlags) Else 'Addtext ColInfo, "SENDING COMMAND: " & Mid(SendBuf, 5, plen - 5) & vbCrLf, True End If SendBuf = Right(SendBuf, Len(SendBuf) - plen) ResetAntiIdle Else Debug.Assert False SendBuf = "" End If End If If Len(SendBuf) > 0 Then CheckSend End If Exit Sub error: Addtext ColAnError, "Error in SendQueue(): " & ERR.Number & " - " & ERR.Description & vbCrLf, True End Sub Public Sub SendText(strText As String, Optional WhisperBack As String = "", Optional ForceTimerUse As Long, Optional DontChange As Boolean = False, Optional SkipUTF8Encode As Boolean = False) Const m = 200 #If DEBUG_ <> 0 Then If InStr(strText, Chr(0)) <> 0 Then Debug.Assert False #End If If Not SkipUTF8Encode Then strText = UTF8Encode(strText) If DontChange Then GoTo sendnow If InStr(strText, "%ver%") Then strText = Replace(strText, "%ver%", version) If InStr(strText, "%running%") Then strText = Replace(strText, "%running%", GetTime(GetTickCount - StartTime)) If InStr(strText, "%connected%") Then strText = Replace(strText, "%connected%", GetTime(GetTickCount - LogTime)) If InStr(strText, "%uptime%") Then strText = Replace(strText, "%uptime%", GetTime(GetTickCount)) strText = Replace(strText, "%channel%", Channel) strText = Replace(strText, "%server%", frmSetup.SAddr) If InStr(strText, "%mp3%") Then strText = Replace(strText, "%mp3%", winamp.GetSongTitle(False)) If InStr(strText, "%mp3full%") Then strText = Replace(strText, "%mp3full%", winamp.GetSongTitle(True)) If InStr(strText, "%cpu%") Then strText = Replace(strText, "%cpu%", GetCPUInfo) If (WhisperBack = MyName) And (MyName <> "") Then Addtext D2LtYellow, strText & vbCrLf, True Exit Sub End If If (Left(strText, 1) <> "/") And (WhisperBack <> "") Then strText = "/m " & WhisperBack & " " & strText End If Dim s() As String s = Split(strText, " ", 2) If Not MyFlags And 2 Then Select Case s(0) Case "/kick", "/ban" Addtext ColAnError, "WARNING: Supressing command due to lack of ops (use /quote to override): " & strText & vbCrLf, True Exit Sub End Select End If Select Case GetID Case "VD2D", "PX2D" If (Left(strText, 1) = "/") And (InStr(1, strText, " ") > 0) Then Dim Name As String Name = s(1) If InStr(1, Name, " ") Then Name = Left(Name, InStr(1, Name, " ") - 1) If (InStr(Name, "*") = 0) Then Select Case s(0) Case "/w", "/m", "/msg", "/whisper", "/whois", "/kick", "/ban", "/unban", "/designate", "/ignore", "/squelch", "/unignore", "/unsquelch" strText = s(0) & " *" & s(1) End Select End If End If End Select sendnow: SendBuf = SendBuf & MakePacket(&HE, Left(strText, m) & Chr(0)) CheckSend ForceTimerUse End Sub Public Sub ResetAntiIdle() KillTimer frmMain.hwnd, AntiIdleTimerID SetTimer frmMain.hwnd, AntiIdleTimerID, frmSetup.IdleTime, AddressOf AntiIdle End Sub Public Sub AntiIdle() If frmSetup.Idle <> "" Then SendText frmSetup.Idle End Sub[/code] | May 9, 2003, 12:18 AM |
turtles | [quote author=tA-Kane link=board=17;threadid=1256;start=0#msg9450 date=1052429449] [quote author=turtles link=board=17;threadid=1256;start=0#msg9447 date=1052428859] Scenario: Sent a message 5 times in less then a second. Each has a delay of 3 seconds each. Problem1: Without DoEvents the bot will wait 15 seconds. Then it will spam 5 sends and flood out. Problem2: With DoEvents the bot will send one message every three seconds but... it sends more then 5 sends.. it processed one of the commands more then once. the first one i believe. [/quote]I beleive DoEvents causes VB to fire any pending events. An alternative way to do this is to create a timer and a string array. Whenever you need to send a string, you add the string to the array. Then, whenever the timer fires, you can then send a string from the array and then remove it. There've been plenty of topics on the forum regarding Timer problems and such, so do a search for "timer" to find a way around them. [/quote] i used search and looked for timer. many of the posts referred to setTimer / killTimer does setTimer work in milliseconds or seconds ? | May 9, 2003, 2:37 AM |
tA-Kane | [quote author=turtles link=board=17;threadid=1256;start=0#msg9515 date=1052447870]does setTimer work in milliseconds or seconds ?[/quote]I don't know, look it up on MSN.net. | May 9, 2003, 5:54 AM |
Camel | milliseconds why dont you just try it? real men don't need instructions...they just look at the picture :) | May 9, 2003, 6:03 AM |
turtles | [quote author=Camel link=board=17;threadid=1256;start=0#msg9535 date=1052460186] milliseconds why dont you just try it? real men don't need instructions...they just look at the picture :) [/quote] im just lazy. :-X i work on my bot whenever i need to keep my mind off of things... ;D | May 9, 2003, 5:00 PM |