Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11821[/thread]

IRC Bot Problem

Leser: 2


<< >> 9 Einträge, 1 Seite
Gast Gast
 2008-05-17 15:09
#109842 #109842
Hallo,
ich möchte einen IRC-Bot schreiben der alle X minuten eine Webseite aufruft und entspechende informationen in den chan postet.

ich habe das ganze erst mal stark vereinfacht, doch leider scheitere ich schon.

Code: (dl )
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
#!/usr/bin/perl -w

use Net::IRC;
use strict;
use warnings;
use threads;

my $irc = new Net::IRC;

my $conn = $irc->newconn(
Server => 'de.quakenet.org',
Port => '6667',
Nick => 'HelloBot007',
Ircname => 'Bot007!',
Username => 'hello'
);

$conn->{channel} = '#testor55';

sub on_connect {
my $conn = shift;

$conn->join($conn->{channel});
$conn->privmsg($conn->{channel}, 'Hello everyone!');
$conn->{connected} = 1;
}

sub on_join {
my ($conn, $event) = @_;
my $nick = $event->{nick};

$conn->privmsg($conn->{channel}, "Hello, $nick!");
}

sub on_part {
my ($conn, $event) = @_;

my $nick = $event->{nick};
$conn->privmsg($conn->{channel}, "Goodbye, $nick!");
}

$conn->add_handler('join', \&on_join);
$conn->add_handler('part', \&on_part);

$conn->add_handler('376', \&on_connect);



my $web_start = threads->create('start_web');
$web_start->join();

my $irc_start = threads->create('start_irc');
$irc_start->join();

sub start_web { while (1) {print "hallo\n"; sleep 10;}}

sub start_irc { $irc->start(); }


so schreibt er zwar alle 10 sekunden "hallo" in die konsole, verbindet sich aber nicht zum irc.

wie kann ich das problem beheben?

ich danke schon ein mal
Gast Gast
 2008-05-17 17:14
#109844 #109844
Geht es auch ohne threads?
Gast Gast
 2008-05-17 18:13
#109845 #109845
soweit ich weis wartet das modul in einer while schleife auf neue daten.

wie kann ich es sonst realisieren?
styx-cc
 2008-05-17 18:44
#109846 #109846
User since
2006-05-20
533 Artikel
BenutzerIn

user image
edit: war blödsinn
Pörl.
pq
 2008-05-17 18:48
#109847 #109847
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
versuch mal CPAN:POE::Component::IRC
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2008-05-17 22:04
#109851 #109851
Mir ging es um die Frage, ob überhaupt eine Kommunikation über IRC möglich ist mit deinem Code; es ging nicht um die Parallelisierung.
Gast Gast
 2008-05-17 22:32
#109853 #109853
was glaubst du wohin das 'print' hier geht:
Code (perl): (dl )
print "hallo\n";

Ich würde vorschlagen du nutzt eine AusgabeFunktion aus dem Objekt "$irc".
Gast Gast
 2008-05-18 13:13
#109863 #109863
das hallo soll ja nicht in den chan ausgegeben werden es ist nur für mich ein Hilfsmittel um zu überprüfen ob er die whileschleife proggt
"so schreibt er zwar alle 10 sekunden "hallo" in die konsole, verbindet sich aber nicht zum irc."

ps wer lesen kann ist klar in vorteil


ganz nebenbei wenn ich die geschichte mit den threads weg lasse funst der irc code ja ohne probleme was für mich heißt das eine kommunikation möglich sein muss
Monk
 2008-05-20 05:00
#109955 #109955
User since
2008-05-20
3 Artikel
BenutzerIn
[default_avatar]
Bin selber gerade dabei einen IRC-Bot zuproggen.
Vielleicht hilft dir dieser "kleine" Codeausschnitt weiter.
Das ist der Verbinungsaufbau zum IRC + das joinen eines channels.
Wenn du Probleme mit einem Pingtimeout vom IRC Server bekommst einfach nachfragen.


Code (perl): (dl )
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
        
use IO::Socket::INET;

$server = "irc.seilen.de"; 
        $port = "6667"; 
        $channel = "#bot";
        $nick = "tK-Bot"; 
        


my $sock = new IO::Socket::INET(
                                PeerAddr => $server,
                                PeerPort => $port,
                                Proto => 'tcp',
                               ) || die "No connection $!\n";

print $sock "NICK $nickf\r\n";
print $sock "USER lol\r\n";

while ($input = <$sock>)
{
        if ($input =~ /004/)
        {
                                        last;
        }
        elsif ($input =~ /433/)
        {
                       
                    print $sock "NICK Anderer-Nick\r\n";     
        }
 
}
print $sock "JOIN $channel\r\n";
print $sock "PRIVMSG $channel :\001ACTION HELLO WORLD \001\r\n";


MFG Monk
<< >> 9 Einträge, 1 Seite



View all threads created 2008-05-17 15:09.