Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Adding A Channel Greet Message When A User Joins A Channel

by PilotinControl (Monk)
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

http://code.publiclinux.net/sample.txt

Edit by tye, turn URL into link, preserve formatting

Comment on Adding A Channel Greet Message When A User Joins A Channel
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"


    -Waswas
      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.


        -Waswas

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://329423]
Approved by flyingmoose
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (4)
As of 2015-07-04 01:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (57 votes), past polls