Avatar billede matric Nybegynder
29. juni 2001 - 13:07 Der er 8 kommentarer og
1 løsning

Net::IRC

Hej Eksperten

Jeg er i gang med at lave en irc-bot programmeret i perl. Dertil bruger jeg modulet Net::IRC, men det virker ikke helt.

Jeg får denne fejl-besked når jeg forsøger at starte den:

    [xxx@xxx martin]$ perl botten.pl
    <botten> Etablerer forbindelse til IRC-serveren...
    Can\'t bind to RisiFrutti: Cannot assign requested address at /usr/lib/perl5/site_perl/5.6.0/Net/IRC.pm line 192
    <botten> Can\'t connect to IRC server.
    Press any key to continue...

Info om dette modul kan ses på: http://search.cpan.org/search?module=Net::IRC

Serveren jeg bruger i scriptet er eu.undernet.org:6667 som jeg lige har testet. Den virker fint.

Jeg tror problemet har noget at gøre med at jeg sidder bag en router så jeg på en eller anden måde skal have configureret et eller andet perl-modul anderledes.

Modulet det laver forbindelsen til serveren bruger følgende andre moduler:

Sys::Hostname
Socket
Symbol
Carp
strict

Hvor det nok er Sys::Hostname der er interessant.

Men eftersom jeg ikke har så meget forstand på linux aner jeg virkeligt ikke hvordan jeg skal løse dette problem.

Håber der er nogen der kan hjælpe.

På forhånd tak.

Avatar billede matric Nybegynder
29. juni 2001 - 13:10 #1
Det skal lige siges at dette script virkede fint på et andet linux-system. Så det er ikke selve scriptet den er gal med.
Avatar billede matric Nybegynder
29. juni 2001 - 13:12 #2
copy&paste fra IRC.pm

190 sub newconn {
191    my $self = shift;
192    my $conn = Net::IRC::Connection->new($self, @_);
193
194    return if $conn->error;
195    return $conn;
196 }
Avatar billede matric Nybegynder
29. juni 2001 - 13:18 #3
copy&paste fra sub new i modulet Net::IRC::Connection:

sub new {
    my $proto = shift;

    my $self = {                # obvious defaults go here, rest are user-set
                _debug      => $_[0]->{_debug},
                _port      => 6667,
                # Evals are for non-UNIX machines, just to make sure.
                _username  => eval { scalar getpwuid($>) } || $ENV{USER}
                || $ENV{LOGNAME} || \"japh\",
                _ircname    => $ENV{IRCNAME} || eval { (getpwuid($>))[6] }
                || \"Just Another Perl Hacker\",
                _nick      => $ENV{IRCNICK} || eval { scalar getpwuid($>) }
                || $ENV{USER} || $ENV{LOGNAME} || \"WankerBot\",  # heheh...
                _ignore    => {},
                _handler    => {},
                _verbose    =>  0,      # Is this an OK default?
                _parent    =>  shift,
                _frag      =>  \'\',
                _connected  =>  0,
                _maxlinelen =>  510,    # The RFC says we shouldn\'t exceed this.
                _format    => {
                    \'default\' => \"[%f:%t]  %m  <%d>\",
                },
              };

    bless $self, $proto;
    # do any necessary initialization here
    $self->connect(@_) if @_;

    return $self;
}
Avatar billede matric Nybegynder
29. juni 2001 - 13:23 #4
copy&paste fra selve scriptet (botten.pl) der hvor forbindelsen bliver etableret (burde jeg jo nok havde startet med at skrive):

#
#  Create the IRC and Connection objects
#

my $irc = new Net::IRC;

print \"<$ircbot> Etablerer forbindelse til IRC-serveren...\\n\";

my $conn = $irc->newconn(Server  => ($ARGV[0]  ||  \'eu.undernet.org\'),
                        Port    => 6667,
                        Nick    => \'Botten\',
                        Ircname  => \'Jeg er en bot\',
                        Username => \'Botten\')
    or die \"<$ircbot> Can\'t connect to IRC server.\\n\";
Avatar billede matric Nybegynder
29. juni 2001 - 20:47 #5
okey... jeg er nået så langt at jeg har fundet ud af at fejlen ligger i dette stykke kode:

  # This bind() stuff is so that people with virtual hosts can select
  # the hostname they want to connect with. For this, I dumped the
  # astonishingly gimpy IO::Socket. Talk about letting the interface
  # get in the way of the functionality...

  if ($self->hostname) {
      unless (bind( $sock, sockaddr_in( 0, inet_aton($self->hostname) ) )) {
          carp \"Can\'t bind to\", $self->hostname, \": $!\";
          $self->error(1);
          return;
      }
  }
Avatar billede darkside Nybegynder
01. juli 2001 - 20:43 #6
Hm du skal nok ha pbnet noget porte på din router!
Avatar billede cipherz Nybegynder
14. juli 2001 - 20:13 #7
hmmm.... nu har du konfigget dit hostname og ting right ?
mener jeg har set noget lignende.
/etc/hosts
kunne være den ikke kan look\'e hostname op *shrug*
// Lars Advice A/S
Avatar billede hr_kenneth Nybegynder
04. september 2001 - 14:47 #8
# This bind() stuff is so that people with virtual hosts can select
# the hostname they want to connect with. For this, I dumped the
# astonishingly gimpy IO::Socket. Talk about letting the interface
# get in the way of the functionality...
     
if ($self->hostname) {
  unless (bind( $sock, sockaddr_in( 0, inet_aton($self->hostname) )
)) {
      carp \"Can\'t bind to \", $self->hostname, \": $!\";
      $self->error(1);
      return;
  }
}
og comment det hele ud. Så skulle det virke
Avatar billede hr_kenneth Nybegynder
04. september 2001 - 14:49 #9
hov. der manglede lige noget. Dette findes omkring linie 250 i Connection.pm , og skal bare commentes væk og så skulle det virke. Det gjorde det hvert fald for mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester