(perl) A fully event driven IRC Services module
Fetching latest commit…
Cannot retrieve the latest commit at this time
POE::Component::IRC::Service ============================ 1). Background: POE::Component::IRC::Service is a POE (Perl Object Environment) component which provides a convenient way for POE applications to create an IRC Service. Much of the code was based on POE::Component::IRC. If you are familiar with that module then you shouldn't have too many problems with this one :) 2). Implementation: POE::Component::IRC::Service implements a POE session which connects to the IRC Network and sends all IRC traffic as events to each interested POE session which registers with it. Events are prefixed with 'irc_<protocol>_' where <protocol> is currently either 'hyb' or 'p10', supporting Hybrid-7.0+ and ircu2.10.11.04+. Other ircd protocols may be forthcoming, subject to suitable testing environments becoming available to me :) NOTE: Hybrid support is not fully supported yet and the wrapper module will choke if you try and invoke it. I hope to have this sorted soon. Hybrid: Tested with Hybrid-7.0 http://www.ircd-hybrid.org P10: Tested with asuka-1.06 http://dev-com.quakenet.org/ The component will also track all IRC network events itself and keeps a record of the current IRC network "state" such as all users and channels. This information is stored in an object which is returned when the component is created. Public methods are available to query this information. As the component tracks IRC network state it acts like an ircd and uses network bursts to inform the uplink server on connection of its current users and channels. The component has been written in such a way that if there are any nickname collisions, the Service clients will always take precedence over existing clients. Also, Service clients will always be guaranteed to retain operator status on any channels they have joined. These are "features". 3). Quirky Features :) The module will automatically deal with the following events:- irc_*_ping Automatically pongs the uplink in response to pings. irc_*_whois The module will automatically do the right thing with WHOIS requests. It will always report an idle time of 0 seconds. irc_*_stats The module will automatically deal with "u" STATS requests. Any other query is quietly ignored. Network Burst Management:- As soon as the component is created and started it is possible to add clients and join them to channels. When the component is requested to CONNECT to its uplink server it connects and receives the current network state from the uplink server. There are two circumstances where the component will "kludge": An incoming nickname matches one of the components nicknames ( ie. one of our service bots ). The component will adjust the timestamp of the existing nickname by subtracting 30 seconds. This means that when our clients are bursted to the uplink, the matching client will be KILLed. An incoming channel already exists in the components list of channels ( ie. one of our service bots is on a channel ). The component will adjust the timestamp of the existing channel so it is consistent with the IRC network. When we burst in our version of the channel, any service bots will retain their operator +o status. 4). DISCLAIMER This module is provided "as is". No money back. No guarantees.