summaryrefslogtreecommitdiff
path: root/docs/EVENTS
blob: 0fae9f7663eafe146e41682df5553daa1f52c590 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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 writting 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;
	}

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, 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 module error code so you can confirm that 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(char *message);

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, 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 module error code so you can confirm that it was added
   correctly.

E. With that setup in your function you will be passed 1 items, 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(char *source)
	{

  		if (!stricmp(source, EVENT_START)) {
      		alog("Saving the databases! has started");
		} else {
      		alog("Saving the databases is complete");
  		}
  		return MOD_CONT;
	}

==============================================================================================
4. Triggered Events List
==============================================================================================
| Event Hook                  |    Event Argument                                            |
==============================================================================================
| EVENT_DB_SAVING             | EVENT_START, EVENT_STOP                                      |
| EVENT_NEWNICK               | Nick as it connected                                         |
| EVENT_BOT_UNASSIGN          | Channel name                                                 |
| EVENT_BOT_JOIN              | Channel name                                                 |
| EVENT_BOT_CREATE            | Bot Nick                                                     |
| EVENT_BOT_CHANGE            | Bot Nick                                                     |
| EVENT_BOT_DEL               | Bot Nick                                                     |
| EVENT_BOT_ASSIGN            | Bot Nick                                                     |
| EVENT_TOPIC_UPDATED         | Channel Name                                                 |
| EVENT_CHAN_EXPIRE           | Channel Name                                                 |
| EVENT_CHAN_REGISTERED       | Channel Name                                                 |
| EVENT_CHAN_DROP             | Channel Name                                                 |
| EVENT_CHAN_FORBIDDEN        | Channel Name                                                 |
| EVENT_CHAN_SUSPENDED        | Channel Name                                                 |
| EVENT_CONNECT               | EVENT_START, EVENT_STOP                                      |
| EVENT_DB_EXPIRE             | EVENT_START, EVENT_STOP                                      |
| EVENT_RESTART               | EVENT_START                                                  |
| EVENT_SHUTDOWN              | EVENT_START, EVENT_STOP                                      |
| EVENT_SIGNAL                | quit message                                                 |
| EVENT_NICK_REGISTERED       | Nick                                                         |
| EVENT_NICK_DROPPED          | Nick                                                         |
| EVENT_NICK_FORBIDDEN        | Nick                                                         |
| EVENT_CHANGE_NICK           | Nick                                                         |
| EVENT_USER_LOGOFF           | Nick                                                         |
==============================================================================================