diff options
author | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2010-01-14 21:29:08 +0000 |
---|---|---|
committer | Adam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2010-01-14 21:29:08 +0000 |
commit | 711787b54d8b57ace877b09587f368cee5553b70 (patch) | |
tree | f5093aeeec5c1f4155e31f72488ae4040e37f551 /include | |
parent | f2c44c67b59bd4f6a5a01412f2dc5df59010b1da (diff) |
Burned do_sjoin and rewrote it to be sane. This changes how Anope handles new channel creations drasitcally as we now truely track it all instead of hack around it by not initially tracking user joins to new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2755 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'include')
-rw-r--r-- | include/extern.h | 6 | ||||
-rw-r--r-- | include/modes.h | 10 | ||||
-rw-r--r-- | include/modules.h | 5 | ||||
-rw-r--r-- | include/services.h | 23 |
4 files changed, 26 insertions, 18 deletions
diff --git a/include/extern.h b/include/extern.h index 75ad3eb28..a46894fa2 100644 --- a/include/extern.h +++ b/include/extern.h @@ -68,9 +68,6 @@ E void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode, char * E Channel *chanlist[1024]; -E void chan_adduser2(User * user, Channel * c); -E Channel *join_user_update(User * user, Channel * chan, const char *name, time_t chants); - E void get_channel_stats(long *nrec, long *memuse); E Channel *findchan(const char *chan); E Channel *firstchan(); @@ -78,8 +75,6 @@ E Channel *nextchan(); E void ChanSetInternalModes(Channel *c, int ac, const char **av); -E void chan_deluser(User * user, Channel * c); - E int is_on_chan(Channel * c, User * u); E User *nc_on_chan(Channel * c, NickCore * nc); @@ -97,7 +92,6 @@ E void do_cmode(const char *source, int ac, const char **av); E void do_join(const char *source, int ac, const char **av); E void do_kick(const std::string &source, int ac, const char **av); E void do_part(const char *source, int ac, const char **av); -E void do_sjoin(const char *source, int ac, const char **av); E void do_topic(const char *source, int ac, const char **av); E void MassChannelModes(BotInfo *bi, const std::string &modes); diff --git a/include/modes.h b/include/modes.h index 5a1fd60b5..64532bb6d 100644 --- a/include/modes.h +++ b/include/modes.h @@ -99,7 +99,7 @@ class UserModeParam : public UserMode * @param value The param * @return true or false */ - virtual bool IsValid(const char *value) { return true; } + virtual bool IsValid(const std::string &value) { return true; } }; /** This class is a channel mode, all channel modes use this/inherit from this @@ -151,7 +151,7 @@ class CoreExport ChannelModeList : public ChannelMode * @param mask The mask * @return true for yes, false for no */ - virtual bool IsValid(const char *mask) { return true; } + virtual bool IsValid(const std::string &mask) { return true; } /** Add the mask to the channel, this should be overridden * @param chan The channel @@ -190,7 +190,7 @@ class CoreExport ChannelModeParam : public ChannelMode * @param value The param * @return true for yes, false for no */ - virtual bool IsValid(const char *value) { return true; } + virtual bool IsValid(const std::string &value) { return true; } }; /** This is a mode that is a channel status, eg +v/h/o/a/q. @@ -264,7 +264,7 @@ class CoreExport ChannelModeKey : public ChannelModeParam public: ChannelModeKey() : ChannelModeParam(CMODE_KEY) { } - bool IsValid(const char *value); + bool IsValid(const std::string &value); }; /** Channel mode +f (flood) @@ -274,7 +274,7 @@ class ChannelModeFlood : public ChannelModeParam public: ChannelModeFlood() : ChannelModeParam(CMODE_FLOOD) { } - bool IsValid(const char *value); + bool IsValid(const std::string &value); }; /** This class is used for channel mode +A (Admin only) diff --git a/include/modules.h b/include/modules.h index 8903eb9c2..45541c28c 100644 --- a/include/modules.h +++ b/include/modules.h @@ -644,9 +644,10 @@ class CoreExport Module /** Called before a user joins a channel * @param u The user - * @param channel The channel + * @param c The channel + * @return EVENT_STOP to allow the user to join the channel through restrictions, EVENT_CONTINUE to let other modules decide */ - virtual void OnPreJoinChannel(User *u, const char *channel) { } + virtual EventReturn OnPreJoinChannel(User *u, Channel *c) { return EVENT_CONTINUE; } /** Called when a user joins a channel * @param u The user diff --git a/include/services.h b/include/services.h index de6972fc2..244377419 100644 --- a/include/services.h +++ b/include/services.h @@ -410,10 +410,7 @@ struct ircdvars_ { int knock_needs_i; /* Check if we needed +i when setting NOKNOCK */ char *chanmodes; /* If the ircd sends CHANMODE in CAPAB this is where we store it */ int token; /* Does Anope support the tokens for the ircd */ - int sjb64; /* Base 64 encode TIMESTAMP */ - int sjoinbanchar; /* use single quotes to define it */ - int sjoinexchar; /* use single quotes to define it */ - int sjoininvchar; /* use single quotes to define it */ + int sjb64; int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */ int sglineenforce; int ts6; /* ircd is TS6 */ @@ -832,7 +829,9 @@ struct c_userlist { enum ChannelFlags { /* Channel still exists when emptied */ - CH_PERSIST + CH_PERSIST, + /* If set the channel is syncing users (eg, multi user SJOIN) and it should not be deleted */ + CH_SYNCING }; class CoreExport Channel : public Extensible, public Flags<ChannelFlags> @@ -878,6 +877,20 @@ 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? */ + /** Restore the channel topic, set mlock (key), set stickied bans, etc + */ + void Sync(); + + /** Join a user internally to the channel + * @param u The user + */ + void JoinUser(User *u); + + /** Remove a user internally from the channel + * @param u The user + */ + void DeleteUser(User *u); + /** * See if a channel has a mode * @param Name The mode name |