X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=5ab791eeeca31bf343d59753d97a77e432a89aa8;hb=7b7e82bec5ab5a39d88896fc7433125fd0c684de;hp=f8bfb5a6e523eeb78cf7579d4becb2b9709b42c3;hpb=9136136ac373a922cd0875f77d3212a419fb9100;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index f8bfb5a6e..5ab791eee 100644 --- a/include/users.h +++ b/include/users.h @@ -241,11 +241,11 @@ class CoreExport User : public Extensible /** The user's mode list. * Much love to the STL for giving us an easy to use bitset, saving us RAM. - * if (modes[modeletter-65]) is set, then the mode is - * set, for example, to work out if mode +s is set, we check the field - * User::modes['s'-65] != 0. + * if (modes[modeid]) is set, then the mode is set. + * For example, to work out if mode +i is set, we check the field + * User::modes[invisiblemode->modeid] == true. */ - std::bitset<64> modes; + std::bitset modes; public: @@ -469,7 +469,7 @@ class CoreExport User : public Extensible * @param newnick The nickname to change to * @return True if the nickchange was successful. */ - bool ForceNickChange(const std::string& newnick) { return ChangeNick(newnick, true); } + bool ForceNickChange(const std::string& newnick, time_t newts = 0) { return ChangeNick(newnick, true, newts); } /** Oper down. * This will clear the +o usermode and unset the user's oper type @@ -501,10 +501,16 @@ class CoreExport User : public Extensible */ void WriteServ(const char* text, ...) CUSTOM_PRINTF(2, 3); + /** Sends a command to this user. + * @param command The command to be sent. + * @param text The message to send. + */ + void WriteCommand(const char* command, const std::string& text); + /** Sends a server notice to this user. * @param text The contents of the message to send. */ - void WriteNotice(const std::string& text); + void WriteNotice(const std::string& text) { this->WriteCommand("NOTICE", ":" + text); } void WriteNumeric(unsigned int numeric, const char* text, ...) CUSTOM_PRINTF(3, 4); @@ -614,7 +620,7 @@ class CoreExport User : public Extensible * @param force True if the change is being forced (should not be blocked by modes like +N) * @return True if the change succeeded */ - bool ChangeNick(const std::string& newnick, bool force = false); + bool ChangeNick(const std::string& newnick, bool force = false, time_t newts = 0); /** Send a command to all local users from this user * The command given must be able to send text with the @@ -655,7 +661,7 @@ class CoreExport UserIOHandler : public StreamSocket typedef unsigned int already_sent_t; -class CoreExport LocalUser : public User, public InviteBase +class CoreExport LocalUser : public User, public InviteBase, public intrusive_list_node { public: LocalUser(int fd, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server); @@ -663,10 +669,6 @@ class CoreExport LocalUser : public User, public InviteBase UserIOHandler eh; - /** Position in UserManager::local_users - */ - LocalUserList::iterator localuseriter; - /** Stats counter for bytes inbound */ unsigned int bytes_in; @@ -863,8 +865,7 @@ inline FakeUser* IS_SERVER(User* u) inline bool User::IsModeSet(ModeHandler* mh) { - char m = mh->GetModeChar(); - return (modes[m-65]); + return (modes[mh->GetId()]); } inline bool User::IsModeSet(UserModeReference& moderef) @@ -876,6 +877,5 @@ inline bool User::IsModeSet(UserModeReference& moderef) inline void User::SetMode(ModeHandler* mh, bool value) { - char m = mh->GetModeChar(); - modes[m-65] = value; + modes[mh->GetId()] = value; }