[php] ircbot

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jurp5
  • Registratie: Februari 2003
  • Laatst online: 11-09 08:28
Hallo,

Ik ben bezig met een php irc bot.
Ik zou hem graag wat cleaner maken(de switch in de mainloop weg)
Zie http://watchbotp.googlecode.com/svn/trunk/irc.php

Hoe zou ik het beste kunnen doen. ik dacht zelf aan een array met "command" => "functionnaam" en dat aanroepen met call_user_func, maar dat lijkt me toch niet zo efficient.


De project URL is: http://code.google.com/p/watchbotp/

--
Jurriaan Pruis

Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 20-09 20:01

jopiek

Tja... 'ns ff denken.

jurp5 schreef op woensdag 20 december 2006 @ 07:11:
Hallo,

Ik ben bezig met een php irc bot.
Ik zou hem graag wat cleaner maken(de switch in de mainloop weg)
Zie http://watchbotp.googlecode.com/svn/trunk/irc.php

Hoe zou ik het beste kunnen doen. ik dacht zelf aan een array met "command" => "functionnaam" en dat aanroepen met call_user_func, maar dat lijkt me toch niet zo efficient.


De project URL is: http://code.google.com/p/watchbotp/

--
Jurriaan Pruis
Is iig interessant project. Ik heb ervaring met IRC bots in Perl, maar nog niet in php hoewel ik dat laatste wel gebruik voor sites. Ik denk dat een switch toch qua execution time het meest efficient is. Alleen moet je even zorgen dat commando's die het meest gebruikt worden bovenin staan. tevens zou je hem misschien kunnen vorken door op de eerste letter te checken en daarna 'm in het volgende blok te sturen, maar dat is een afweging.

Cogito Ergo Credo


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb in mijn PHPbot gewoon een grote if elseif constructie gemaakt. Mischien niet het snelste, maar het werkt perfect.

(ik hoop trouwens niet dat je die bot op betaald webspace hebt, veel hosts vinden dit niet zo leuk ;))

Acties:
  • 0 Henk 'm!

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Wat je ook zou kunnen proberen is voor elk IRC commando een functie te bakken en dan dmv function_exists te kijken of voor het opgegeven commando een functie bestaat en zo ja, die dan uit te voeren.
voorbeeldje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fuction main()
{
    $cmd = "join";

    if(function_exists($cmd)) {
        $cmd();
    }
}

function opme()
{
    // bla bla
}

function join()
{
    // bla bla
}


Maar dit is zeker niet veilig als je niet eerst kijkt of $cmd een valid IRC commando is, dus filtering doen wat weer impact heeft op de performance. Maar het heeft wel een grote flexibiliteit (functions includen etc).
De oplossing van jopiek is trouwens ook wel een handige, zeker als je performance wil optimizen.

Nu met Land Rover Series 3 en Defender 90


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

MTWZZ schreef op woensdag 20 december 2006 @ 11:04:
Maar dit is zeker niet veilig als je niet eerst kijkt of $cmd een valid IRC commando is,
Dat is gemakkelijk op te lossen :

PHP:
1
2
3
function_exists('irc_' . $command);
function irc_join(){}
function irc_opme(){}


Gewoon een brakke manier van een eigen namespace bouwen :P

Acties:
  • 0 Henk 'm!

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Hm ik mik irc_ in google en kijk wat ik krijg: klik :D

Nu met Land Rover Series 3 en Defender 90


Acties:
  • 0 Henk 'm!

  • Mister_X
  • Registratie: Februari 2000
  • Laatst online: 17-04 14:07
eamelink schreef op woensdag 20 december 2006 @ 11:21:
[...]

Dat is gemakkelijk op te lossen :

PHP:
1
2
3
function_exists('irc_' . $command);
function irc_join(){}
function irc_opme(){}


Gewoon een brakke manier van een eigen namespace bouwen :P
PHP:
1
2
3
4
    public function __call($function, $arguments)
    {
        return @call_user_func_array('irc_' . $function, array_unshift($arguments, $this->irc));
    }


nog mooier, gebruik ik voor ftp classje:
$ftp->put (ftp_put);
$ftp->move (ftp_move)
etc..

Acties:
  • 0 Henk 'm!

  • jurp5
  • Registratie: Februari 2003
  • Laatst online: 11-09 08:28
maar wordt dat __call niet overal(alle functies) voor gebruikt, ziet er wel handig uit, maar dan maak ik wel een apparte command class, want ik will de echte commands gescheiden houden van de codes die de invoer splitten en checken(bijv. dat je met het say commando niet een channel naam hoeft te gebruiken)

ik hoop dat er nog meer handige suggesties komen, heel erg bedankt alvast :) _/-\o_

@ZktaS: ik gebruik het bot zelf niet echt, ik vind het gewoon leuk om er een te maken :), en gebruik hem op mn eigen pc voor test

[ Voor 14% gewijzigd door jurp5 op 20-12-2006 15:12 ]


Acties:
  • 0 Henk 'm!

  • jurp5
  • Registratie: Februari 2003
  • Laatst online: 11-09 08:28
schopje, dat call__ is wel handig maar wil liever nog iets anders :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

jopiek schreef op woensdag 20 december 2006 @ 07:30:
Ik denk dat een switch toch qua execution time het meest efficient is. Alleen moet je even zorgen dat commando's die het meest gebruikt worden bovenin staan.
Kom op, het is een freakin' IRC bot. 't Is niet alsof ie miljoenen commando's per seconde af moet handelen ofzo ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 20-09 20:01

jopiek

Tja... 'ns ff denken.

.oisyn schreef op vrijdag 22 december 2006 @ 14:38:
[...]


Kom op, het is een freakin' IRC bot. 't Is niet alsof ie miljoenen commando's per seconde af moet handelen ofzo ;)
ligt er maar aan hoeveel bots je spawned, ik gebruik in mijn omgeving uiteindelijk nogal wat van die dingen, dus elke optimalisatie is een...

Cogito Ergo Credo


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Ik zou een array bouwen met commando's / functies, die je gewoon afloopt tot je het goede commando gevonden hebt. Je kan dan op de achtergrond bijhouden welke commando's opgevraagd worden, en zo nu en dan je lijst herordenen op volgorde van het meeste gebruik. Zo optimaliseert je systeem zichzelf voor het gebruik dat je er van maakt.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

jopiek schreef op zaterdag 23 december 2006 @ 01:00:
[...]


ligt er maar aan hoeveel bots je spawned, ik gebruik in mijn omgeving uiteindelijk nogal wat van die dingen, dus elke optimalisatie is een...
Dat zal idd DE bottleneck zijn ja :P....

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Het lijkt me ook wel goed om na te denken over de beheersbaarheid: wil je dat de bot bij iedere verandering opnieuw gestart moet worden, of wil je ook on-the-fly functies kunnen toevoegen of wijzigen. Zelf zou ik voor dit laatste gaan. Iemand die ik ken heeft ook een irc bot geschreven (in Delphi), en via IRC-berichtjes kun je zo een functie toevoegen of verwijderen (daar zit dan wel een usermanagementsysteem in zodat slechts enkelen dit kunnen).

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

jopiek schreef op zaterdag 23 december 2006 @ 01:00:
ligt er maar aan hoeveel bots je spawned, ik gebruik in mijn omgeving uiteindelijk nogal wat van die dingen, dus elke optimalisatie is een...
Wat dacht je ervan om dan gewoon een native taal te gebruiken, dat scheelt veel meer qua performance dan een lousy command-parse-optimalisatietje. Iets met 80% van de tijd in 20% van de code... :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • jurp5
  • Registratie: Februari 2003
  • Laatst online: 11-09 08:28
Het project is intussen aardig verbeterd, plugin systeem enz.
alleen heb ik nog developers en testers nodig om het te verbeteren :).
zie http://watchbotp.googlecode.com/svn/trunk/ voor de nieuwste versie met plugin systeem.
Dat __call sys van hierboven vond ik niet super. nu wordt de functie gewoon aangeroepen met variabelen. Als iemand noch ideeen of tips heeft post het dan graag.

Alvast bedankt,
Jurriaan _/-\o_
Pagina: 1