Een PHP IRC Bot

Door DaeDaluz , 19 jaar geleden, 4.219x bekeken

Ik was een beetje aan het knutselen met deze irc bot, toen ik een topic las over een php irc bot, dus leek me een goed idee om deze dan maar is te posten.

Dit script moet je via commandline aanroepen, dus NIET via je browser.

In de bot zitten een aantal events, waarop je reacties kan toevoegen. Hij reageerd niet op alle events, maar als je dit script begrijpt, moet je hem ook wel op die events kunnen laten reageren.

Gesponsorde koppelingen

PHP script bestanden

  1. een-php-irc-bot

 

Er zijn 31 reacties op 'Een php irc bot'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Paul K
Paul K
19 jaar geleden
 
0 +1 -0 -1
Ik snap het wel hoe ik het moet gebruiken.
Maar anderen misschien niet, misschien iets meer uitleg over het opstarten via command line?
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
C:\path\naar\php.exe c:/path/naar/script/bot.php

In je cmd invoeren, en enter drukken.
Ilja
Ilja
19 jaar geleden
 
0 +1 -0 -1
HIj doet het niet -_- :S



Warning: fsockopen(): unable to connect to irc.chat4all.com:6667 (Kan geen verbi
nding maken omdat de doelcomputer de verbinding actief heeft geweigerd.
) in C:\wamp\php\class.php on line 33

Fatal error: Could not connect to: irc.chat4all.com on port 6667 in C:\wamp\php\
class.php on line 148
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
Dat kan komen omdat het .org ipv .com moet zijn?

-edit:

Ik heb geen idee waarom die error komt, heb er zelf geen last van, heeft waarschijnlijk te maken met server instellingen. Ik ga opzoek.

- edit 2:

Lijkt erop dat het te maken heeft met een clientside instelling, het is iig een windows error die ook op andere software voorkomt. Draai je een firewall of heb je een router?
Ilja
Ilja
19 jaar geleden
 
0 +1 -0 -1
Dat maakt niet uit .com doet het ook btw .org geeft de zelfde error...
- SanThe -
- SanThe -
19 jaar geleden
 
0 +1 -0 -1
En als die is gestart? Wat kan/moet je dan doen?
Winston Smith
Winston Smith
19 jaar geleden
 
0 +1 -0 -1
Die error kan te maken hebben met het verschil tussen /r/n en /r of /n. Komt wel vaker voor, dus Googlen zal wel helpen denk ik.

edit:
Heb trouwens niet gekeken of je wel /r/n gebruik maakt in je script. Verder gebruik je nog PHP4 om je klasse op maken?
Reinhout
reinhout
19 jaar geleden
 
0 +1 -0 -1
Eeh... waarvoor dient dit script eigenlijk?
Tom
Tom
19 jaar geleden
 
0 +1 -0 -1
Misschien is een kleine handleiding een idee.. :)
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
@Kasper, in send() wordt er \r\n toegevoegd achter de versturen data, maar de error is clientsided, dus komt niet door \r\n, sowieso gebruik je die niet bij het openen van de socket.

@SanThe, het idee van een bot is dat je opzich niets hoeft te doen, af gezien van commando's uitvoeren op irc. Dus zelf het kanaal joinen, met de naam die je als admin hebt ingesteld. en als je dan zegt '!say hoi' dan zegt je bot dat. Er zitten nog geen ingewikkelde commando's in, mag je zelf doen ^^.

@reinhout, het dient nergens voor, maar je kan er een irc bot mee maken/draaien.

@Tom, in het voorbeeld script, worden commando's toegevoegd, je kan er zelf ook toevoegen. In het voorbeeldscript staan genoeg regels met voorbeelden van commando's.

Ik wil wel duidelijk maken dit dit script vooral bedoeld is voor mensen die bekend zijn met IRC, als je toch nooit op IRC zit heeft zo'n bot ook geen nut.
Rudie dirkx
rudie dirkx
19 jaar geleden
 
0 +1 -0 -1
Waarom moet je script aanroepen via CLI? Waarom niet gewoon browser? Wat is het verschil? Ik weet het al: niks.
Als je in browser aanroept kan je nog beetje output volgen enzo.. Wel lache.

Vind het een geweldig script! Je kan class nog een stuk uitbreiden zodat je echt hele bot kan maken met paar simpele cmds! Geweldig begin!

Ik ga er sowieso iets leuks mee doen :)

Mzl
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
Van mij mag je het via de browser aanroepen, maar er wordt pas data geoutput naar de browser als het script is afgerond. Je kan natuurlijk met flush() gaan werken, maar al met al is het 'lelijk' om het via een browser te doen.

Verder is de output makkelijker te volgen via CLI oO

Veel succes met het leuks doen =D
Joeri
Joeri
19 jaar geleden
 
0 +1 -0 -1
Mooi script!! Zou inderdaad voor velen onder ons wel handig zijn wat meer uitleg te geven bij het script of de classe. Bij mij werkt het alvast prima zowel via command als via de browser, maar vind het beter via CLI.

Mooie Classe, proper en duidelijk opgebouwd al is het PHP4.

Grtz.
Rudie dirkx
rudie dirkx
19 jaar geleden
 
0 +1 -0 -1
Snap trouwens een dingetje niet... In functie JPProcess:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

    function JPProcess ($val, $key) {
        if (!empty($val['chan'])) {
            if (is_array($val['chan'])) {
                if (in_array_i($chan, $val['chan'])) {
                    $chan_s = true;
                }
else {
                    $chan_s = false;
                }
            }
elseif (strtoupper($val['chan']) == strtoupper($chan)) {
                $chan_s = true;
            }
else {
                $chan_s = false;
            }
        }
else {
            $chan_s = true;
        }


?>


Waar komt $chan vandaan? Moet dat $key zijn?

Heb zelf nog een paar dingen veranderd. Eigenlijk vanzelfsprekend.
* CONFIG['chan'] is nu een array met kanalen waar ie naartoe moet als ie opstart.
* CONFIG['admin'] is een array met admins.
* buffer['last_caller'] is een array met ['nick'] en ['host'] van laatste persoon die een cmd heeft aangeroepen van bot. (dus priv msg)

Heb nog wel wat meer gemaakt, maar is erg specifiek.
Misschien kan je ^ daar iets mee.

Btw over de output. Ik draai het script op linux bak en gewoon in browser. De output interesseert me niet. Alles wat ik 'output' schrijf ik naar een bestand. Dat bestand volg ik met tail -f via tunnel. Dus kan de log maken en live volgen. Dan maakt het niet uit waar je het script aanroept. Details.
Leo
Leo
19 jaar geleden
 
0 +1 -0 -1
Hallo,

Ik gebruik een geregistreerde nick voor de bot,
maar hoe kan ik nu het /ns identify commando laten sturen bij het inloggen ?
Ik snap er even niks meer van nu.

Hoor het graag van jullie.
Leo.
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
@Leo, in de methode perform() zet je

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$this
->msg('nickserv', 'identify blaat');
?>


@cervetti, geen idee waarom daar $chan staat, maar er hoort idd $key te staan. Leuk om te zien dat je er wat mee kan :)
Leo
Leo
19 jaar geleden
 
0 +1 -0 -1
thnx hij doet het !!
Cake Masher
Cake Masher
19 jaar geleden
 
0 +1 -0 -1
Hoe AUTH ik deze bot?
ik heb al een accound.. maar ik kan de bot niet laten inloggen..
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
Inloggen op de services van de server gaat precies hetzelfde als voor de client, een bericht versturen naar de service die het inloggen afhandeld, zoals ik hierboven voor nickserv laat zien.
Cake Masher
Cake Masher
19 jaar geleden
 
0 +1 -0 -1
lukt niet,
Ik heb ook een eige IRC bot.. daar wil het ook niet op :S

ik heb daar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
fputs($con['socket'], "privmsg Q@CServe.quakenet.org AUTH GSW (pass)");
fputs($con['socket'], "msg Q@CServe.quakenet.org AUTH GSW (pass)");
?>

bij msg staat er: Unknown command SG
bij privmsg staat er: Unknown command GSW..
klopt dus niet :S
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
fputs($con['socket'], "privmsg Q@CServe.quakenet.org: AUTH GSW (pass)");
?>


Probeer het is zo?
Laurens
Laurens
19 jaar geleden
 
0 +1 -0 -1
Hoe kan je hem laten reconnecten op disconnect?
trouwens geweldig script :D
DaeDaluz
DaeDaluz
19 jaar geleden
 
0 +1 -0 -1
Bedankt, en je kan onder de while in het voorbeeld script een nieuwe while plaatsen.

Of je past de connected() methode aan dat die geen false returned, maar opnieuw connect.

Dit belemmert je wel in het stoppen van de bot, dus je zal nog een extra controle moeten inbouwen zodat ook echt stopt als je !quit doet.
Ilja
Ilja
19 jaar geleden
 
0 +1 -0 -1
Ik heb hem toch nog aan de praat gekregen :D.
Ik probeer eens wat te prutsen maar...
Al gouw heb ik het probleem dat ik voor 1 command bijv !test
dat hij dan een paar regels naar het kanaal stuurd.

Hoe kan ik er voor zorgen dat dit wel kan?

Ilja
Ilja
Ilja
19 jaar geleden
 
0 +1 -0 -1
En hoe kan ik een adres van iemand opvragen?
Robert
robert
18 jaar geleden
 
0 +1 -0 -1
als ik hem oproep via cmd dan krijg ik gwn kladblok met het script er in wat nu?
Ilja
Ilja
18 jaar geleden
 
0 +1 -0 -1
je moet wel typen in cmd c:/pad/naar/php.exe c:/pad/naar/bot.php

:)
Wesley
Wesley
18 jaar geleden
 
0 +1 -0 -1
@ Ilja: Adressen kan niet, je moet IRCoper zijn daarvoor.
Wesley
Wesley
18 jaar geleden
 
0 +1 -0 -1
Bij mij gaat hij na een tijdje weg, quit reason "Client exited".
Usleep hoger zetten?
Gerwin
Gerwin
18 jaar geleden
 
0 +1 -0 -1
Nog 1 raar ding over.....

1. Hij pakt mijn identify niet. (Tenminste, niet pakken,NickServ replied met Incorrect Password, terwijl ik toch 100% zeker weet dat het de goede is)

(Kanalen joinen lukt ondertussen wel)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
MrEdison
MrEdison
16 jaar geleden
 
0 +1 -0 -1
Is er nog ondersteuning voor dit project ?

Ik heb namelijk een aantal vraagjes:

Ik heb de bot werkend uiteraard, alleen JPProces - functie begrijp ik niet helemaal.
aangezien de users die een kanaal binnenkomen nergens worden opgeslagen.

Iemand hier een oplossing voor ?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. een-php-irc-bot

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.