diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/bots.h | 18 | ||||
| -rw-r--r-- | include/channels.h | 26 | ||||
| -rw-r--r-- | include/extern.h | 2 | ||||
| -rw-r--r-- | include/modes.h | 8 | ||||
| -rw-r--r-- | include/services.h | 10 | ||||
| -rw-r--r-- | include/users.h | 9 |
6 files changed, 58 insertions, 15 deletions
diff --git a/include/bots.h b/include/bots.h index 7d2fa74f3..f6b8d2e14 100644 --- a/include/bots.h +++ b/include/bots.h @@ -71,8 +71,22 @@ class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END> */ void UnAssign(User *u, ChannelInfo *ci); - void Join(Channel *c); - void Join(const Anope::string &chname); + /** Join this bot to a channel + * @param c The channel + * @param update_ts Assume we're updating the TS for this channel + */ + void Join(Channel *c, bool update_ts = false); + + /** Join this bot to a channel + * @param chname The channel name + * @param update_ts Assume we're updating the TS for this channel + */ + void Join(const Anope::string &chname, bool update_ts = false); + + /** Part this bot from a channel + * @param c The channel + * @param reason The reason we're parting + */ void Part(Channel *c, const Anope::string &reason = ""); }; diff --git a/include/channels.h b/include/channels.h index 845f8fc36..8c5d83c5d 100644 --- a/include/channels.h +++ b/include/channels.h @@ -44,7 +44,7 @@ struct UserContainer { User *user; UserData ud; - Flags<ChannelModeName> *Status; + ChannelStatus *Status; UserContainer(User *u) : user(u) { } virtual ~UserContainer() { } @@ -104,6 +104,11 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags> int16 bouncy_modes; /* Did we fail to set modes here? */ int16 topic_sync; /* Is the topic in sync? */ + /** Call if we need to unset all modes and clear all user status (internally). + * Only useful if we get a SJOIN with a TS older than what we have here + */ + void Reset(); + /** Restore the channel topic, set mlock (key), set stickied bans, etc */ void Sync(); @@ -217,23 +222,27 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags> /** Clear all the modes from the channel * @param bi The client unsetting the modes + * @param internal Only remove the modes internally */ - void ClearModes(BotInfo *bi = NULL); + void ClearModes(BotInfo *bi = NULL, bool internal = false); /** Clear all the bans from the channel * @param bi The client unsetting the modes + * @param internal Only remove the modes internally */ - void ClearBans(BotInfo *bi = NULL); + void ClearBans(BotInfo *bi = NULL, bool internal = false); /** Clear all the excepts from the channel * @param bi The client unsetting the modes + * @param internal Only remove the modes internally */ - void ClearExcepts(BotInfo *bi = NULL); + void ClearExcepts(BotInfo *bi = NULL, bool internal = false); /** Clear all the invites from the channel * @param bi The client unsetting the modes + * @param internal Only remove the modes internally */ - void ClearInvites(BotInfo *bi = NULL); + void ClearInvites(BotInfo *bi = NULL, bool internal = false); /** Get a param from the channel * @param Name The mode @@ -268,6 +277,13 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags> * @return true if the kick was scucessful, false if a module blocked the kick */ bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...); + + /** Get a string of the modes set on this channel + * @param complete Include mode parameters + * @param plus If set to false (with complete), mode parameters will not be given for modes requring no parameters to be unset + * @return A mode string + */ + Anope::string GetModes(bool complete, bool plus); }; #endif // CHANNELS_H diff --git a/include/extern.h b/include/extern.h index b2dd30b79..4dc6cb4ba 100644 --- a/include/extern.h +++ b/include/extern.h @@ -66,8 +66,6 @@ E void ChanSetInternalModes(Channel *c, int ac, const char **av); E User *nc_on_chan(Channel *c, const NickCore *nc); -E Anope::string chan_get_modes(Channel *chan, int complete, int plus); - E int get_access_level(ChannelInfo *ci, NickAlias *na); E int get_access_level(ChannelInfo *ci, NickCore *nc); E Anope::string get_xop_level(int level); diff --git a/include/modes.h b/include/modes.h index 6447550ad..4d0706a9a 100644 --- a/include/modes.h +++ b/include/modes.h @@ -420,7 +420,7 @@ class CoreExport ModeManager public: /* List of all modes Anope knows about */ - static std::list<Mode *> Modes; + static std::map<Anope::string, Mode *> Modes; /* User modes */ static std::map<char, UserMode *> UserModesByChar; @@ -468,6 +468,12 @@ class CoreExport ModeManager */ static UserMode *FindUserModeByName(UserModeName Name); + /** Find a mode by name + * @param name The mode name + * @return The mode + */ + static Mode *FindModeByName(const Anope::string &name); + /** Gets the channel mode char for a symbol (eg + returns v) * @param Value The symbol * @return The char diff --git a/include/services.h b/include/services.h index 15670c8ac..ca02d087e 100644 --- a/include/services.h +++ b/include/services.h @@ -730,13 +730,13 @@ struct LevelInfo /*************************************************************************/ -#include "users.h" -#include "bots.h" - /* This structure stocks ban data since it must not be removed when * user is kicked. */ +#include "users.h" +#include "bots.h" + struct BanData { BanData *next, *prev; @@ -973,7 +973,8 @@ class CoreExport IRCDProto virtual void SendQuit(const BotInfo *bi, const char *fmt, ...); virtual void SendPing(const Anope::string &servname, const Anope::string &who); virtual void SendPong(const Anope::string &servname, const Anope::string &who); - virtual void SendJoin(const BotInfo *bi, const Anope::string &, time_t) = 0; + virtual void SendJoin(const BotInfo *, const Anope::string &, time_t) = 0; + virtual void SendJoin(BotInfo *, const ChannelContainer *); virtual void SendSQLineDel(const XLine *x) = 0; virtual void SendInvite(const BotInfo *bi, const Anope::string &chan, const Anope::string &nick); virtual void SendPart(const BotInfo *bi, const Channel *chan, const char *fmt, ...); @@ -998,6 +999,7 @@ class CoreExport IRCDProto virtual void SendSVSJoin(const Anope::string &, const Anope::string &, const Anope::string &, const Anope::string &) { } virtual void SendSVSPart(const Anope::string &, const Anope::string &, const Anope::string &) { } virtual void SendSWhois(const Anope::string &, const Anope::string &, const Anope::string &) { } + virtual void SendBOB() { } virtual void SendEOB() { } virtual void SendServer(const Server *) = 0; virtual bool IsNickValid(const Anope::string &) { return true; } diff --git a/include/users.h b/include/users.h index 78d83c062..40e98b114 100644 --- a/include/users.h +++ b/include/users.h @@ -17,10 +17,17 @@ typedef unordered_map_namespace::unordered_map<Anope::string, User *, Anope::has extern CoreExport user_map UserListByNick; extern CoreExport user_uid_map UserListByUID; +class ChannelStatus : public Flags<ChannelModeName> +{ + public: + Anope::string BuildCharPrefixList() const; + Anope::string BuildModePrefixList() const; +}; + struct ChannelContainer { Channel *chan; - Flags<ChannelModeName> *Status; + ChannelStatus *Status; ChannelContainer(Channel *c) : chan(c) { } virtual ~ChannelContainer() { } |
