Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Adding A Channel Greet Message When A User Joins A Channel

by PilotinControl (Pilgrim)
on Feb 16, 2004 at 20:36 UTC ( #329423=perlquestion: print w/replies, xml ) Need Help??
PilotinControl has asked for the wisdom of the Perl Monks concerning the following question:

Hello All!!

A newbie here! I have a problem with my following Perl Code. I'm coding a small set or MySQL IRC Services and I want to add a channel greet message when a user joins the services sends a message.. I had it send a message to the channel each time a user joins but I just want it sent once when a user joins: The code is below. Thanks in Advance!!

The sample Code can be viewed here

Edit by tye, turn URL into link, preserve formatting

  • Comment on Adding A Channel Greet Message When A User Joins A Channel

Replies are listed 'Best First'.
Re: Adding A Channel Greet Message When A User Joins A Channel
by waswas-fng (Curate) on Feb 16, 2004 at 20:54 UTC
    consider using a privmsg to the person instead of a public tell. Keep a hash of $seenusers{"$nickname"} with the value being a epoch time. you know if the hash entry exists that you have said hi to this user before, and what time you have said hi, so you can calculate "hey I only want to say hi to users every 30 minutes and I have not said hi to this user for 4 hours and I am seeing him join the channel again ... must say hi"

      Right, It is suppose to be private.. but I'm stuck in the code part....and adding time to it is a bit more advanced. If you can send me the appropriate code that would be a help. Thanks!
        Well, what I would do is use a prebuilt module such as Net::IRC or better yet, POE::Component::IRC to handle the service setup and event model. After that I would place my code in the on_join event, and do something like the following psudo code:
        if ( exists $seenusers{"$nick"} ) { # I have seen the user my $epochnow = time(); #check to see if enough time has gone by to say hello again. +.. say_hello("$nick") if ($seenuser{"$nick"} - $epchnow >= $HiT +imeDly ); # if that fails then we have said hello recently, don't do +again... } else { #First time $nick has been seen... say_hello("$nick"); } sub say_hello { my ($nick) = @_; privmsg($nick, "hey there bud, welcome to $channel...\n"); $seenusers=time(); }
        Now you will want to write it whithout using globals, and put more tests in there, and make a cleanup loop to clean the hash as the time to live is past so you dont get a huge hash after time. thats all up to you, that is just psudo code -- you will have to write your own app.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://329423]
Approved by flyingmoose
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2018-06-24 06:11 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.