mirror of
https://github.com/anope/anope.git
synced 2026-06-30 08:16:38 +02:00
Move assign and unassign to new events, allow for halting too should modules desire that.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2107 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
+1
-3
@@ -13,19 +13,17 @@
|
||||
*/
|
||||
|
||||
#define EVENT_START "start"
|
||||
#define EVENT_STOP "stop"
|
||||
//#define EVENT_STOP "stop"
|
||||
|
||||
#define EVENT_DB_SAVING "db_saving"
|
||||
#define EVENT_DB_BACKUP "db_backup"
|
||||
#define EVENT_NEWNICK "newnick"
|
||||
#define EVENT_BOT_UNASSIGN "bot_unassign"
|
||||
#define EVENT_BOT_JOIN "bot_join"
|
||||
#define EVENT_BOT_CREATE "bot_create"
|
||||
#define EVENT_BOT_CHANGE "bot_change"
|
||||
#define EVENT_BOT_FANTASY "bot_command"
|
||||
#define EVENT_BOT_FANTASY_NO_ACCESS "bot_command_no_access"
|
||||
#define EVENT_BOT_DEL "bot_del"
|
||||
#define EVENT_BOT_ASSIGN "bot_assign"
|
||||
#define EVENT_BOT_KICK "bot_kick"
|
||||
#define EVENT_BOT_BAN "bot_ban"
|
||||
#define EVENT_TOPIC_UPDATED "chan_topic_updated"
|
||||
|
||||
+28
-5
@@ -40,6 +40,15 @@
|
||||
#define MODULE_EXT ".so"
|
||||
#endif
|
||||
|
||||
/** Possible return types from events.
|
||||
*/
|
||||
enum EventReturn
|
||||
{
|
||||
EVENT_STOP,
|
||||
EVENT_CONTINUE,
|
||||
EVENT_ALLOW
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This #define allows us to call a method in all
|
||||
@@ -72,15 +81,15 @@
|
||||
#define FOREACH_RESULT(y,x) \
|
||||
do { \
|
||||
std::vector<Module*>::iterator safei; \
|
||||
MOD_RESULT = 0; \
|
||||
MOD_RESULT = EVENT_CONTINUE; \
|
||||
for (std::vector<Module*>::iterator _i = ModuleManager::EventHandlers[y].begin(); _i != ModuleManager::EventHandlers[y].end(); ) \
|
||||
{ \
|
||||
safei = _i; \
|
||||
++safei; \
|
||||
try \
|
||||
{ \
|
||||
int res = (*_i)->x ; \
|
||||
if (res != 0) { \
|
||||
EventReturn res = (*_i)->x ; \
|
||||
if (res != EVENT_CONTINUE) { \
|
||||
MOD_RESULT = res; \
|
||||
break; \
|
||||
} \
|
||||
@@ -104,7 +113,7 @@ enum Priority { PRIORITY_FIRST, PRIORITY_DONTCARE, PRIORITY_LAST, PRIORITY_BEFOR
|
||||
enum Implementation
|
||||
{
|
||||
I_BEGIN,
|
||||
I_OnUserKicked, I_OnReload,
|
||||
I_OnUserKicked, I_OnReload, I_OnBotAssign, I_OnBotUnAssign,
|
||||
I_END
|
||||
};
|
||||
|
||||
@@ -495,8 +504,22 @@ class CoreExport Module
|
||||
* @param startup True if Services is starting for the first time, false otherwise.
|
||||
*/
|
||||
virtual void OnReload(bool startup) {}
|
||||
};
|
||||
|
||||
/** Called before a bot is assigned to a channel.
|
||||
* @param sender The user assigning the bot
|
||||
* @param ci The channel the bot is to be assigned to.
|
||||
* @param bi The bot being assigned.
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the assign.
|
||||
*/
|
||||
virtual EventReturn OnBotAssign(User *sender, ChannelInfo *ci, BotInfo *bi) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before a bot is unassigned from a channel.
|
||||
* @param sender The user unassigning the bot
|
||||
* @param ci The channel the bot is being removed from
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the unassign.
|
||||
*/
|
||||
virtual EventReturn OnBotUnAssign(User *sender, ChannelInfo *ci) { return EVENT_CONTINUE; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
+10
-3
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include "services.h"
|
||||
#include "modules.h"
|
||||
|
||||
BotInfo::BotInfo(const char *nnick)
|
||||
{
|
||||
@@ -89,6 +90,11 @@ void BotInfo::RejoinAll()
|
||||
|
||||
void BotInfo::Assign(User *u, ChannelInfo *ci)
|
||||
{
|
||||
EventReturn MOD_RESULT = EVENT_CONTINUE;
|
||||
FOREACH_RESULT(I_OnBotAssign, OnBotAssign(u, ci, this));
|
||||
if (MOD_RESULT == EVENT_STOP)
|
||||
return;
|
||||
|
||||
if (ci->bi)
|
||||
{
|
||||
if (u)
|
||||
@@ -101,13 +107,14 @@ void BotInfo::Assign(User *u, ChannelInfo *ci)
|
||||
this->chancount++;
|
||||
if (ci->c && ci->c->usercount >= BSMinUsers)
|
||||
bot_join(ci);
|
||||
|
||||
send_event(EVENT_BOT_ASSIGN, 2, ci->name, this->nick);
|
||||
}
|
||||
|
||||
void BotInfo::UnAssign(User *u, ChannelInfo *ci)
|
||||
{
|
||||
send_event(EVENT_BOT_UNASSIGN, 2, ci->name, ci->bi->nick);
|
||||
EventReturn MOD_RESULT = EVENT_CONTINUE;
|
||||
FOREACH_RESULT(I_OnBotUnAssign, OnBotUnAssign(u, ci));
|
||||
if (MOD_RESULT == EVENT_STOP)
|
||||
return;
|
||||
|
||||
if (u && ci->c && ci->c->usercount >= BSMinUsers)
|
||||
ircdproto->SendPart(ci->bi, ci->name, "UNASSIGN from %s", u->nick);
|
||||
|
||||
+1
-1
@@ -694,7 +694,7 @@ void backup_databases()
|
||||
rename_database(OperDBName, ext);
|
||||
rename_database(NewsDBName, ext);
|
||||
rename_database(ExceptionDBName, ext);
|
||||
send_event(EVENT_DB_BACKUP, 1, EVENT_STOP);
|
||||
send_event(EVENT_DB_BACKUP, 1, "stop");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ void load_config() {
|
||||
* When anope saves her databases, we do the same.
|
||||
**/
|
||||
int save_ignoredb(int argc, char **argv) {
|
||||
if ((argc >= 1) && (!stricmp(argv[0], EVENT_STOP)))
|
||||
if ((argc >= 1) && (!stricmp(argv[0], "stop")))
|
||||
save_ignore_db();
|
||||
|
||||
return MOD_CONT;
|
||||
@@ -149,7 +149,7 @@ int save_ignoredb(int argc, char **argv) {
|
||||
* When anope backs her databases up, we do the same.
|
||||
**/
|
||||
int backup_ignoredb(int argc, char **argv) {
|
||||
if ((argc >= 1) && (!stricmp(argv[0], EVENT_STOP))) {
|
||||
if ((argc >= 1) && (!stricmp(argv[0], "stop"))) {
|
||||
if (debug)
|
||||
alog("[os_ignore_db] debug: Backing up %s database...", IgnoreDB);
|
||||
ModuleDatabaseBackup(IgnoreDB);
|
||||
|
||||
Reference in New Issue
Block a user