| | 
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
hy i'm new with sockopen etc.. i try to make a script that connects to www.github.com but it says not connected after i try gitpush so whats wrong? 
alias gitpush { 
  sockopen gitpush http://github.com 80
}
on *:SOCKOPEN:gitpush: {
  sockwrite -n $sockname GET /svdermant/ HTTP/1.0
}
on *:SOCKREAD:gitpush : {
  sockread %gitpush
}
here that is my error.. * /sockwrite: 'gitpush' not connected (line 6, remote.ini) |  |  |  
| 
| 
|  |  
| 
Joined:  Jul 2006 Posts: 4,032 Hoopy frood |  
|   Hoopy frood Joined:  Jul 2006 Posts: 4,032 | 
You get this error because your socket did not connect successfully, and the reason why is because the name of the server here is github.com, http or https are just the protocol, you need to use "/sockopen gitpush github.com 80" at the very least.Inside the on sockopen event, you can use $sockerr to know if the connection was successful.
 Inside the on sockread event, you're reading into a global variable, you should probably make that variable local by using "var %gitpush" before /sockread %gitpush, and if you're looking to read line by line, you should check that data was read by checking $sockbr. if $sockbr is 0, no data was read and you should stop doing anything with a /return or something.
 
 #mircscripting @ irc.swiftirc.net == the best mIRC help channel
 |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
I've tried it this way, but mirc returns a 408 error request timeout. 
alias Example {
  /sockopen Example github.com 80
  ; Check if there was an error.
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
}
; Listen for the on SOCKOPEN event.
on *:SOCKOPEN:Example:{
  ; Write a GET request.
  sockwrite -nt $sockname GET / HTTP/1.1
  ; Check if there was an error.
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
}
; Listen for the on SOCKREAD event.
on *:SOCKREAD:Example:{
  ; Check if there was an error.
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
  ; Create a local variable to hold the data.
  var %i
  ; Read the data waiting into the local variable.
  sockread %i
  ; Print data read.
  echo -ag Data = %i
  %a = %i
}
Output from mirc: 
Data = HTTP/1.1 408 Request Time-out
Data = Content-length: 110
Data = Cache-Control: no-cache
Data = Connection: close
Data = Content-Type: text/html
Data =
Data = <html><body><h1>408 Request Time-out</h1>
Data = Your browser didn't send a complete request in time.
Data = </body></html>
If I open github.com with my browser e.g. Firefox then I don't get a 408 error so why with mirc? |  |  |  
| 
| 
|  |  
| 
Joined:  Jul 2006 Posts: 4,032 Hoopy frood |  
|   Hoopy frood Joined:  Jul 2006 Posts: 4,032 | 
That's because your browser speaks the http protocol language a bit more in depth than your script.
 Your request is timing out because you're not sending an empty crlf at the end, try sending it.
 
 Note and tips: typically people /sockclose the socket name before attempting to /sockopen as that will create an error if the socket name is already in use, $sockerr should be checked prior any /sockwrite inside on sockopen, not after.
 Inside on sockread, in practice people check $sockerr once before any /sockread, but won't check $sockerr again if they use /sockread again later on.
 The help file says that $sockerr should be checked after any socket command and before processing events, but in practice scripts are typically only checking $sockerr before processing events, there are no known cases of $sockerr being UNset before executing a command and set after.
 You can get more info about socket error with $sock(socketname).wsmsg
 
 Try this
 
 
 alias Example {sockclose example
 sockopen Example github.com 80
 
 ; Check if there was an error.
 ; in practice this check is not required, if anyone know how to get $sockerr set after executing a /sockopen command that did not result in a script error, let me know
 if ($sockerr) {
 echo -ag There was an error: $sockerr
 halt
 }
 }
 
 ; Listen for the on SOCKOPEN event.
 on *:SOCKOPEN:Example:{
 if ($sockerr) {
 echo -ag there was an error: $sockerr : $sock($sockname).wsmsg
 ; we usually /return event, not halt them unless you specifically want to halt, when we want to stop processing)
 return
 }
 
 ; Write a GET request.
 sockwrite -nt $sockname GET / HTTP/1.1
 sockwrite -n $sockname
 ; Check if there was an error. again this check is not required in practice, same as above
 if ($sockerr) {
 echo -ag There was an error: $sockerr
 halt
 }
 }
 
 ; Listen for the on SOCKREAD event.
 on *:SOCKREAD:Example:{
 ; Check if there was an error.
 if ($sockerr) {
 echo -ag There was an error: $sockerr
 halt
 }
 
 ; Create a local variable to hold the data.
 var %i
 
 ; Read exactly one line from the received buffer, the data being read is put into the local variable.
 sockread %i
 ;if data was received but does not contain a new line, sockread won't read anything and $sockbr is 0, you need to stop processing and wait for the event to trigger again with more data, hopefully with a newline in it.
 if ($sockbr == 0) return
 ; if a line has been found, Print it
 echo -ag Data = %i
 ;not sure what you're trying to do with %a = %i here.
 %a = %i
 }
 
 Note that reading line by line like this will not read the last line if it does not end with a line ending sequence (crlf or lf), in this case you can either use the content length header to figure out if you need to read by forcing the data to be read with /sockread -f, or if your socket is not being kept alive and is closing itself after the request is done, you can just read with sockread -f from the on sockclose event.
 
 #mircscripting @ irc.swiftirc.net == the best mIRC help channel
 |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
thanks for you now ... it works at last i want to get the latest commit from my projekt but i dont know the html tags or so.. my code is now: 
alias Example {
  sockclose example
  sockopen -e Example github.com 443
  ; Check if there was an error.
  ; in practice this check is not required, if anyone know how to get $sockerr set after executing a /sockopen command that did not result in a script error, let me know
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
}
; Listen for the on SOCKOPEN event.
on *:SOCKOPEN:Example:{
  if ($sockerr) {
    echo -ag there was an error: $sockerr : $sock($sockname).wsmsg
    ; we usually /return event, not halt them unless you specifically want to halt, when we want to stop processing)
    return
  }
  ; Write a GET request.
  sockwrite -nt $sockname GET /svdermant/MinecraftBot/commits/master HTTP/1.1
  sockwrite -n $sockname Host: github.com
  sockwrite -nt $sockname $crlf
  ; Check if there was an error. again this check is not required in practice, same as above
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
}
; Listen for the on SOCKREAD event.
on *:SOCKREAD:Example:{
  ; Check if there was an error.
  if ($sockerr) {
    echo -ag There was an error: $sockerr
    halt
  }
  ; Create a local variable to hold the data.
  set %gitpush
  set %c >
  set %p </p>
  ; Read exactly one line from the received buffer, the data being read is put into the local variable.
  sockread %gitpush
  ;if data was received but does not contain a new line, sockread won't read anything and $sockbr is 0, you need to stop processing and wait for the event to trigger again with more data, hopefully with a newline in it.
  if ($sockbr == 0) return
  ; if a line has been found, Print it
  echo -ag Data = %gitpush
  if (*%c* isin %gitpush) && (*%p* isin %gitpush { set %git %gitpush }
  ;;write info.txt $noHTML(%gitpush)
  echo -a %git
  ;not sure what you're trying to do with %a = %i here.
}
The alias is supposed to work in such a way that when a new commit is made, I always get the latest one displayed... but I don't know how? |  |  |  
| 
| 
|  |  
| 
Joined:  Feb 2015 Posts: 132 Vogon poet |  
|   Vogon poet Joined:  Feb 2015 Posts: 132 | 
Would you consider using SReject's JSON-For-mIRC? This works: 
; First type /getJFM to load SReject's JSON-4-mIRC
; Afterwards you can type /getInfo as many times as you like
alias getInfo {
  var %url = https://api.github.com/repos/svdermant/MinecraftBot/commits/master
  var %jsonname = lcommit
  JSONOPEN -u %jsonname %url
  if ($json(%jsonname).httpStatus == 200) {
    echo -ag Latest commit information:
    echo -ag Author: $json(%jsonname,commit,author,name).value - Date: $json(%jsonname,commit,author,date).value
    echo -ag Additions: $json(%jsonname,stats,additions).value - Deletions: $json(%jsonname,stats,deletions).value
    echo -ag Commit message: $json(%jsonname,commit,message).value
  }
}
alias getJFM {
  ; sha-512 of JSON For mIRC.mrc v1.0.4000
  var %sha512-1 b29de8c964b002d089fa030a9a5357e3c737f17cd16309c0fa82142120a590db2223d4703cafe97f37b65de170bb4d9dbf7bb508f4052a47a2127fc74c10a6d6
  ; group enabled hash
  var %sha512-2 183153806705c99fce8fb3003ea7e5522e9f67c40b3e064280ad83111e3d8f92b4cfae106b8827a9d99c2377c32d6d6892fe878a027bcaea24a466450cfeead8
  ; check if JSON For mIRC is loaded
  if ($isalias(JSONVersion)) {
    ; script is loaded, but what version?
    var %file $isalias(JSONVersion).fname
    if (!$istok(%sha512-1 %sha512-2,$sha512(%file,2),32)) {
      echo -ag Unloading $JSONVersion ...
      .unload -rs $qt(%file) | .timer -mio 1 0 getJFM 
    }
    else echo -ag JFM already loaded!
  }
  elseif ($1 isnum) {
    if ($urlget($1).state == fail) { echo 4 -ag Downloading JSON For mIRC failed. Are you connected to the internet? | halt }
    elseif ($zip($urlget($1).target,eo,scripts)) { 
      var %file $qt($findfile(scripts\JSON-For-Mirc-1.0.4000,JSON For mIRC.mrc,1))
      if ($sha512(%file,2) == %sha512-1) echo -ag Loading JSON For mIRC ver1.0.4000 | .load -rs %file
      else echo 4 -ag Wrong sha512 hash for %file $+ !      
      .remove $urlget($1).target
    }
    else { echo 4 -ag Something went wrong unzipping $:t($urlget($1).target) }
  }
  else { 
    var %url https://github.com/SReject/JSON-For-Mirc/archive/v1.0.4000.zip
    var %target JFM.zip
    echo -ag Obtaining JSON For mIRC...
    return $urlget(%url,gf,%target,getJFM)
  }
}
Latest commit information:Author: svdermant - Date: 2023-06-11T12:16:17Z
 Additions: 2 - Deletions: 1
 Commit message: Update README.mdHinweis zur Ramangabe...
Note: This uses an older version of JFM. Might want to use a newer version. 
 GNU Terry Pratchett - Looking for a mIRC help channel -> Check #mircscripting @ irc.swiftirc.net
 |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
if that works that is what i want i dont need to selfcoded..
 Question if i time /getInfo i always get the latest commit ?
 Wich params can i add after the variable %jsonname in $json(%jsonname,commit,author,name).value ?
 Does a list exist?
 |  |  |  
| 
| 
|  |  
| 
Joined:  Feb 2015 Posts: 132 Vogon poet |  
|   Vogon poet Joined:  Feb 2015 Posts: 132 | 
 GNU Terry Pratchett - Looking for a mIRC help channel -> Check #mircscripting @ irc.swiftirc.net
 |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2010 Posts: 964 Hoopy frood |  
|   Hoopy frood Joined:  Apr 2010 Posts: 964 | 
I recommend leveraging the current stable release v2.0.4 over the 1.x series. |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
Would you consider using SReject's JSON-For-mIRC? This works: [code] ; First type /getJFM to load SReject's JSON-4-mIRC ; Afterwards you can type /getInfo as many times as you like alias getInfo {   var %url = https://api.github.com/repos/svdermant/MinecraftBot/commits/master   var %jsonname = lcommit   JSONOPEN -u %jsonname %url   if ($json(%jsonname).httpStatus == 200) {     echo -ag Latest commit information:     echo -ag Author: $json(%jsonname,commit,author,name).value - Date: $json(%jsonname,commit,author,date).value     echo -ag Additions: $json(%jsonname,stats,additions).value - Deletions: $json(%jsonname,stats,deletions).value     echo -ag Commit message: $json(%jsonname,commit,message).value   } }I have found an issue with the code but i dont know why is this so... i test this code with my github changes  first time i type /getinfo irs correct... Than i take changes on my github after it i type /getinfo - it shows always the old changes.. |  |  |  
| 
| 
|  |  
| 
Joined:  Apr 2022 Posts: 17 Ameglian cow |  
| OP   Ameglian cow Joined:  Apr 2022 Posts: 17 | 
the same effect when i using version 2.0.4 stable
 i get always not the latest changes from my github after /getinfo...
 
 only when i change the varname of the %jsonname = lcommit to another name
 
 But why is this so?
 |  |  |  | 
 |