[PHP] IRC Bot werkt maar disconnect zonder enige reden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eerst de code posten. Ik denk dat er ergens een heel klein foutje moet inzitten want hij geeft als output alles maar blijft halverwege de MOTD steken en als hij de rest weergeeft disconnect hij. (Read error: EOF from client)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?
  // General settings
  $server  = "irc.quakenet.org"; // Server
  $port    = '6667'; // Port number
  $channel = "#Killerboy"; // Channel
  $bot_nick = "KBDesign"; // Nick of the bot
  $botname = "KillerBoy Bot services"; // Real name

?>

<html>

<head>
<title>Status for <? echo $bot_nick; ?> on server <? echo $server; ?></title>
</head>

<body bgcolor="#000000" text="#FFFFFF">

<?php 

  error_reporting(63); 
  set_time_limit(0); 

  // Verbinding maken met de server voor data 
  $input     = fsockopen($server, $port, $errno, $errstr, 9999); 
  $loop      = 0; 
  $connected = 0; 
 
  while ($line = fgets($input, 512)){ 
    $el = explode(' ', $line); 
    echo $line."<br>"; 
    if( count($el) > 3){ 
    // Houd van alle gegevens alleen nickname over 
      $el_userstr = $el[0]; 
      $el_user = split('!', $el_userstr); 
      $el_user = str_replace(':', ' ', $el_user[0]); 
      // Achterhaal type bericht 
      $el_type = $el[1]; 
        
      if( $el_type == 'PRIVMSG' ){ 
        $el_channel = $el[2]; 
        $el_msg        = ''; 
        for($i=3; $i<count($el); $i++){ 
          $el_msg.=$el[$i].' '; 
        }
        echo "Bericht: $el_msg <br>"; 
      }
    }
    else if( count($el) == 2) { 
      $el_type = $el[0]; 
      $el_msg  = str_replace(':', '', $el[1]); 
    }
    // Als de server pingt, terug pongen 
    if( $el_type == 'PING' ){ 
      fputs($input,'PONG '.$el_msg."\r\n"); 
      echo "Ping? Pong!<br>"; 
    }
    // Kijken naar de loop, zonodig aanmelden 
    if( $loop == 0 ){ 
      fputs($input,"USER ".$bot_nick." 0 * :".$botname."\n");  
      fputs($input,"NICK ".$bot_nick."\n");  
      echo "Aangemeld als '$bot_nick' op server '$server'<br>"; 
    } 
    // Laat channel joinen 
    if( $el_type == 376 ){ 
      $connected = 1; 
      fputs($input,"join $channel\r\n"); 
      echo "Channel $channel gejoined<br>"; 
      fputs($input,"PRIVMSG $channel :WHEE!!!"); 
    }
    // Als er een fout optreedt stoppen 
    else if( ereg("^ERROR", $line) ){ 
      fputs($input,"quit\r\n"); 
      echo "Fout! Proces gestopt.<br>"; 
      break; 
    }
    // Als nickname al bezet is, stoppen 
    else if( $el_type == 433 ){ 
      fputs($input,"quit\r\n"); 
      echo "Nickname is al bezet. Proces gestopt.<br>"; 
      break; 
    } 
    $loop++; 
  } 
?> 


Oja, hij geeft geen enkele foutmelding, vraag dus niet om errors :)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
ping pongen.

IRC RFC

Verder kan je misschien zelf eerst even je code debuggen...

[ Voor 103% gewijzigd door whoami op 04-07-2003 16:39 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoami schreef op 04 July 2003 @ 16:38:
ping pongen.

IRC RFC

Verder kan je misschien zelf eerst even je code debuggen...
Hij pongt als er gepingt wordt. cfr regel 53-57

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ooit van een page timeout gehoord?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op 04 juli 2003 @ 16:45:
ooit van een page timeout gehoord?
cfr regel 22

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dream on ;)
hoe start je dat botje, met je browser?
pcies ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op 04 juli 2003 @ 16:49:
[...]

dream on ;)
hoe start je dat botje, met je browser?
pcies ;)
Idd, met mijn browser. Maar daarom is die set_time_limit(0); er toch? of ben ik nu zo verkeerd aan het denken

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Ik start m'n php botje met de cli versie, dat werkt een stuk beter. :P

C:\php\cli\php.exe botje.php

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tux schreef op 04 July 2003 @ 16:52:
Ik start m'n php botje met de cli versie, dat werkt een stuk beter. :P

C:\php\cli\php.exe botje.php
waar doe je dat dan? gewoon in de command prompt?

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Verwijderd schreef op 04 July 2003 @ 16:54:
[...]


waar doe je dat dan? gewoon in de command prompt?
Ja :P

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Verwijderd schreef op 04 July 2003 @ 16:51:
Idd, met mijn browser. Maar daarom is die set_time_limit(0); er toch? of ben ik nu zo verkeerd aan het denken
Die set_time_limit(0) geldt voor PHP, niet voor je browser.
Als je browser een paar minuten geen input heeft gehad, wordt 'ie het zat. en verbreekt hij de verbinding. Dat kun je niet tegengaan. Je kunt wel tegengaan dat het effect heeft op je bot met ignore_user_abort(). Het is nog verstandiger om PHP vanaf de commandline te starten.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke, ander vraagje dan misschien nu :) Ergens tussen regel 40 en 46 zou ik commands willen plaatsen zoals !uptime enzow, weet iemand hoe ik die best doe? in een aparte module of gewoon met case select of iets dergelijks

O ja, nog even melden dat mijn bot ook stopt na een tijdje als hij geen input krijgt (als er niet gechat wordt dus) (wordt intussen al gestart met de commandline)

[ Voor 29% gewijzigd door Verwijderd op 04-07-2003 17:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Niemand die mij nog kan helpen? :)

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Verwijderd schreef op 04 July 2003 @ 16:57:
O ja, nog even melden dat mijn bot ook stopt na een tijdje als hij geen input krijgt (als er niet gechat wordt dus) (wordt intussen al gestart met de commandline)
Het fgets() commando op zich heeft ook een timeout. Waarschijnlijk treedt die op en wordt je daarom uit het script gegooid.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
eborn schreef op 04 July 2003 @ 17:31:
[...]
Het fgets() commando op zich heeft ook een timeout. Waarschijnlijk treedt die op en wordt je daarom uit het script gegooid.
Quote uit de PHP.net manual:
string fgets ( resource handle [, int length])
Daar zie ik nergens een timeout staan

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 04 July 2003 @ 17:20:
Niemand die mij nog kan helpen? :)
Gelieve niet te kicken binnen 24 uur. Je topic staat in de topiclijst en is echt niet belangrijker dan alle andere topics :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Net gezien. De bot gaat van de server precies na 1 minuut van stilte. Als er dus in het hele kanaal 1 minuut niets gezegd wordt, disconnect hij. Weet iemand waar ergens ik een timeout kan toevoegen zoadat dit niet gebeurt of ergens waar hij de server zelf pingt na 50 seconden ofzo ...

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Verwijderd schreef op 04 July 2003 @ 17:33:
Quote uit de PHP.net manual:
Daar zie ik nergens een timeout staan
Kijk eens naar stream_set_timeout()

Overigens blijft PHP niet echt geschikt voor dit soort dingen. Het kan wel, maar omdat er geen support voor threading bestaat kun je gewoon veel minder dan in talen waar je wel nieuwe threads kunt starten.

[ Voor 30% gewijzigd door eborn op 04-07-2003 19:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

alsof je threads voor een botje nodig hebt...

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Verwijderd schreef op 04 juli 2003 @ 19:34:
alsof je threads voor een botje nodig hebt...
Ja. Ik heb een bot geschreven met een Windows interface en als je niet wilt dat je UI van je interface niet meer 'responsive' is, dan zal je threads moeten gebruiken...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Verwijderd schreef op 04 July 2003 @ 19:34:
alsof je threads voor een botje nodig hebt...
Niet nodig, maar het maakt het allemaal wel een stuk simpeler. Vooral omdat je nu in PHP altijd met een smerige while(fgets()) constructie (of vergelijkbaar) werkt.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 04 July 2003 @ 18:42:
Net gezien. De bot gaat van de server precies na 1 minuut van stilte. Als er dus in het hele kanaal 1 minuut niets gezegd wordt, disconnect hij. Weet iemand waar ergens ik een timeout kan toevoegen zoadat dit niet gebeurt of ergens waar hij de server zelf pingt na 50 seconden ofzo ...
ik heb die code van jou eens uitgeprobeerd:

ErkBot on @#Erkens
ErkBot using Arethusa.tweakers.net Tweakers.net / Fok.nl IRC server
ErkBot has been idle 2hrs 47mins 7secs, signed on Fri Jul 04 17:51:19

ligt dus aan jouw php settings denk ik dan, code is stabiel en blijft online, ook als er niets gezegt wordt ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmz, zit de fout dan ergens in de php.ini ofzo want bij mij blijft hij altijd maar 1 minuut online als iedereen idle is.

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11:40
Vanuit de webbrowser closet hij bij mij na 1 minuut joinen de connectie :) Zal wel aan mijn config liggen, maar wat kan je nu eigenlijk met zoiets?

|>


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voorlopig kan je er niet zoveel mee, het is eigenlijk meer een oefening die ik zelf wil proberen, maar voorlopig vlot het niet echt. Op http://nopaste.php-q.net/1115 kan je de huidige code vinden. Daarmee heb ik ook nog enkele probleempjes. Onder andere dat na 1 minuut iedereen idle de bot disconnect, en ook dat hij de files niet include als ik een command aanroep, hij geeft enkel de echo in de console dat er een bericht ontvangen is.

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Simon schreef op 04 July 2003 @ 21:32:
Zal wel aan mijn config liggen, maar wat kan je nu eigenlijk met zoiets?
Ik heb ooit eens zo'n scriptje geschreven om door gebruikers een vaste bot aan te vragen, ala Q op QuakeNet. Op zich werkt dat wel aardig, maar echt stabiel vond ik het persoonlijk niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens, _/-\o_ _/-\o_

Bedankt voor de hulp. Als iemand de code wil, vraag gerust :)
CopyRighted by: Erkens en Molshoop :+

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Ik ga vast niet erg behulpzaam gevonden worden, maar ach :P
PHP is niet echt een geschikte taal voor dit soort dingen. Het is te gelimiteerd. Beter gebruik je Perl hiervoor. Lijkt qua syntax wel een beetje op PHP (eigenlijk andersom, php syntax is gebaseerd op perl en een paar andere talen), je kunt er veel meer mee, en het is gemaakt voor taken die langer mogen duren dan 30sec ;)

Overigens, wat je ook doet: gebruik aub geen "!command", die zijn ontzettend irritant :P
Gebruik liever "botnaam: command". (In perl perfect implementeerbaar met regexp ;))

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

CyBeR schreef op 05 juli 2003 @ 13:29:
Ik ga vast niet erg behulpzaam gevonden worden, maar ach :P
PHP is niet echt een geschikte taal voor dit soort dingen. Het is te gelimiteerd. Beter gebruik je Perl hiervoor. Lijkt qua syntax wel een beetje op PHP (eigenlijk andersom, php syntax is gebaseerd op perl en een paar andere talen), je kunt er veel meer mee, en het is gemaakt voor taken die langer mogen duren dan 30sec ;)
mja, maakt opzich niets uit als je de timeout instelt, maar waarom zou je een andere taal gaan leren als dat niet nodig is?
Tuurlijk, php is gemaakt voor webdoeleinden, perl meer voor scripting.
Zelf zou ik voor een java bot gaan.
Overigens, wat je ook doet: gebruik aub geen "!command", die zijn ontzettend irritant :P
Gebruik liever "botnaam: command". (In perl perfect implementeerbaar met regexp ;))
helemaal mee eens, had je gisteravond eens in #bottest moeten wezen, diverse bots die op hetzelfde commando reageren :D
maar regexp kunnen ook in php hoor, alsmede in java :P
Pagina: 1