diff options
| author | Adam <Adam@anope.org> | 2011-05-23 13:32:01 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2011-05-23 13:32:01 -0400 |
| commit | 121ae0b189361141a5c4ae731556357c903b2723 (patch) | |
| tree | c3534fa70df01085d19b6d71d5d27604c697e12c /modules | |
| parent | 8bf8832b70dea28e2048d5952ee03247f12bda92 (diff) | |
Added m_statusupdate
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/extra/m_statusupdate.cpp | 55 |
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) |
