summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-05-23 13:32:01 -0400
committerAdam <Adam@anope.org>2011-05-23 13:32:01 -0400
commit121ae0b189361141a5c4ae731556357c903b2723 (patch)
treec3534fa70df01085d19b6d71d5d27604c697e12c /modules
parent8bf8832b70dea28e2048d5952ee03247f12bda92 (diff)
Added m_statusupdate
Diffstat (limited to 'modules')
-rw-r--r--modules/extra/m_statusupdate.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/modules/extra/m_statusupdate.cpp b/modules/extra/m_statusupdate.cpp
new file mode 100644
index 000000000..797d5aed0
--- /dev/null
+++ b/modules/extra/m_statusupdate.cpp
@@ -0,0 +1,55 @@
+/*
+ * (C) 2003-2011 Anope Team
+ * Contact us at team@anope.org
+ *
+ * Please read COPYING and README for further details.
+ */
+
+#include "module.h"
+
+class StatusUpdate : public Module
+{
+ public:
+ StatusUpdate(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, SUPPORTED)
+ {
+ this->SetAuthor("Anope");
+
+ Implementation i[] = { I_OnAccessAdd, I_OnAccessChange, I_OnAccessDel, I_OnAccessClear };
+ ModuleManager::Attach(i, this, 4);
+ }
+
+ void OnAccessAdd(ChannelInfo *ci, User *u, ChanAccess *access)
+ {
+ this->OnAccessChange(ci, u, access);
+ }
+
+ void OnAccessChange(ChannelInfo *ci, User *, ChanAccess *access)
+ {
+ if (ci->c)
+ for (CUserList::iterator it = ci->c->users.begin(), it_end = ci->c->users.end(); it != it_end; ++it)
+ {
+ User *user = (*it)->user;
+
+ if (user == ci->bi)
+ continue;
+
+ ChanAccess *highest = ci->GetAccess(user);
+
+ if (!access || (highest == access))
+ chan_set_correct_modes(user, ci->c, 1);
+ }
+ }
+
+ void OnAccessDel(ChannelInfo *ci, User *u, ChanAccess *access)
+ {
+ access->level = 0;
+ this->OnAccessChange(ci, u, access);
+ }
+
+ void OnAccessClear(ChannelInfo *ci, User *u)
+ {
+ this->OnAccessChange(ci, u, NULL);
+ }
+};
+
+MODULE_INIT(StatusUpdate)