summaryrefslogtreecommitdiff
path: root/docs/EVENTS
diff options
context:
space:
mode:
Diffstat (limited to 'docs/EVENTS')
-rw-r--r--docs/EVENTS416
1 files changed, 416 insertions, 0 deletions
diff --git a/docs/EVENTS b/docs/EVENTS
new file mode 100644
index 000000000..bc8af9dce
--- /dev/null
+++ b/docs/EVENTS
@@ -0,0 +1,416 @@
+Anope Internal Events
+---------------------
+
+1) Intro
+2) Complex Events
+3) Triggered Events
+4) Triggered Events List
+
+1) Introduction to Internal Events
+
+ Internal Events are setup to give module developers more information
+ about what the core is doing at different times. This information can
+ be as complex as data we are feeding to the uplink, to simple triggered
+ events such as the databases being saved. A list of triggered events
+ can be found below. Additional there is a module included with the core
+ which can provide some clue as to how to use the code in your modules.
+ The rest of this document assumes that you are used to writing modules.
+
+2) Complex Events
+
+ This type of events are based around what happens when we talk to the
+ IRCd, much like MESSAGE events that the IRCD sends to us. The events
+ are triggered when Anope writes to the ircd. To watch for these events
+ you must have some knowledge of how the IRCd command system works. In
+ our example we will trap for NICK events.
+
+ A) All functions most be formatted as:
+
+ int functioname(char *source, int ac, char **av);
+
+ B) In AnopeInit you must declare EvtMessage in some fashion, it is into
+ this variable that we will create the event handler. Here is what the
+ base AnopeInit should look like at this point:
+
+ int AnopeInit(int argc, char **argv)
+ {
+ EvtMessage *msg = NULL;
+ int status;
+
+ moduleAddAuthor(AUTHOR);
+ moduleAddVersion(VERSION);
+ return MOD_CONT;
+ }
+
+ Note that AUTHOR and VERSION should be defined above the AnopeInit
+ function, just like you should do with any module.
+
+ C) Pass "createEventHandler" the name of the message in this case NICK,
+ and the function that was created in Step A. At this point you should
+ assign the return of "createEventHandler" to the EvtMessage variable.
+
+ msg = createEventHandler("NICK", my_nick);
+
+ D) The Handler is not ready for use yet; now you must add it to the hash
+ with "moduleAddEventHandler". You will want to pass to this function
+ the return of "createEventHandler".
+
+ status = moduleAddEventHandler(msg);
+
+ It will return the same module error codes as adding a regular message,
+ which you can use to confirm it was added correctly.
+
+ E) With that setup in your function you will be passed 3 items. The source
+ most of the time this will be set to ServerName or NULL; consult our
+ IRCd documentation about how messages are formatted. AC is the count of
+ variables you will find in AV.
+
+ int my_nick(char *source, int ac, char **av)
+ {
+ alog("Internal Event - nick is %s",av[0]);
+ return MOD_CONT;
+ }
+
+3) Triggered Events
+
+ These events also known as "event hooks" are internal events such as
+ expiring of nicks to the saving of databases.
+
+ A) All functions most be formatted as:
+
+ int functioname(int argc, char **argv);
+
+ B) In AnopeInit you must declare EvtHook in some fashion; it is into
+ this variable that we will create the event handler. Here is what
+ the base AnopeInit should look like at this point:
+
+ int AnopeInit(int argc, char **argv)
+ {
+ EvtHook *hook = NULL;
+ int status;
+
+ moduleAddAuthor(AUTHOR);
+ moduleAddVersion(VERSION);
+ return MOD_CONT;
+ }
+
+ C) Pass "createEventHook" the name of the event. In this case we are
+ going to hook to the saving of databases, "EVENT_DB_SAVING".
+
+ hook = createEventHook(EVENT_DB_SAVING, my_save);
+
+ D) The Handler is not ready for use yet; now you must add it to the hash
+ with "moduleAddEventHook". You will want to pass to this function the
+ return of "createEventHook"
+
+ status = moduleAddEventHook(hook);
+
+ It will return the same module error codes as adding a regular message,
+ which you can use to confirm it was added correctly.
+
+ E) With that setup in your function you will be passed 1 item. The message
+ is very simple; it could be as simple as a start, stop or message. In
+ the case of saving it has a start and stop.
+
+ int my_save(int argc, char **argv)
+ {
+ if (argc < 1) {
+ return MOD_CONT;
+ }
+
+ if (!stricmp(argv[0], EVENT_START)) {
+ alog("Saving the databases! has started");
+ } else {
+ alog("Saving the databases is complete");
+ }
+ return MOD_CONT;
+ }
+
+4) Triggered Events List
+
+ Here's a list of all event hooks we currently offer, with a description
+ of what argument is being passed to the event functions for this type of
+ event. All arguments are plain-text strings (char *). The list is sorted
+ in alphabetical order.
+
+ Note that all events are emitted AFTER the action has taken place, so
+ any deleted nick/channel/etc won't exist anymore and any created one will
+ exist when your function is being run, unless noted otherwise.
+
+ Also note that EVENT_START and EVENT_STOP should not be matched with an
+ equal sign, but with string comparision. See the bundled events module for
+ an example on how to do this.
+
+ The arguments are given as av[0] for the first argument, av[1] for the
+ second argument, and so on. If av[0] and av[1] are given, the event has
+ two arguments, and argc should be 2.
+
+ EVENT_ACCESS_ADD
+ An user has been added to a channel access list.
+ av[0] Name of the channel the user has been added to.
+ av[1] The nickname of the user that has just added an entry to the
+ access list.
+ av[2] The nickname of the user that has been added to the access
+ list.
+ av[3] The level number the user has been added with.
+
+ EVENT_ACCESS_CHANGE
+ An user level has been changed on a channel access list.
+ av[0] Name of the channel the access list has been modified which.
+ av[1] The nickname of the user that has just modified the access
+ list of the channel.
+ av[2] The nickname of the user wich his access level has just been
+ modified.
+ av[3] The new access level for the user.
+
+ EVENT_ACCESS_CLEAR
+ A channel access list has been cleared.
+ av[0] Name of the channel the access list has been cleared of
+ av[1] The nickname of the user that has cleared the access list
+
+ EVENT_ACCESS_DEL
+ An user has been deleted of a channel access list.
+ av[0] Name of the channel the access entry has been deleted which.
+ av[1] The nickname of the user that has just deleted the access entry.
+ av[2] [OPTIONAL] The nickname of the user wich his access level has just
+ been removed. Not present if numbers were used (e.g. /cs access
+ del 7).
+
+ EVENT_BOT_ASSIGN
+ A BotServ bot has been assigned to a channel.
+ av[0] Name of the channel the bot has been assigned to.
+ av[1] The nickname of the bot that has been assigned to the channel.
+
+ EVENT_BOT_BAN
+ A BotServ bot has banned a user, e.g. kickers.
+ av[0] The nick of the user banned.
+ av[1] The Channel the user was banned from.
+ av[2] The mask that was banned.
+
+ EVENT_BOT_CHANGE
+ The properties of a BotServ bot have been changed.
+ av[0] The nickname of the bot involved.
+
+ EVENT_BOT_CREATE
+ A new BotServ bot has been created, and is ready to use.
+ av[0] The nickname of the newly created bot.
+
+ EVENT_BOT_DEL
+ A BotServ bot is being deleted from BotServ. This event is being sent
+ just before the actual deletion is performed.
+ av[0] The nickname of the bot being deleted.
+
+ EVENT_BOT_FANTASY
+ A fantasy command of the bot has been triggered. This event should be
+ used to create your own fantasy commands.
+ av[0] The fantasy command that has been triggered without leading '!'.
+ av[1] The nickname of the user that has triggered the fantasy
+ command.
+ av[2] The name of the channel the fantasy command has been triggered
+ on.
+ av[3] Contains any optional paramenters passed after the fantasy
+ command. If none are present, this will not exist, and argc will
+ will be 3.
+
+ EVENT_BOT_FANTASY_NO_ACCESS
+ A fantasy command of the bot has been triggered by someone without
+ access to BotServ FANTASY commands on the channel. This will NOT
+ trigger if someone with access has triggered a fantasy command; use
+ EVENT_BOT_FANTASY for those. Hook to both events to catch both event
+ triggers.
+ av[0] The fantasy command that has been triggered without leading '!'.
+ av[1] The nickname of the user that has triggered the fantasy
+ command.
+ av[2] The name of the channel the fantasy command has been triggered
+ on.
+ av[3] Contains any optional paramenters passed after the fantasy
+ command. If none are present, this will not exist, and argc will
+ will be 3.
+
+ EVENT_BOT_JOIN
+ A BotServ bot has joined a channel and opped itself.
+ av[0] The channel name the bot has just joined.
+ av[1] The nickname of the bot that has joined the channel.
+
+ EVENT_BOT_KICK
+ A BotServ bot has kicked a user from a channel.
+ av[0] The name of the user that has been kicked.
+ av[1] The name of the channel the user was kicked from.
+ av[2] The reason for the kick.
+
+ EVENT_BOT_UNASSIGN
+ A BotServ bot is being unassigned from a channel. This event is being
+ sent before the actual removing of the bot is done.
+ av[0] The channel name the bot has been unassigned from.
+ av[1] The nickname of the bot that has been unassigned.
+
+ EVENT_CHAN_DROP
+ A channel has been dropped and deleted.
+ av[0] The name of the channel that has been dropped.
+
+ EVENT_CHAN_EXPIRE
+ A channel has been expired and will be deleted. The event will be
+ emitted just before the actual channel deletion happens.
+ av[0] The name of the channel that has been expired.
+
+ EVENT_CHAN_FORBIDDEN
+ A channel has been forbidden (ChanServ FORBID).
+ av[0] The name of the channel that has been forbidden.
+
+ EVENT_CHAN_KICK
+ Someone has just been kicked from a channel.
+ av[0] The nick of the user that has been kicked.
+ av[1] The channel the user has been kicked from.
+
+ EVENT_CHAN_REGISTERED
+ A new channel has been registered.
+ av[0] The name of the channel that has been registered.
+
+ EVENT_CHAN_SUSPENDED
+ A channel has been suspended (ChanServ SUSPEND).
+ av[0] The name of the channel that has been suspended.
+
+ EVENT_CHAN_UNSUSPEND
+ A channel has been unsuspended (ChanServ UNSUSPEND).
+ av[0] The name of the channel that has been unsuspended.
+
+ EVENT_CHANGE_NICK
+ A user has just changed it's nick.
+ av[0] The new nickname of the user.
+
+ EVENT_CONNECT
+ This event is emitted when the connection to our uplink hub is being
+ made.
+ av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
+ or after the connection has been made. EVENT_STOP is emitted
+ before our burst is being sent over the link.
+
+ EVENT_DB_EXPIRE
+ This event is emitted when the expiry routines for all things that can
+ expire in Anope are being run.
+ av[0] EVENT_START or EVENT_STOP, to indicate if it's being emitted
+ before or after the expiry routines have been run.
+
+ EVENT_DB_SAVING
+ This event is emitted when the databases are being saved.
+ av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
+ or after the saving routines have been run.
+
+ EVENT_DB_BACKUP
+ This event is emitted when the databases are backed up.
+ av[0] EVENT_START when the backup commences, and EVENT_STOP when it
+ finishes.
+
+ EVENT_DEFCON_LEVEL
+ The DefCon level has just been changed. This event is emitted before
+ any DefCon-related action is taken. The internal DefConLevel has
+ already been raised at this point.
+ av[0] The new level of DefCon being invoked.
+
+ EVENT_GROUP
+ A user has grouped it's nickname to another user group.
+ av[0] The nickname of the user that joined the group.
+
+ EVENT_JOIN_CHANNEL
+ A user joins a channel.
+ av[0] EVENT_START or EVENT_STOP. EVENT_START when the user has passed
+ all access checks and is allowed to join, but has not yet
+ joined the channel. EVENT_STOP when the user has joined and all
+ needed modes are set etc.
+ av[1] The nickname of the user joining the channel.
+ av[2] The name of the channel the user has joined.
+
+ EVENT_NEWNICK
+ A new user has been introduced on the network.
+ av[0] The nickname of the newly introduced user.
+
+ EVENT_NICK_DROPPED
+ A user's nick has just been dropped. Note that the nickname information
+ has already been deleted!
+ av[0] The nickname of the user that has just been dropped.
+
+ EVENT_NICK_EXPIRE
+ A user's nick has just expired. Note that, as with EVENT_NICK_DROPPED,
+ the nickname information has already been deleted!
+ av[0] The nickname of the user that has just expired.
+
+ EVENT_NICK_FORBIDDEN
+ A user's nick has just been forbidden.
+ av[0] The nickname that has just been forbidden.
+
+ EVENT_NICK_IDENTIFY
+ A user has just identified for it's nickname with NickServ.
+ av[0] The nickname of the user that just identified.
+
+ EVENT_NICK_LOGOUT
+ A user has just (been) logged out.
+ av[0] The nickname of the user that has (been) logged out.
+
+ EVENT_NICK_REGISTERED
+ A new user has just registered it's nickname. This event is being
+ emitted when the registration is completed, but the user modes have not
+ yet been set.
+ av[0] The nickname of the newly registered user.
+
+ EVENT_NICK_SUSPENDED
+ A user's nick has just been suspended.
+ av[0] The nickname that has just been suspended.
+
+ EVENT_NICK_UNSUSPEND
+ A user's nick has just been unsuspended.
+ av[0] The nickname that has just been unsuspended.
+
+ EVENT_PART_CHANNEL
+ A user parts a channel.
+ av[0] EVENT_START or EVENT_STOP. EVENT_START when the user is about
+ to be removed from the channel internally, EVENT_STOP when
+ this has been done.
+ av[1] The nickname of the user parting the channel.
+ av[2] The name of the channel the user has parted.
+ av[3] The reason the user parted the channel, this is not always sent
+ so check the count to make sure it was passed. (ac == 4)
+
+ EVENT_RELOAD
+ This event is emitted after the configuration file has been reloaded.
+ av[0] Always EVENT_START.
+
+ EVENT_RESTART
+ This event is emitted before the services are being restarted.
+ av[0] Always EVENT_START.
+
+ EVENT_SERVER_CONNECT
+ A new server has just connected to the network.
+ av[0] The name of the new server.
+
+ EVENT_SERVER_SQUIT
+ A server has sent an SQUIT and is about to be removed from the
+ network. This event is being sent before the server is actually
+ removed from the network.
+ av[0] The name of the server that is being removed.
+
+ EVENT_SHUTDOWN
+ This event is emitted when Anope is being shut down.
+ av[0] EVENT_START or EVENT_STOP, to indicate where in the process of
+ restarting the core is. With EVENT_START, services are still
+ fully online and operating. With EVENT_STOP, every internal
+ clean up has been done already, and the SQUIT has been sent;
+ the only thing done after emitting the event is closing the
+ socket to the uplink hub.
+
+ EVENT_SIGNAL
+ This event is emitted when Anope is quitting because of a signal it
+ received.
+ av[0] The quit message that will be sent with the SQUIT for this
+ shutdown.
+
+ EVENT_TOPIC_UPDATED
+ A channel topic has been succesfully updated. Note that this event is
+ only emitted if the new topic has been fully accepted and set by the
+ Anope core.
+ av[0] The name of the channel involved.
+ av[1] The new topic set on the channel.
+
+ EVENT_USER_LOGOFF
+ A user has left the network. This event is emitted before the internal
+ removal is performed, so the user still exists internally.
+ av[0] The nickname of the user leaving the network.